payment 項目2.0版本 php
通過這一段時間,終於把支付寶支付相關接口完成了。文檔將陸續更新。這裏先把回調的文檔補充完成。這樣結合以前 提供的 支付寶即時到賬接口 才能造成一個閉環。完成一次完整的支付流程。git
支付服務商(支付寶、微信、PayPal等)處理完支付數據後。會將處理的結果數據經過服務器主動通知的方式通知給商戶網站。這些處理結果數據就是服務器異步通知參數。github
簡單來講,就是支付成功後,支付服務商告訴你,錢已經到帳了,你應該把別個買的東西給別個了。數組
因爲本次發佈的接口主要都是與支付寶相關,所以本次回調的部分代碼也主要先上支付寶的。微信等後期開發完成將更新相關文檔。服務器
針對不一樣的回調,我提供了統一的調用方式,讓客戶端專一本身的業務。不在處理支付相關的簽名驗證、來源驗證的問題。下面代碼是統一的回調處理代碼微信
// 支付寶配置文件 $aliconfig = require_once __DIR__ . '/aliconfig.php'; // 獲取異步通知上下文 $notify = new NotifyContext(); // 客戶端的業務邏輯類。處理如:訂單更新 $callback = new TestNotify(); try { // 支付寶回調 $notify->initNotify(Config::ALI, $aliconfig); $notify->notify($callback); } catch (PayException $e) { echo $e->errorMessage();exit; }
客戶端類 TestNotify
的注意事項 ,必定要繼承 PayNotifyInterface
這個類異步
use Payment\Notify\PayNotifyInterface; class TestNotify implements PayNotifyInterface { /** * 客戶端的業務邏輯, * @param array $data * @return bool 返回值必定是bool值 * @author helei */ public function notifyProcess(array $data) { // 通常支付的處理業務 1. 檢查訂單是否存在 2. 檢查金額是否正確 3. 檢查訂單是否已經處理過(防止重複通知) 4. 更新訂單 return true; } }
在 TestNotify::notifyProcess()
方法中,我註釋了常規的訂單處理流程。這個地方客戶端可根據本身的狀況進行適當調整。只是返回結果必定須要 布爾值網站
如今的重點是 TestNotify::notifyProcess()
方法中的參數 $data 中具體包含的值。根據不一樣的回調業務,返回的值也不同。具體請往下看。ui
支付寶的回調,與支付相關的對應三種類型。spa
trade_status_sync 支付行爲相關的異步通知
batch_refund_notify 有密批量退款的異步通知
batch_trans_notify 有密批量付款到支付寶帳號的通知
該回調發生在:移動支付、即時到賬、手機網站支付接口調用後,若是支付成功,支付寶會發起回調接口。
返回的對應數據以下表
參數 | 參數名 | 參數說明 | 必須 |
---|---|---|---|
subject | 商品名稱 | 訂單的關鍵字 | 是 |
body | 商品描述 | 提交訂單時的body值 | 是 |
amount | 交易金額 | 本次訂單總金額 | 是 |
channel | 支付渠道 | 本處取值: ali | 是 |
order_no | 商戶網站惟一訂單號 | 商戶生成的訂單號,必須確保在系統中惟一 | 是 |
buyer_id | 買家支付寶帳戶號 | 能夠是Email或手機號碼。 | 是 |
trade_state | 交易狀態 | 支付成功與否,可取值:success not_pay | 是 |
transaction_id | 支付寶交易號 | 支付寶系統中的交易流水號,可用於查詢訂單狀態 | 是 |
time_end | 交易付款時間 | 格式爲2016-07-28 16:01:01 | 是 |
notify_time | 通知時間 | 格式爲2016-07-28 16:01:01 | 是 |
notify_type | 通知類型 | 此處爲:trade 表示交易 | 是 |
extra_param | 商戶自定義參數 | 僅即時到賬支持 | 否 |
傳入到 TestNotify::notifyProcess()
中的數組,包括以上key。可根據以上內容進行業務處理。
本類回調發生在操做退款後,支付寶會通知服務器是否退款成功。退款的界面,以下圖:
輸入支付密碼後,就可完成退款。退款後支付寶會向商戶服務器進行異步通知。他返回的數據以下:
參數 | 參數名 | 參數說明 | 必須 |
---|---|---|---|
channel | 渠道 | 本處取值: ali | 是 |
refund_no | 商戶網站惟一退單號 | 商戶生成的退單號,必須確保在系統中惟一 | 是 |
success_num | 退款成功總數 | 0<= success_num<= 總退款筆數 | 是 |
notify_time | 通知時間 | 格式爲2016-07-28 16:01:01 | 是 |
notify_type | 通知類型 | 此處爲:trade 表示交易 | 是 |
該回調發生在批量付款後。返回的數據以下:
參數 | 參數名 | 參數說明 | 必須 |
---|---|---|---|
channel | 渠道 | 本處取值: ali | 是 |
trans_no | 商戶網站惟一轉帳單號 | 商戶生成的轉帳單號,必須確保在系統中惟一 | 是 |
pay_name | 付款帳號姓名 | 若是是我的爲暱稱,公司則爲公司名稱 | 是 |
pay_account | 付款帳號 | 郵箱或者手機號碼 | 是 |
notify_time | 通知時間 | 格式爲2016-07-28 16:01:01 | 是 |
notify_type | 通知類型 | 此處爲:trade 表示交易 | 是 |
success | 轉帳成功的詳細信息 | 返回的是一個數組 | 是 |
fail | 轉帳失敗的詳細信息 | 返回的是一個數組 | 是 |
備註:
success返回的數組中,單條記錄格式以下:
流水號^收款方帳號^收款帳號姓名^付款金額^成功標識(S)^成功緣由(null)^支付寶內部流水號^完成時間。
fail返回數據中的單條記錄格式以下:
流水號^收款方帳號^收款帳號姓名^付款金額^失敗標識(F)^失敗緣由^支付寶內部流水號^完成時間。
OK。到此支付寶相關的回調通知數據,已經所有處理完成。這裏須要你們注意一個問題,上面的數據並非完整的支付寶返回數據。大部分通過了個人簡化,若是有須要的參數,沒有返回可執行修改源碼或者聯繫我。