即时到帐支付丨API支付丨接口申请提供商丨BC-Zpay平台网

支付接口签名

admin
支付接口签名

签名规则

签名算法
签名生成的通用步骤如下:

  • 第一步,设所有发送或者接收到的数据为集合M,将集合M内非空参数值的参数按照参数名ASCII码从小到大排序(字典序), 使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串stringA。

特别注意以下重要规则:

◆ 参数名ASCII码从小到大排序(字典序);

◆ 参数的值为空或null、sign签名字段不参与签名;

◆ 参数名区分大小写;

◆ 验证调用返回或码付宝主动通知签名时,传送的sign参数不参与签名,将生成的签名与该sign值作校验。

◆ 码付宝接口可能增加字段,验证签名时必须支持增加的扩展字段

  • 第二步,在stringA最后拼接上key得到stringSignTemp字符串,并对stringSignTemp进行MD5运算,得到sign值signValue。

◆ key:“应用管理”-“应用管理”-“选择对应应用-详情”中获取SECRET

举例:

假设传送的参数如下:

a:1
b:2
sign:86452f3b9aa613299f2e00224a3dfef1

第一步:对参数按照key=value的格式,并按照参数名ASCII字典序排序如下:

stringA = "a=1&b=2"

第二步:拼接API密钥:

stringB = stringA+"&key=sdfwewlslsxxwesf"   // 注: key为应用的SECRET
sign = md5(stringB) // md5加密, 结果为 86452f3b9aa613299f2e00224a3dfef1

php代码示例

~~~
/**
 * 生成支付签名
 * @param array $option 所有参数
 * @param string $partnerKey 私钥
 * @return string   签名
 */
function getPaySign($option, $partnerKey)
{
    ksort($option);
    $sign = '';
    foreach ($option as $k => $v) {
        if ($k == 'sign' || $v === '' || $v === null) {
            continue;
        }
        $sign .= "$k=$v&";
    }
    return md5($sign . 'key=' . $partnerKey);
}
/**
 * 验证支付签名
 * @param array $option 所有参数
 * @param string $partnerKey 私钥
 * @return bool
 */
function checkPaySign($option, $partnerKey)
{
    $sign = $option["sign"];
    return getPaySign($option, $partnerKey) == $sign;
}
~~~