Nov
14
2017
【原创】PHP支付宝异步回调数据签名验证算法
小V今天在做支付宝回调验签时碰到了不少问题:
1、openssl_get_publickey函数返回false(这里必须传支付宝的应用公钥,且格式正确,格式见后文代码)。
2、openssl_verify函数返回false,这里需要清除你的秘钥类型是什么(RSA/RSA2)。
贴函数代码:
/** * 支付宝当面付异步回调数据验签 * @param array $params 待验证数据 * @param string $alipay_public_key 支付宝应用公钥 * @param string $sign_type 秘钥类型 * @return boolean 验签状态 */ function verify_sign($params,$alipay_public_key,$sign_type='RSA2') { $ori_sign=$params['sign']; unset($params['sign']); unset($params['sign_type']); ksort($params); $data=''; foreach($params as $k => $v){ $data.=$k.'='.$v.'&'; } $data=substr($data,0,-1); $public_content="-----BEGIN PUBLIC KEY-----\n" . wordwrap($alipay_public_key, 64, "\n", true) . "\n-----END PUBLIC KEY-----"; $public_key=openssl_get_publickey($public_content); if($public_key){ if($sign_type=='RSA2') { $result = (bool)openssl_verify($data, base64_decode($ori_sign), $public_key, OPENSSL_ALGO_SHA256); } else { $result = (bool)openssl_verify($data, base64_decode($ori_sign), $public_key); } openssl_free_key($public_key); return $result; }else{ return false; } }
=================================================
转载请注明出处:
作者:Veris
最族 [ http://www.mostclan.com ]
发表评论: