调用 /oauth/token 接口时需要对请求参数进行签名,服务器端会验证请求参数是否合法。
- 加密规则说明
加密示例参数:app_id=20180101&grant_type=authorization_code&code=C155FF
① 所有请求参数按照字母先后顺序排列
例如:将app_id,grant_type,code 排序为app_id,code,grant_type
② 把所有参数名和参数值进行拼装,参数值为空的不参与签名(红色为参数名)
例如:app_id20180101codeC155FFgrant_typeauthorization_code
③ 拼装加密原始字符串,把appSecret拼装在字符串的两端(appSecret示例值:45B308)
例如:45B308app_id20180101codeC155FFgrant_typeauthorization_code45B308
④ 使用MD5加密原始字符串,再转化成大写
例如:strtoupper(md5('45B308app_id20180101codeC155FFgrant_typeauthorization_code45B308'));
- PHP签名函数示例代码
/**
* 生成签名
* @param array $param 要参与签名的参数
* @param string $secert app_secert
* @return string
*/
function build_signature($param, $secert) {
if (empty($param)) {
return '';
}
$arr = array_merge($param);
ksort($arr);
reset($arr);
$str = '';
// 排除参数值为空的
foreach ($arr as $k => $v) {
if ($v !== '' && trim($v) !== '') {
$str .= $k.$v;
}
}
return strtoupper(md5($secert.$str.$secert));
}