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

抖音小程序支付宝异步回调中验签php代码抖音小程序支付宝异步回调中验签php代码异步回调中验签中我遇到坑:openssl_verify()总是返回0;问了支付宝技术客服才解决。已测试。可用代码php示例:functionRSAVerify($return_data,$public_key,$ksort=true){if(empty($return_data)||!(is_…

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

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

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/39314.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注