今天鐵人賽的倒數第一天了 ^^,要和大家分享的是,如何接收永豐銀行豐收款金流平台收到顧客的銀行轉帳匯款時,主動通知我們的網站告知顧客已付款。
圖 29-1: 文件第 6 頁
今天的文章內容就是上圖流程圖的第 6 步驟。
在 Day 1 到 Day 10 介紹導覽 API 文件及解說內容時,一直沒介紹到第 47 頁說明「即時訊息通知」這一項,因為它是屬於豐收款金流平台主動通知我們的商店網站,要搭配情境比較好理解它的使用時機。
圖 29-2: 文件第 47 頁
使用時機就是,當顧客已經匯款到永豐銀行的虛擬帳號,金流平台要進行即時訊息通知我們已經收到款項。
在 Day 27 建立虛擬帳號付款訂單時的圖 27-2 以下程式碼:
圖 29-3: class-wc-gateway-sinopac-va.php
第 7 行 的 backend_url
就是在訂立虛擬帳號訂單時,傳送給永豐銀行金流平台,用來通知我們顧客已付款的網址。
圖 29-4: SinoPac_Payment controller
第 15 行 定義接收虛擬付款方式的結果的頁面網址。
第 27 行 實作接收訊息的邏輯,在這個階段,會在 do_backend_notify 這個方法接收 PayToken,並使用它來查詢付款結果。
圖 29-5: SinoPac_Payment controller
還在記得 Day 24 提到信用卡付款方式在刷完卡後,收款平台會 POST 兩個值回到我們的商店網站,ShopNo
和 PayToken
讓我們用 PHP 的全域變數 $_POST
去接。
這邊的訊息即時通知丟過來的值也是一樣的 ShopNo
和 PayToken
。因此相同處理邏輯的程式碼不用多一份,複用就好,所以在 第 15 行 判斷是訊息即時通知,就呼叫 do_message_receive 這個方法來處理。
圖 29-6: SinoPac_Payment controller
第 8 行 在方法的參數上加了 $is_backend 當作信用卡和虛擬帳號付款接收資料處理入口的分水嶺。
第 18 行 取得 ShopNo
,接下來會比對和我們的資料是否符合。
第 19 行 取得 PayToken
,準備用它來查詢信用卡訂單狀態。
第 21-25 付款閘道類別的實例根據入口的不同,實例化的對象也不同。
第 40 行 查詢到狀態為成功,這個付款就完美地完成了。
第 41-46 行 查詢到的交易資訊詳細資料。
第 80-84 如果是永豐銀行金流平台的即時訊息通知,訂單備註再多一些說明是從訊息通知觸發的,這樣比較詳細。
第 92 行 把付款成功的交易訊息加註到 訂單備註,讓負責處理訂單的人員知道此訂單已收款,可以即刻安排出貨。
第 93 行 訂單狀態變更為「處理中」,讓顧客知道其訂單正在被處理,讓負責處理訂單的同事可以在後台篩選此狀態取得出貨清單進行出貨。
第 94 行 交易的資料記錄到 meta 中,以便以後可以查詢。
第 100 行 失敗的話,記錄本次回傳的資料以供查看問題。
第 107 文件第 47 頁有說明,這樣的訊息通知會每隔 10 分鐘發送一次,重覆 5 次,這裡有處理完成就回覆 JSON 字串告知已經收到資料,就不會連續發送了。
這系列鐵人賽的文章都完成了,鐵人賽的最後一天會和大家分享以下:
我們明天見。