PHP新手30天實戰金流
, Laravel6
了解 ECPay API 的重要參數; 報告觀察到的現象,但是未能說明; 測試收到付款結果
ReturnURL
:
==必要參數==。當消費者付款完成後,綠界會將付款結果參數以 Server POST 回傳到該網址。
注意事項:
1. 請勿設定與 Client 端接收付款結果網址 OrderResultURL 相同位置,避免程式判斷錯誤。
2. 請在收到 Server 端付款結果通知後,請正確回應 1|OK 給綠界。
PaymentInfoURL
:
==非==必要參數。訂單建立完成後(非付款完成),綠界會 Server 端背景回傳消費者付款方式相關資訊(例:銀行代碼、繳費虛擬帳號繳費期限…等)
CheckMacValue
==必要參數==。檢查碼機制。在與 ECPay 進行資料傳遞時,除了檢查碼[CheckMacValue]及其餘所有傳遞給綠界的參數皆需要加入檢查碼計算。
CheckMacValue Error 常見原因:
1.帶入的 ALL IN ONE HashKey及HashIV 對應的值貼相反
2.帶入的 ALL IN ONE HashKey及HashIV 字母Key錯或多帶入空白鍵(建議使用複製貼上)
3.將 ALL IN ONE HashKey及HashIV 當作參數一起送出亦會產生此錯誤
4.因為綠界僅支援UTF-8編碼,若送出的參數中含有亂碼則會無法計算檢查碼(建議可以使用 Fiddler Web Debugger做檢查喔!)
5.參數帶入時是否有依照A-Z的字母排序(遇第一個英名字母相同時,以第二個英名字母來比較,以此類推)
6.請確認您的語言的 UrlEncode function 轉換後的結果符合附錄 URLEncode 轉換表中的「.NET 編碼 (ECPAY)」欄位值,若有不符合的字元,請用字元替換功能處理,以免無法符合檢查規則。
DoAutoSubmitForm: https://payment-stage.ecpay.com.tw/Common/DoAutoSubmitForm?timestamp=1569398732
DoAutoSubmitForm: https://pay-stage.ecpay.com.tw/Common/DoAutoSubmitForm?waitForSecond=0×tamp=1569398733
DoAutoSubmitForm: https://cc-stage.ecpay.com.tw/Common/DoAutoSubmitForm?waitForSecond=0×tamp=1569398734
跑完之後,會轉到成功畫面
我們看到範例最後是呼叫 SDK 的 CheckOut
函式,於是我們到 SDK(ECPay.Payment.Integration.php
)裡看,範例傳什麼東西給 ECpay server。
static function CheckOut($target = "_self",$arParameters = array(),$arExtend = array(),$HashKey='',$HashIV='',$ServiceURL=''){
$arParameters = self::process($arParameters,$arExtend);
//產生檢查碼
$szCheckMacValue = ECPay_CheckMacValue::generate($arParameters,$HashKey,$HashIV,$arParameters['EncryptType']);
//生成表單,自動送出
$szHtml = parent::HtmlEncode($target, $arParameters, $ServiceURL, $szCheckMacValue, '') ;
echo $szHtml ;
exit;
}
為了方便印出來看我們先將 $arParameters 從 array 轉成 string,有以下三種方法:
var_dump($arr_x)
array(25) {
["MerchantID"]=>
string(7) "2000132"
["EncryptType"]=>
string(1) "1"
.
.
.
}
print_r($arr_x)
Array
(
[MerchantID] => 2000132
[EncryptType] => 1
.
.
.
)
print json_encode($arr_x)
{"MerchantID":"2000132","EncryptType":"1", ...
}
想要用 json_encode 完的格式丟給 postman 送出訂單資訊,不過會出現:
訊息代碼 Message code:10200073<br>
訊息說明 Description:CheckMacValue Error.
還沒研究明確原因
{"MerchantID":"2000214","EncryptType":"1","ReturnURL":"http:\/\/www.ecpay.com.tw\/receive.php","ClientBackURL":"","OrderResultURL":"","MerchantTradeNo":"Test1569413219","MerchantTradeDate":"2019\/09\/25 12:06:59","PaymentType":"aio","TotalAmount":2000,"TradeDesc":"good to drink","ChoosePayment":"ALL","Remark":"","ChooseSubPayment":"","NeedExtraPaidInfo":"N","DeviceSource":"","IgnorePayment":"","InvoiceMark":"","StoreID":"","CustomField1":"","CustomField2":"","CustomField3":"","CustomField4":"","HoldTradeAMT":0,"ItemURL":"dedwed","ItemName":"\u6b50\u4ed8\u5bf6\u9ed1\u829d\u9ebb\u8c46\u6f3f 2000 \u5143 x 1"}
晚生學習分享所學經驗,若內容有誤或不清楚,煩請不吝指教!更是歡迎各位大神多多補充,感謝萬分!