小游戏虚拟支付报签名错误
/**
* 生成mp_sig签名
* [@param](/user/param) $url_path
* [@param](/user/param) $params
* [@param](/user/param) $session_key
* [@return](/user/return) string
*/
public function makeMpSig($url_path, $params, $session_key)
{
ksort($params);
$query_string = array();
foreach ($params as $key => $val )
{
array_push($query_string, $key . '=' . $val);
}
$query_string = join('&', $query_string);
$query_string .= "&org_loc=" . $url_path . "&method=POST&session_key=" . $session_key;
$my_sign = hash_hmac("sha256", $query_string, $session_key);
return $my_sign;
}
php写的签名方法,返回Array ( [errcode] => 90009 [errmsg] => mp_sig error hint: [aT13rA02423672] )
实际上用这个方法把官方文档上的参数放入去生成出来的结果跟官方上给出的结果是一样的,为什么真正去调用接口时会报错?难道文档说的方法也不对?
3 回复
刚才有个同学给我参考了他的代码,问题找到了,原来参数access_token在签完名之后要清掉(
unset($data['access_token']);
),不要存在Post的内容里,而是只放在url上?access_token=xxx这样