收藏
回答

咨询下。有人消息推送的验证服务器(加密报文模式)通过了吗?

昨天发了贴,但是没看到加密的方案。我把我的贴一下,这几个函数都是官方的:

但是我无法验证通过,提示token不对。我核对了token是没错的


验证URL的部分,取信息就不贴了。


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

1 个回答

  • 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
    有用
    回复
登录 后发表内容