首页 > 开发 > PHP > 正文

php app支付宝回调(异步通知)详解

2024-05-04 22:42:33
字体:
来源:转载
供稿:网友

之前写过支付宝app支付的支付的后台代码,现在来说一下异步通知:

个人感觉支付宝的异步通知,步骤比微信简单点,但里面的坑可是没少多少,就一个验签就把我整的快疯了….

异步通知:

1,先确定在支付的时候写的回调地址的正确性!!!!!!

2.找到支付宝封装的验签类,rsaCheckV1(这个也是在app2.0接口里面)

3.验证回调参数

*4.检验订单

先确定在支付的时候写的回调地址的正确性!!!!!!

一定要确定回调地址的写的是否指到是你写回调验证的那个放里面,别到时候在回头找错误的时候,抓耳挠腮..

找到支付宝封装的验签类,rsaCheckV1(这个也是在app2.0接口里面)

这是支付宝已经封装好的类:

/** rsaCheckV1 & rsaCheckV2  * 验证签名  * 在使用本方法前,必须初始化AopClient且传入公钥参数。  * 公钥是否是读取字符串还是读取文件,是根据初始化传入的值判断的。  **/ public function rsaCheckV1($params, $rsaPublicKeyFilePath,$signType='RSA') {  $sign = $params['sign'];  $params['sign_type'] = null;  $params['sign'] = null;  $this->alipayrsaPublicKey = $rsaPublicKeyFilePath;  return $this->verify($this->getSignContent($params), $sign, $rsaPublicKeyFilePath,$signType); } public function rsaCheckV2($params, $rsaPublicKeyFilePath, $signType='RSA') {  $sign = $params['sign'];  $params['sign'] = null;  return $this->verify($this->getSignContent($params), $sign, $rsaPublicKeyFilePath, $signType); } function verify($data, $sign, $rsaPublicKeyFilePath, $signType = 'RSA') {  if($this->checkEmpty($this->alipayPublicKey)){   $pubKey= $this->alipayrsaPublicKey;   $res = "-----BEGIN PUBLIC KEY-----/n" .    wordwrap($pubKey, 64, "/n", true) .    "/n-----END PUBLIC KEY-----";  }else {   //读取公钥文件   $pubKey = file_get_contents($rsaPublicKeyFilePath);   //转换为openssl格式密钥   $res = openssl_get_publickey($pubKey);  }  ($res) or die('支付宝RSA公钥错误。请检查公钥文件格式是否正确');   //调用openssl内置方法验签,返回bool值  if ("RSA2" == $signType) {   $result = (bool)openssl_verify($data, base64_decode($sign), $res, OPENSSL_ALGO_SHA256);  } else {   $result = (bool)openssl_verify($data, base64_decode($sign), $res);  }  if(!$this->checkEmpty($this->alipayPublicKey)) {   //释放资源   openssl_free_key($res);  }  return $result; }

还有就是别把这两个方法混淆了,前者需要传signtype,后者不需要(前面两个方法都会调用第三个方法),还有一点很重要,就是这个方法的本身是从文件里面提取公钥的的,但是本人是直接传的,就把这个方法稍加改动了一下,让它直接读取我传的公钥.这个验签方法返回的是(bool)true或者(bool)false,来判断验签是否成功.

在这里要注意三点:

1—注意公钥的正确性,还有用的是支付宝公钥不是你当初生成的公钥

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表