700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 抖音小程序支付宝异步回调中验签php代码

抖音小程序支付宝异步回调中验签php代码

时间:2023-07-02 13:52:45

相关推荐

抖音小程序支付宝异步回调中验签php代码

抖音小程序支付宝异步回调中验签php代码

异步回调中验签中我遇到坑:openssl_verify()总是返回0;问了支付宝技术客服才解决。已测试。可用

代码php示例:

function RSAVerify($return_data, $public_key,$ksort=true){if (empty($return_data) || !(is_array($return_data))){return false;}$public_key = chackKey($public_key);$pkeyid = openssl_pkey_get_public($public_key);if (empty($pkeyid)){return false;}$rsasign = $return_data['sign'];$sign_type = trim($return_data['sign_type'], '"');unset($return_data['sign'], $return_data['sign_type']);if ($ksort){ksort($return_data);}if (is_array($return_data) && !(empty($return_data))){$strdata = '';foreach ($return_data as $k => $v ){if (empty($v)){continue;}if (is_array($v)){$strdata .= $k . '=' . json_encode($v) . '&';}else{$strdata .= $k . '=' . $v . '&';}}}$strdata = trim($strdata, '&');$rsasign = str_replace(' ', '+', $rsasign);$rsasign = base64_decode($rsasign);if ($sign_type == 'RSA') {$rsaverify = openssl_verify($strdata, $rsasign, $pkeyid);} else if ($sign_type == 'RSA2') {$rsaverify = openssl_verify($strdata, $rsasign, $pkeyid, OPENSSL_ALGO_SHA256);}openssl_free_key($pkeyid);return $rsaverify;}function chackKey($key, $public = true){if (empty($key)) {return $key;}if ($public) {if (strexists($key, '-----BEGIN PUBLIC KEY-----')) {$key = str_replace(array('-----BEGIN PUBLIC KEY-----', '-----END PUBLIC KEY-----'), '', $key);}$head_end = '-----BEGIN PUBLIC KEY-----{key}-----END PUBLIC KEY-----';}else {if (strexists($key, '-----BEGIN RSA PRIVATE KEY-----')) {$key = str_replace(array('-----BEGIN RSA PRIVATE KEY-----', '-----END RSA PRIVATE KEY-----'), '', $key);}$head_end = '-----BEGIN RSA PRIVATE KEY-----{key}-----END RSA PRIVATE KEY-----';}$key = str_replace(array('', '', ''), '', trim($key));$key = wordwrap($key, 64, '', true);return str_replace('{key}', $key, $head_end);}function characet($data, $targetCharset) {if (!empty($data)) {$fileType = "UTF-8";if (strcasecmp($fileType, $targetCharset) != 0) {$data = mb_convert_encoding($data, $targetCharset, $fileType);}}return $data;}/*** 校验$value是否非空* if not set ,return true;* if is null , return true;**/function checkEmpty($value) {if (!isset($value))return true;if ($value === null)return true;if (trim($value) === "")return true;return false;}

问题有几处1、:$public_key记住他是支付宝公钥不是应用公钥切记好好检查一下这里是最重要出错地方

2、:openssl_pkey_get_public这里返回false那么是你的支付宝公钥位数不够,如果返回资源id,也并不说明你的公钥是正确的。这就是坑。

3、如果是RSA2类型:记得加上OPENSSL_ALGO_SHA256

4、openssl_verify总是返回0,又不告诉你错在哪里,很坑,如果你的正确了,会返回1

还有很多问题需要你自己查一下你的代码。有好的建议可以留言,大家交流一下

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。