收藏
回答

咨询下。有人消息推送的验证服务器通过了吗?

企业微信,公众号的验证都没问题。 不知道为什么小程序验证一直提示token不正确,我方服务器日志排查报错的错误码是-40001

是不是我们小程序的验证不能和其他的企业微信和公众号用一样逻辑,有没有php的范例代码我们核对下错误原因?


目前发现小程序的差异如下:验证时候企业号,企业微信用msg_signature, 小程序用signature。

其他还有差异吗? SHA1的加密我看是一样的


回答关注问题邀请回答
收藏

6 个回答

  • 犇牛
    犇牛
    2017-03-29

    你的url返回的内容是echostr的字符串,我开始用的是json格式返回,要用text格式


    说明文档有待提高,明明说的是json/xml格式(其实应该是请求),

    响应却没有说明,一般人都理解成和请求一样的json/xml格式,结果特么的返回竟然是text格式,擦

    @ResponseBody
    @RequestMapping("/sendTips")
    public String message1(HttpServletRequest request){
    //后期数据处理
       String echostr = request.getParameter("echostr");
    return echostr;
    }


    2017-03-29
    有用
    回复
  • Katrina D
    Katrina D
    2016-12-22

    可否取消这个解决问题的标签,加密的方式官方还没在文档标注,我们的加密用的是其他微信方案。其他都能通过。

    2016-12-22
    有用
    回复
  • Katrina D
    Katrina D
    2016-12-22
    public function VerifyURL($sMsgSignature, $sTimeStamp, $sNonce, $sEchoStr, &$sReplyEchoStr)
    {
        if (strlen($this->m_sEncodingAesKey) != 43) {
            return JOrigin_Wechat_Model_ErrorCode::$IllegalAesKey;
        }
     
        $pc=Mage::getModel('jorigin_wechat/prpcrypt');
        $pc->setKey($this->m_sEncodingAesKey);
        //verify msg_signature
        $array = $this->getSHA1($this->m_sToken, $sTimeStamp, $sNonce, $sEchoStr);
        $ret = $array[0];
     
        if ($ret != 0) {
            return $ret;
        }
     
        $signature = $array[1];
        if ($signature != $sMsgSignature) {
            return JOrigin_Wechat_Model_ErrorCode::$ValidateSignatureError;
        }
     
        $result = $pc->decrypt($sEchoStr, $this->m_sCorpid);
        if ($result[0] != 0) {
            return $result[0];
        }
        $sReplyEchoStr = $result[1];
     
        return JOrigin_Wechat_Model_ErrorCode::$OK;
    }
     
     
     
    /**
     * 用SHA1算法生成安全签名
     * @param string $token 票据
     * @param string $timestamp 时间戳
     * @param string $nonce 随机字符串
     * @param string $encrypt 密文消息
     */
    public function getSHA1($token, $timestamp, $nonce, $encrypt_msg)
    {
        //排序
        try {
            $array = array($encrypt_msg, $token, $timestamp, $nonce);
            sort($array, SORT_STRING);
            $str = implode($array);
            return array(JOrigin_Wechat_Model_ErrorCode::$OK, sha1($str));
        } catch (Exception $e) {
            print $e . "\n";
            return array(JOrigin_Wechat_Model_ErrorCode::$ComputeSignatureError, null);
        }
    }


    2016-12-22
    有用
    回复
  • Katrina D
    Katrina D
    2016-12-22

    加密的消息报文验证下一行应该是这样对吗?


                $array = array($encrypt_msg, $token, $timestamp, $nonce);



    根据您的范例,我看了和我们现在的对比不一样。 是否有加密的范例?

    2016-12-22
    有用
    回复
  • 刘祥波~知识之城、小程序、app
    刘祥波~知识之城、小程序、app
    2016-12-22

    楼上是正确的

    2016-12-22
    有用
    回复
  • 峰
    2016-12-22

    我配成功了

    public function index() {

    if ($this->checkSignature()) {

    echo $_GET['echostr'];

    } else {

    echo 'error';

    }

    }

    private function checkSignature() {

    $signature = $_GET["signature"];

    $timestamp = $_GET["timestamp"];

    $nonce = $_GET["nonce"];

    $token = 'token';

    $tmpArr = array($token, $timestamp, $nonce);

    sort($tmpArr, SORT_STRING);

    $tmpStr = implode( $tmpArr );

    $tmpStr = sha1( $tmpStr );

    if( $tmpStr == $signature ){

    return true;

    }else{

    return false;

    }

    }


    2016-12-22
    有用
    回复
登录 后发表内容