365体育备用网址报道22.5.1 消息加解密_365体育备用网址官网资讯

开拓者在代替授权公众号接收和处置消息时,出于安全考虑,必须对消息收发的进程进行必须的加解密。
消息加解密的实现流程如下所示。
接口程序中需要配置以下三项参数。

define("AppID",             "wx2ae3853dda623211");
define("AppSecret",         "df8a05425d4ba95405fb1b048704373e");

define("Token",             "weixin");
define("EncodingAESKey",    "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFG");

当用户向公众账号发送消息时,微信开放平台应用将会在URL中带上appid、签名signature、时间戳timestamp、随机数nonce、openid、加密类型encrypt_type、消息签名msg_signature等参数,如下所示

http://open.fangbei.org/wxopen/msg.PHP?appid=/wx570bc396a51b8ff8&signature=e4195d494e304fbdc19fb4d58e18b967cb5b4b02&timestamp=1465799535&nonce=734775080&openid=ozy4qt1eDxSxzCr0aNT0mXCWfrDE&encrypt_type=aes&msg_signature=e5574ec67f7f429b8c7793ebc0b493fd977c682d

同时向该接口推送如下XML消息,即一个已加密的消息

<xml>
    <ToUserName><![CDATA[gh_3c884a361561]]></ToUserName>
    <Encrypt><![CDATA[yCaK/BzoYXNNB8IkHauQqH5ozAmUjm8SLfg29ZMmkavy92e4txPGl5NsKCfGlWyMyWzYRRvlND3rDfXJXr0ddmJ34yolWHgFpLmKDpVlox+3atfzRwPPdqukSqA2XVtVwIKFiSKLdvaagj6wMWXIsqyvmZXZWfEg9QwR1TSgLH46ZnQS1EyEd7qhYpCMGicYgjEeWw6KKQD9/604QlW3zh8oIKy51Oy9MaGLiDrZrHC8C5x8iqFH48rhGMDk4f8uDMl3IdA/f+4vdERp0/fGWLSi8ZKWb9P5Z3E8OUBAiEcCQ2nmcPRheJQBIZKH0g1YLNdpr0t08i2LvZniNfPJ/uS+IuPcMjP9RjEz9n4kAnFgiuyB6cocIZfYE8M6I/nrwvVZepQP6vAZaaetrCZn+PdEAhHoWTl/KOHbJ7Vv+F8L2D1pbajgc3IWHBnyNF2dKtp/ctr9ZzQGtyszhAsgTq9W1bbdySFM5ra5k3IUY13EFWX3hFYYubV9SiUhj7r9soVBFwUeMIqJYnWU63M+BYR33rFTBui1kwQSx5LOHlYbWMY+6xjhKEqB5qcKmPhr9x7XHtXCJ4i4bqFPqjvnog==]]></Encrypt>
</xml>

这时,程序需要从url中获得以下参数以及接收微信传送的POST内容。

$signature  =$_GET['signature'];
$timestamp  =$_GET['timestamp'];
$nonce = $_GET['nonce'];
$encrypt_type = $_GET['encrypt_type'];
$msg_signature  =$_GET['msg_signature'];
$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];

这些参数将用于加解密进程
接口程序收到消息后,先进行解密,解密部分代码如下

//解密
if ($encrypt_type == 'aes'){
    $pc = new WXBizMsgCrypt(Token, EncodingAESKey, AppID);
    $this->logger(" D \r\n".$postStr);
    $decryptMsg = "";  //解密后的明文
    $errCode = $pc->DecryptMsg($msg_signature, $timestamp, $nonce, $postStr, $decryptMsg);
    $postStr = $decryptMsg;
}

解密后的XML如下

<xml>
    <ToUserName><![CDATA[gh_3c884a361561]]></ToUserName>
    <FromUserName><![CDATA[ozy4qt1eDxSxzCr0aNT0mXCWfrDE]]></FromUserName>
    <CreateTime>1465799534</CreateTime>
    <MsgType><![CDATA[text]]></MsgType>
    <Content><![CDATA[QUERY_AUTH_CODE:queryauthcode@@@cdGgIgvWgYbXn3iqXM2NHkrMF09psBBScXQoEdLFSnGxmtZlmXknhcImp7jFFDKRx2RBTac2GbLycTnJ1Yo0qQ]]></Content>
    <MsgId>6295561061426473714</MsgId>
</xml>

对消息在自己的原有的代码流程中处置,完成之后,一个要回复的文本消息如下:

<xml>
    <ToUserName><![CDATA[ozy4qt1eDxSxzCr0aNT0mXCWfrDE]]></ToUserName>
    <FromUserName><![CDATA[gh_3c884a361561]]></FromUserName>
    <CreateTime>1465799535</CreateTime>
    <MsgType><![CDATA[text]]></MsgType>
    <Content><![CDATA[]]></Content>
</xml>

把上述消息进行加密,返回给微信公众账号,加密进程如下:

//加密
if ($encrypt_type == 'aes'){
    $encryptMsg = ''; //加密后的密文
    $errCode = $pc->encryptMsg($result, $timeStamp, $nonce, $encryptMsg);
    $result = $encryptMsg;
    $this->logger(" E \r\n".$result);
}

加密后的内容如下

<xml>
    <Encrypt><![CDATA[h/umYlxmksaCoeNwPIlm65KbTucdBAUFxn10ke/kPmtngKzfQ5J04jgEdZekLeuyytVJLz1z9jsrPA41n8z7vg==]]></Encrypt>
    <MsgSignature><![CDATA[e3f0922ff7649f338c49c595d5c39aaa08184bcd]]></MsgSignature>
    <TimeStamp>1465799531</TimeStamp>
    <Nonce><![CDATA[734775080]]></Nonce>
</xml>

这样,一个安全模式下的加解密消息就完成了。

------分隔线----------------------------

公布评论 (166人察看0条评论)
请自觉遵守互联网相关的政策法规,严禁公布色情、暴力、反动的言论。
用户名: 验证码: 点击我更换伯乐娱乐城最低存款
最新评论