http://www.iscaal.com

                                                                  【五分28】php支付宝回调怎么写-PHP问题

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

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

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

                                                                  这是支付宝已经封装好的类:(推荐学习:PHP视频教程)

                                                                  /** rsaCheckV1 & rsaCheckV2
                                                                  * 验证签名
                                                                  * ,在使用本方法前,必须初始化AopCl[ient且传入公钥参数。
                                                                  * 公钥是否是读取字符串还是读取文件,是根据初始化传入的值判断的。
                                                                  **/
                                                                  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 = (b(ool)openssl_verify($data, base64_decode($sign), $res);
                                                                  }

                                                                  if(!$this->checkEmpty($this->alipayPublicKey)) {
                                                                  //释放资源
                                                                  openssl_free_key($res);
                                                                  }

                                                                  return $result;
                                                                  }L
                                                                  SQLite
                                                                  SQLite3
                                                                  SQLSRV
                                                                  Sybase
                                                                  tokyo_tyrant

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

                                                                  在这里要注意三点:

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

                                                                  郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

                                                                  上一篇:php常用的遍历数组的方法有哪些-PHP问题
                                                                  下一篇:没有了