收藏
回答

递交全网发布的时候 消息与事件接收URL接受不到微信推送的消息?

递交全网发布的时候  授权URL能收到2条 一条授权 一条取消授权

普通消息URL收不到  https://paitume.com/api/wx/notify_msg/$APPID$

第三方服务APPID:wxbba5163d50a0ff41

测试号已经加入到白名单:授权测试公众号列表:gh_3c884a361561 但是经常修改后再修改就没有了??


是不是这个原因导致没有消息

和代码无关 Nginx的日志并没有微信的记录 授权的正常

谢谢工作人员~

最后一次编辑于  09-18
回答关注问题邀请回答
收藏

7 个回答

  • 小程序技术专员-寂
    小程序技术专员-寂
    09-19

    你好,请使用 tcpdump 来监控上下行消息, 开发这边确定是服务器回包不正确导致的。

    09-19
    赞同
    回复 3
    • 小程序技术专员-寂
      小程序技术专员-寂
      09-19
      对了,请检查在 9月18日 14:30:00 到 15:30:00 之间是否有改动过系统,因为之前是正常的。
      09-19
      回复
    • 王林
      王林
      09-20回复小程序技术专员-寂
      好的 我查查~
      09-20
      回复
    • 王林
      王林
      09-29回复小程序技术专员-寂
      已经解决,但是只勾选小程序权限集是收不到消息的,把公众号也勾选上才有
      09-29
      回复
  • 王林
    王林
    09-29

    public function notify_msg($fromAppId){

            CLogger::info('微信消息1',$_GET);

            CLogger::info('微信消息2'.file_get_contents("php://input") );

            $timeStamp    = $this->input->get_post('timestamp');

            $nonce        = $this->input->get_post('nonce');

            $msg_sign     = $this->input->get_post('msg_signature');

            $encryptMsg   = file_get_contents('php://input');

            if(!$encryptMsg){

                CLogger::error('notify_msg没有input');

                echo 'error'; exit();

            }

            $token = 'paitume';

            $encodingAesKey = '后台定义的解密字符串43位';

            $myAppId = '自己的第三方appid';

            //解密消息

            $pc = new WxBizMsgCrypt($token, $encodingAesKey, $myAppId);

            $xml_tree = new DOMDocument();

            $xml_tree->loadXML($encryptMsg);

            $array_e = $xml_tree->getElementsByTagName('Encrypt');

            $encrypt = $array_e->item(0)->nodeValue;

            //替换百分号

            $format = "<xml><ToUserName><![CDATA[toUser]]></ToUserName><Encrypt><![CDATA[%s]]></Encrypt></xml>";

            $from_xml = sprintf($format, $encrypt);

            // 解密

            $msg = '';

            $errCode = $pc->decryptMsg($msg_sign, $timeStamp, $nonce, $from_xml, $msg);

            if ($errCode == 0) {

                CLogger::info('解密成功',[$msg]);

                $xml = new DOMDocument();

                $xml->loadXML($msg);

                $array_content = $xml->getElementsByTagName('Content');

                $array_user = $xml->getElementsByTagName('FromUserName');

                $fromUserOpenId = $array_user->item(0)->nodeValue;

                $content = $array_content->item(0)->nodeValue;

                if($content == 'TESTCOMPONENT_MSG_TYPE_TEXT'){

                    CLogger::info('发送TESTCOMPONENT_MSG_TYPE_TEXT_callback');

                    $time = time();

                    header("Content-type:text/xml");

                    $xml = new \SimpleXMLElement('<xml></xml>');

                    $sendData['ToUserName'] = $fromUserOpenId;

                    $sendData['FromUserName'] ='gh_xxxxxxx';//你的原始appID

                    $sendData['CreateTime'] = $time;

                    $sendData['MsgType'] = 'text';

                    $sendData['Content'] = 'TESTCOMPONENT_MSG_TYPE_TEXT_callback';

                    $this->_data2xml($xml, $sendData);

                    $str = $xml->asXML();

                    $sEncryptMsg = ""; //xml格式的密文

                    $errCode = $pc->encryptMsg($str, $time, $nonce, $sEncryptMsg);

                    CLogger::info('加密消息'.$errCode.'---'.$sEncryptMsg);

                    echo $sEncryptMsg;

                    exit();

                } else if(strpos($content,'QUERY_AUTH_CODE') !== false){

                    CLogger::info('消息包含QUERY_AUTH_CODE'.$content);

                    echo "";

                    $queryAuthCode = str_replace('QUERY_AUTH_CODE:','',$content);

                    $componentAccessToken = $this->getComponentAccessToken();

                    $url = 'https://api.weixin.qq.com/cgi-bin/component/api_query_auth?component_access_token='.$componentAccessToken;

                    $authDataArray['component_appid'] = $myAppId;

                    $authDataArray['authorization_code'] = $queryAuthCode;

                    $authResult = $this->curl_post($url, json_encode($authDataArray));

                    CLogger::info('授权Auth返回',$authResult);

                    $authorizationInfo = $authResult['authorization_info'];

                    $authorizerAccessToken = $authorizationInfo['authorizer_access_token'];

                    if($authorizerAccessToken){

                        $sendMsgUrl = 'https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token='.$authorizerAccessToken;

                        $msgData['access_token'] = $authorizerAccessToken;

                        $msgData['touser'] = $fromUserOpenId;

                        $msgData['msgtype'] = 'text';

                        $msgData['text'] = ['content'=>$queryAuthCode.'_from_api'];

                        $sendMsgResult = $this->curl_post($sendMsgUrl, json_encode($msgData));

                        CLogger::info('发送客服消息返回'.json_encode($sendMsgResult));

                    }

                }

            } else {

                CLogger::error('消息解密失败');

            }

        }



    09-29
    赞同
    回复
  • 测试名字是否显示
    测试名字是否显示
    09-29

    你好 在吗 同问

    09-29
    赞同
    回复 7
    • 王林
      王林
      09-29
      已经解决..问题很诡异.不知道为啥 我删了应用重新生成一下就能接到消息了.
      09-29
      回复
    • 王林
      王林
      09-29
      我猜测是wx内部或者网络的锅.
      09-29
      回复
    • 王林
      王林
      09-29
      经过我测试的结果 还有一个问题,就是只勾选了小程序的权限的话 也是收不到消息的.
      09-29
      回复
    • 测试名字是否显示
      测试名字是否显示
      09-29回复王林
      用的是 那个接口啊 有人说 那个 tricket 的 接口 也就可以当事件推送接口来用
      09-29
      回复
    • 王林
      王林
      09-29回复测试名字是否显示
      怎么可能 ticket消息里并没有openID
      09-29
      回复
    查看更多(2)
  • Sky
    Sky
    09-18

    同问,等一波回复

    09-18
    赞同
    回复
  • HonG
    HonG
    09-18

    在线等

    09-18
    赞同
    回复
  • 小王子
    小王子
    09-18

    我也遇到这样问题。。

    09-18
    赞同
    回复
  • 王瑾瑜
    王瑾瑜
    09-18

    关注该问题。

    09-18
    赞同
    回复
问题标签