签名加密方式


签名加密方式

特别注意以下重要规则:

  1. 参数名ASCII码从小到大排序(字典序);
  2. 如果参数的值为空不参与签名;
  3. 参数名区分大小写;
  4. header头部的参数不参与签名;
  5. 接口请求的路由参数r不参与签名;
  6. 签名失效时间为2分钟;
  7. 事件推送签名的密钥是令牌(token),接口请求签名的密钥是api_secret。

计算签名

  • 其中nonce表示随机字符串,timestamps表示时间戳。

  • args表示消息体,非空参数值的参数按照参数名ASCII码从小到大排序(字典序),使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串string

        ksort($args);
        $string = '';
        foreach ($args as $i => $arg) {
            if ($arg === null || $arg === '') {
                continue;
            }
            if (is_array($arg)) {
                $arg = json_encode($arg);
            }
            $string .= ($i . '=' . $arg . '&');
        }
        $string = substr($string, 0, -1);
  • 将密钥(secret)、字符串(string)和时间戳(timestamps)进行base64_encode转义下得到数据base64_temp;注意参数的顺序
string = 'a=1&b=2&c=3';
base64_temp = base64_encode(secret . string . timestamps);
  • 然后再将字符串(string)、上一步获取的数据(base64_temp)、密钥(secret)和随机字符串(nonce)拼接起来再进行md5加密,注意参数的顺序,然后转成大写,就能得到一个签名dev_msg_signature。
string = 'a=1&b=2&c=3';
temp=md5(string . base64_temp . secret . nonce);
dev_msg_signature = strtoupper(temp)

未来鸟 2023年6月14日 22:45 收藏文檔