支付寶的異步通知

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 有密批量付款到支付寶帳號的通知

trade_status_sync 異步通知返回數據

該回調發生在:移動支付、即時到賬、手機網站支付接口調用後,若是支付成功,支付寶會發起回調接口。

返回的對應數據以下表

參數 參數名 參數說明 必須
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。可根據以上內容進行業務處理。

batch_refund_notify 異步通知返回數據

本類回調發生在操做退款後,支付寶會通知服務器是否退款成功。退款的界面,以下圖:

image

輸入支付密碼後,就可完成退款。退款後支付寶會向商戶服務器進行異步通知。他返回的數據以下:

參數 參數名 參數說明 必須
channel 渠道 本處取值: ali
refund_no 商戶網站惟一退單號 商戶生成的退單號,必須確保在系統中惟一
success_num 退款成功總數 0<= success_num<= 總退款筆數
notify_time 通知時間 格式爲2016-07-28 16:01:01
notify_type 通知類型 此處爲:trade 表示交易

batch_trans_notify 異步通知返回數據

該回調發生在批量付款後。返回的數據以下:

參數 參數名 參數說明 必須
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。到此支付寶相關的回調通知數據,已經所有處理完成。這裏須要你們注意一個問題,上面的數據並非完整的支付寶返回數據。大部分通過了個人簡化,若是有須要的參數,沒有返回可執行修改源碼或者聯繫我。

相關文章
相關標籤/搜索