91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

php中app支付寶回調的示例分析

發布時間:2021-08-06 10:03:21 來源:億速云 閱讀:127 作者:小新 欄目:開發技術

小編給大家分享一下php中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—注意公鑰的正確性,還有用的是支付寶公鑰不是你當初生成的公鑰
2—區別這里的方法和支付寶接口本身方法的公鑰獲取方式
3—注意接口方法本身的注釋,很重要

驗證回調參數

支付寶的回調參數是以post的方式回傳的,但是我們在測試的時候可以直接把回調url直接寫在地址欄里面,然后用get方式接受,這樣就不用拼參數了,結果是一樣的(回調url可以記錄在log文件里面),還有就是驗簽的時候需要所有的回傳參數原封不動的去驗簽,而這里自己需要什么參數就接收什么參數就可以,這里就不多說了,就是正常的接受參數的問題.下面給出我在驗證參數時,檢驗訂單金額和商家編號的代碼,僅做參考(我用的tp5):

public function check($receipt_amount,$buyer_pay_amount,$order_price,$app_id,$seller_email){
  if($receipt_amount !== $order_price || $buyer_pay_amount !== $order_price){
//    echo 1;
   return $this->log('訂單支付金額有誤!');
  }
  //支付寶支付的所有參數
  $alipay_config = Config::get('alipay_config');
  if($app_id !== $alipay_config['appid']){
//   echo 2;
    return $this->log('商家編號有誤!');
  }

  //驗證收款商家是否正確
  if($seller_email !== $alipay_config['seller_id']){
//   echo 3;
   return $this->log('收款商家有誤!');
  }
  return 'success';
 }

檢驗訂單

這里主要就是檢驗庫存,這里最好用事物處理,(雖然你的訂單量可能不一定回到這個地步),下面給出我的代碼,僅做參考(tp5):

public function index($order_sn='')
 {
  if(isset($_POST['order_sn']) && empty($order_sn)){
   $order_sn = $_POST['order_sn'];
  }

  $table = self::order_info($order_sn);
  if($table == 'failure'){return 'false';}
  $oid = $table['order_id'];
  //通過訂單id $oid 查詢出訂單中物品的id
  $goodsTable = Db::name('goods');
  $allgoods = Db::name("test1")->where('o_id', $oid)->field('g_id,g_num')->select();
  foreach ($allgoods as $k => $v) {
   //事務處理
   $goodsTable->startTrans();//事物開始
   try {
    //判斷庫存數量
    $goodsTable->query('update test2 set g_num = g_num-' . $v['g_num'] . ' where g_num >= ' . $v['g_num'] . ' and gid =' . $v['g_id']);

   } catch (\Exception $e) {
    $goodsTable->rollBack();//事物回滾
   }

   $goodsTable->commit();// 事物提交
  }

  //修改訂單
  $res = Db::name('test3')->where('order_sn',$order_sn)->update(['order_state' => '1','pay_time'=>time()]);
  if($res != 0){
   return 'success';
  }
 }

接下來就是把結果返回給支付寶就可以,失敗:return ‘failure';成功:return ‘success';到這里就結束了.

還有就是在出錯后和在找bug的時候都平心靜氣一些,理智的找問題才會更快的找到問題 ( 如果實在不行就去找支付寶的人工支持,他會為你調試你的代碼,會給出一個差不多的結論,然后你再去改就會容易很多 :) ).

以上是“php中app支付寶回調的示例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

php
AI

旺苍县| 日土县| 彰化市| 阿克| 凤凰县| 万荣县| 邻水| 北京市| 炎陵县| 平顺县| 青田县| 始兴县| 平江县| 西和县| 中西区| 辛集市| 清苑县| 遵化市| 安平县| 隆林| 泸水县| 和硕县| 成都市| 贵阳市| 政和县| 临猗县| 宽甸| 胶南市| 集贤县| 澄江县| 开原市| 青铜峡市| 昭平县| 黄骅市| 宾阳县| 邮箱| 双牌县| 安国市| 调兵山市| 保康县| 福贡县|