推送消息加解密
注:返回值code=1 为报错、msg的为报错信息(请尽量用英文表示报错信息), 后续的商家应用会上线回调日志查询功能,可以看到返回的值。
1.MD5
说明
通过防伪签名参数sign,它是 MD5(client_id+msg+client_secrect) 这样得到的。client_id和client_secrect是我们申请插件的信息,msg是经过UrlEncode(UTF-8)编码的消息对象的json字符串,具体参数请看本页中各业务消息结构文档。
示例
$client_id = "";//应用的 client_id
$client_secret = "";//应用的 client_secret
$data = $_POST;
/**
* 判断消息是否合法,若合法则返回成功标识
*
*如果失败 返回code=1 msg为你的报错信息
*
*/
$msg = $data['msg'];
$sign_string = $client_id.$msg.$client_secret;
$sign = md5($sign_string);
if($sign != $data['sign']){
$result = array("code"=>1,"msg"=>"error") ;
return json_encode($result);
}else{
$result = array("code"=>0,"msg"=>"success") ;
return json_encode($result);
}
/**
* msg内容经过 urlencode 编码,需进行解码
*/
$msg = json_decode(urldecode($msg),true);
/**
* 根据 msg_type 来识别消息事件类型,具体的 msg_type 值以文档为准,此处仅是示例
*/
if($data['msg_type'] == "SCRM_CARD"){
//处理会员卡商家侧消息
}
2.pkcs#7
说明
通过开源的pkcs#7加密标准,其中参数分别是:TOKEN,ENCODING_AES_KEY是插件服务器配置。CLIENT_ID是插件id。解密方式参看示例代码,值得注意的是在调试时,ENCODING_AES_KEY,TOKEN 我们可以在控制台修改成任一值,不过ENCODING_AES_KEY的长度一定要是43位字符串组成。
示例
require_once("JiSuCrypt.php");
const TOKEN = 'zhichi'; //插件token
const ENCODING_AES_KEY = 'VlYzNVFxdzdKVzNXMmVWT291QkIyODV4bEp2NUJvNTg'; // 插件ENCODINGAESKEY
const CLIENT_ID = 'test_c_id';//插件id
$data = $_POST;
$msg = $data['msg'];
$encryptMsg = json_decode($msg,true);
$crypt = new JiSuCrypt(TOKEN, ENCODING_AES_KEY, CLIENT_ID);
$errCode = $crypt->DecryptMsg($encryptMsg['signature'], $encryptMsg['timestamp'], $encryptMsg['nonce'], $encryptMsg['encrypt'],$decryptMsg);
/**
* msg内容是解密后的json字符串,需要进行json解码
*/
$msg = json_decode($decryptMsg,true);
/**
* 判断消息是否合法,若合法则返回成功标识
* 如果失败 返回code=1 msg为你的报错信息
*/
if (is_array($msg)) {
$result = array("code"=>0,"msg"=>"success") ;
return json_encode($result);
}else{
$result = array("code"=>1,"msg"=>"error") ;
return json_encode($result);
}
/**
* 根据 msg_type 来识别消息事件类型,具体的 msg_type 值以文档为准,此处仅是示例
*/
if($data['msg_type'] == "SCRM_CARD"){
//处理会员卡商家侧消息
}