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

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

浏览量:3316 时间: 来源:舞步天行者

              抖音小程序支付宝异步回调中验签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

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

 

版权声明

即速应用倡导尊重与保护知识产权。如发现本站文章存在版权问题,烦请提供版权疑问、身份证明、版权证明、联系方式等发邮件至197452366@qq.com ,我们将及时处理。本站文章仅作分享交流用途,作者观点不等同于即速应用观点。用户与作者的任何交易与本站无关,请知悉。

产品经理

手机 : 13312967497

擅长 : 小程序流量变现

扫码领取礼包

最新资讯

热门模板

  • 头条
  • 搜狐
  • 微博
  • 百家
  • 一点资讯
  • 知乎