用户工具

站点工具


vhall_open:签名方法

签名方法

API签名主要使用在系统间进行交互时,采用API签名,可以保证请求的数据准确性和接口的安全性。

签名步骤

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

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

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

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

* 对于字符 A-Z、a-z、0-9以及字符“-”、“_”、“.”、“~”不编码; c) 对编码后的参数名称、私钥和值使用英文等号(|)进行连接。

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

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

签名方法示例

callback.php
<?php
    //PHP版本代码
    $privateKey = 'abcdefg';//接口设置的private_key参数(回调接口验证私钥)
    data = $_POST;
    $sign = $data['signature'];
    unset($data['signature']);
    $sign_new = makeSignature($data , $privateKey);//调用签名生成函数
    if($sign == $sign_new){
        echo 'succ';
    }else{
        echo 'fail';
    }
 
    //$privateKey为回调接口私钥
    //$data为回传的POST数据数组,剔除掉signature键值
    //签名生成函数
    function makeSignature(array $data, $privateKey){
        ksort($data);
        $str = null;
        $privateKey = md5($privateKey);
        foreach ($data as $k => $v){
            $str .= $k.'|'.$privateKey.'|'.$v;
        }
        return md5($str);
    }
?>
vhall_open/签名方法.txt · 最后更改: 2017/11/15 16:55 由 xiaomeng