消息加/解密

简介

  • 开发者在接收和处理消息时,出于安全考虑,必须对消息收发的过程进行必要的加解密。该文档讲述如何使用示例代码接入加解密,参考本文档并使用示例代码
  • postdata中的XML体,将使用在小鹅云控制台配置的消息校验Token和消息加密key来进行加密
  • 小鹅平台会将消息加密成xml格式推送到客户的回调地址上,客户只需要下载sdk进行解密即可

加密

消息加密后格式

<xml>
<Encrypt><![CDATA[onpMeY0hanKaXz0sKu5994Fn5LA/ckapXA6z1i5SPyegjPlHlXz7iBILhlQje9f2Y0xfXL/0lZZe0sSXUW+1ik83jO0U1+nT66AqXSAMO77cHRMI5bBDilXXzYKVjw7DLxKnAnKkvNg5F1DofrZKEkMdN02dN14kLiV30WPM+meAJcx91QbEtUonI6ABqiNqOzwJegpOolG5Tup8iT4mFw==]]></Encrypt>
<MsgSignature><![CDATA[46a085b52d26f352f9c887b349d9d2c16cac3050]]></MsgSignature>
<TimeStamp>1409304348</TimeStamp>
<Nonce><![CDATA[1214730348]]></Nonce>
</xml>

参数说明

参数名 必选 类型 说明
Encrypt string 加密字符串
MsgSignature string 消息体签名
TimeStamp number 时间戳
Nonce number 随机数nonce

解密(php示例)

  1. 引入SDK
  2. 使用如下方式解密
$xml_tree = new DOMDocument();
$xml_tree->loadXML($encryptMsg);
//获取XML中的数据
$array_e = $xml_tree->getElementsByTagName('Encrypt');
$array_m = $xml_tree->getElementsByTagName('MsgSignature');
$array_t = $xml_tree->getElementsByTagName('TimeStamp');
$array_n = $xml_tree->getElementsByTagName('Nonce');
 //加密字符串
$encrypt = trim($array_e->item(0)->nodeValue);   
//消息体签名
$msg_sign = trim($array_m->item(0)->nodeValue);   
//时间戳
$timeStamp = trim($array_t->item(0)->nodeValue);  
 //随机数
$nonce = trim($array_n->item(0)->nodeValue); 


$format = "<xml><Encrypt><![CDATA[%s]]></Encrypt></xml>";
$from_xml = sprintf($format, $encrypt);

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

说明

  1. php获取POST体中的xml数据,可以使用file_get_contents('php://input'),其他语言请自行查阅
  2. 由于XML参数格式的问题,解析出来的参数两边会自动多出空格,因此解析出来的 encrypt、msg_sign、timeStamp 和 nonce 四个参数需要做一下去掉两边的空格字符处理,php使用trim()即可,其他语言请自行查阅

Encrypt标签解密数据格式

  • 当推送类型为 订单(order), 优惠券(coupons), 账号合并(account_merge), 用户注册(user_register),信息采集(info_collect) ,权益变更(role_change )时, 推送消息的<Encrypt></Encrypt>标签解密后没有 <doc></doc> 根节点。由于一些强类型语言在解析xml时若没有根节点会解析出错,所以除了上述类型没有根节点,其他类型推送时均有<doc></doc>根节点。

  • <doc></doc>根节点数据

<type>order</type>
<action>create</action>
...
<app_id>app123456</app_id>
  • <doc></doc>根节点数据
<doc>
<type>order_change</type>
<action>create</action>
...
<app_id>app123456</app_id>
</doc>

消息加解密SDK下载(包含PHP、Java、Python等)

XiaoeSDK 下载链接

results matching ""

    No results matching ""