回调说明

  • 如需回调服务需要在控制台添加回调接口
  • 添加回调域后,该服务下回调服务会自动往回调接口上推送数据

回调失败判定

  • 当在控制台填写固定回调接口地址后,需要在接口中返回 success 字符串

以PHP为例

exit("success");
  • 当回调接口未返回success字符串时,回调服务会被认定为失败,并重试
  • 当重试次数达到3次时,该回调信息会被记录到数据库中,请使用接口查询

回调格式

  • 通知信息是以 JSON 格式进行组织的,注意这里的 POST 格式的 ContentType 是 application/json。

公共头信息

以下的字段每种类型的回调都一定会携带:

参数名 类型 含义
User-Agent string 回调代理信息
Content-Type string application-json 数据格式
Content-Length int 数据长度
User-Agent: vhall
Content-Type: application/json
Content-Length: content length

回调签名

使用请求参数构造规范化的请求字符串(Canonicalized Query String)

a) 按照参数名称的字典顺序对请求中所有的请求参数(包括文档中描述的“公共请求参数”和给定了的请求接口的自定义参数,但不能包括“公共请求参数”中提到signature参数本身)进行排序。

注:当使用GET方法提交请求时,这些参数就是请求URI中的参数部分(即URI中“?”之后由“&”连接的部分)。

b) 对每个请求参数的名称和值进行编码。名称和值要使用UTF-8字符集进行URL编码,URL编码的编码规则是:

  • 对于字符 A-Z、a-z、0-9以及字符“-”、“_”、“.”、“~”不编码;

c) 对编码后的参数名称、私钥和值使用英文等号(|)进行连接。

d) 再把英文竖线连接得到的字符串按参数名称的字典顺序依次连接,即得到规范化字符串。

使用上一步构造的规范化字符MD5计算,即得到签名的字符串:

签名方法示例

//PHP版本代码
$privateKey = 'abcdefg';    // app secret_key
data = $_POST;
$sign = $data['signature'];
unset($data['signature']);
$sign_new = makeSignature($data , $privateKey);//调用签名生成函数

if($sign == $sign_new){
    echo 'success';
}else{
    echo 'fail';
}

//$privateKey为回调接口私钥
//$data为回传的POST数据数组,剔除掉signature键值
//签名生成函数
function makeSignature(array $data, $privateKey){
    ksort($data);
    $str = '';
    $privateKey = md5($privateKey);
    foreach ($data as $k => $v){
        $str .= $k.'|'.$privateKey.'|'.$v;
    }
    return md5($str);
}