E企盈营销工具技术服务商 热线:4006-838-530

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

E企盈直播平台营销卖货系统

抖音小程序支付宝异步回调中验签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_SHA2564、openssl_verify总是返回0,又不告诉你错在哪里,很坑,如果你的正确了,会返回1还有很多问题需要你自己查一下你的代码。有好的建议可以留言,大家交流一下

赞(0) 打赏
未经允许不得转载:E企盈小程序开发-热线:4006-838-530 » 抖音小程序支付宝异步回调中验签php代码
分享到: 更多 (0)
E企盈小程序直播营销卖货系统
E企盈直播平台营销卖货系统

评论 抢沙发

E企盈小程序开发

联系我们联系我们

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏