訂單建立後,歐付寶會將建立訂單結果,以背景 POST 的方式,回傳至商店傳來的 PaymentInfoURL。
小提醒 :若是初次串接歐付寶,可先參考「快速串接教學」。
- 歐付寶回傳建立訂單結果
- 範例程式 (php、Java、C#)
流程簡圖

歐付寶回傳建立訂單結果[收合]
回傳網址:
商店傳來的 PaymentInfoURL
訂單建立後,歐付寶會將以下參數,以背景 POST 的方式,回傳至商店傳來的 PaymentInfoURL:
回傳參數
| 參數 | 說明 |
|
MerchantID string (10) |
廠商編號
註冊歐付寶會員時,歐付寶會提供一組商店代號。 |
|
MerchantTradeNo string (20) |
商店交易編號 訂單產生時傳送給O'Pay的廠商交易編號。英數字大小寫混合。 |
|
RtnCode int |
交易狀態 10100073:取號成功,其餘為失敗。 |
|
RtnMsg string (200) |
交易訊息 |
|
TradeNo string (20) |
O'Pay的交易編號 請保存O'Pay的交易編號與 MerchantTradeNo的關連。 |
|
TradeAmt int |
交易金額 |
|
PaymentType string (20) |
會員選擇的付款方式 |
|
TradeDate string (20) |
訂單成立時間 格式為yyyy/MM/dd HH:mm:ss |
|
ExpireDate string (20) |
繳費期限 格式為 yyyy/MM/dd HH:mm:ss |
|
Barcode1 string (20) |
條碼第一段號碼 格式為 9 碼數字 |
|
Barcode2 string (20) |
條碼第二段號碼 格式為 16 碼數字 |
|
Barcode3 string (20) |
條碼第三段號碼 格式為 15 碼數字 |
|
CheckMacValue string (max) |
檢查碼 ※如果您使用 php、Java、C#、Ruby on Rails 或 Node.js 的金流整合 SDK 工具包,可略過此參數。 ※請參考 CheckMacValue 產生步驟。 |
範例程式[收合]
使用 php SDK 接收歐付寶回傳參數的範例程式:
小提醒 :若是初次使用歐付寶 SDK,可參考「下載及使用 SDK 元件」。
/*
* 接收訂單資料產生完成的範例程式碼。
*/
try
{
$oPayment = new AllInOne();
/* 服務參數 */
$oPayment->HashKey = "[O'Pay提供給您的Hash Key]";
$oPayment->HashIV = "[O'Pay提供給您的Hash IV]";
/* 取得回傳參數 */
$arFeedback = $oPayment->CheckOutFeedback();
/* 檢核與變更訂單狀態 */
if (sizeof($arFeedback) > 0) {
foreach ($arFeedback as $key => $value) {
switch ($key)
{
/* 使用 CVS/BARCODE 交易時回傳的參數 */
case "MerchantID": $szMerchantID = $value; break;
case "MerchantTradeNo": $szMerchantTradeNo = $value; break;
case "RtnCode": $szRtnCode = $value; break;
case "RtnMsg": $szRtnMsg = $value; break;
case "TradeNo": $szTradeNo = $value; break;
case "TradeAmt": $szTradeAmt = $value; break;
case "PaymentType": $szPaymentType = $value; break;
case "TradeDate": $szTradeDate = $value; break;
case "PaymentNo": $szPaymentNo = $value; break;
case "Barcode1": $szBarcode1 = $value; break;
case "Barcode2": $szBarcode2 = $value; break;
case "Barcode3": $szBarcode3 = $value; break;
default: break;
}
}
// 其他資料處理。
………
print '1|OK';
} else {
print '0|Fail';
}
}
catch (Exception $e)
{
// 例外錯誤處理。
print '0|' . $e->getMessage();
}
使用 Java SDK 接收歐付寶回傳參數的範例程式:
小提醒 :若是初次使用歐付寶 SDK,可參考「下載及使用 SDK 元件」。
/*
* 接收訂單資料產生完成的範例程式碼。
*/
List<String> enErrors = new ArrayList<String>();
try {
AllInOne oPayment = new AllInOne();
oPayment.HashKey = "[O'Pay提供給您的Hash Key]";
oPayment.HashIV = "[O'Pay提供給您的Hash IV]";
Hashtable< String, String> htFeedback = new Hashtable< String, String>();
enErrors.addAll(oPayment.CheckOutFeedback(htFeedback, request));
Set< String> key = htFeedback.keySet();
String name[] = key.toArray(new String[key.size()]);
/* 支付後的回傳的基本參數 */
String szMerchantID = "";
String szMerchantTradeNo = "";
String szPaymentDate = "";
String szPaymentType = "";
String szPaymentTypeChargeFee = "";
String szRtnCode = "";
String szRtnMsg = "";
String szSimulatePaid = "";
String szTradeAmt = "";
String szTradeDate = "";
String szTradeNo = "";
/* 使用 CVS 或 BARCODE 交易時,回傳的額外參數 */
String szPaymentNo = "";
String szExpireDate = "";
String szBarcode1 = "";
String szBarcode2 = "";
String szBarcode3 = "";
// 取得資料
for(int i = 0 ; i < name.length ; i++) {
/* 支付後的回傳的基本參數 */
if(name[i].equals("MerchantID"))
szMerchantID = htFeedback.get(name[i]);
else if(name[i].equals("MerchantTradeNo"))
szMerchantTradeNo = htFeedback.get(name[i]);
else if(name[i].equals("PaymentDate"))
szPaymentDate = htFeedback.get(name[i]);
else if(name[i].equals("PaymentType"))
szPaymentType = htFeedback.get(name[i]);
else if(name[i].equals("PaymentTypeChargeFee"))
szPaymentTypeChargeFee = htFeedback.get(name[i]);
else if(name[i].equals("RtnCode"))
szRtnCode = htFeedback.get(name[i]);
else if(name[i].equals("RtnMsg"))
szRtnMsg = htFeedback.get(name[i]);
else if(name[i].equals("SimulatePaid"))
szSimulatePaid = htFeedback.get(name[i]);
else if(name[i].equals("TradeAmt"))
szTradeAmt = htFeedback.get(name[i]);
else if(name[i].equals("TradeDate"))
szTradeDate = htFeedback.get(name[i]);
else if(name[i].equals("TradeNo"))
szTradeNo = htFeedback.get(name[i]);
else if(name[i].equals("PaymentNo"))
szPaymentNo = htFeedback.get(name[i]);
else if(name[i].equals("ExpireDate"))
szExpireDate = htFeedback.get(name[i]);
else if(name[i].equals("Barcode1"))
szBarcode1 = htFeedback.get(name[i]);
else if(name[i].equals("Barcode2"))
szBarcode2 = htFeedback.get(name[i]);
else if(name[i].equals("Barcode3"))
szBarcode3 = htFeedback.get(name[i]);
}
System.out.println("MerchantID = " + szMerchantID);
System.out.println("MerchantTradeNo = " + szMerchantTradeNo);
System.out.println("PaymentDate = " + szPaymentDate);
System.out.println("PaymentType = " + szPaymentType);
System.out.println("PaymentTypeChargeFee = " + szPaymentTypeChargeFee);
System.out.println("RtnCode = " + szRtnCode);
System.out.println("RtnMsg = " + szRtnMsg);
System.out.println("SimulatePaid = " + szSimulatePaid);
System.out.println("TradeAmt = " + szTradeAmt);
System.out.println("TradeDate = " + szTradeDate);
System.out.println("TradeNo = " + szTradeNo);
/* 使用 CVS 或 BARCODE 交易時,回傳的額外參數 */
System.out.println("PaymentNo = " + szPaymentNo);
System.out.println("ExpireDate = " + szExpireDate);
System.out.println("Barcode1 = " + szBarcode1);
System.out.println("Barcode2 = " + szBarcode2);
System.out.println("Barcode3 = " + szBarcode3);
out.println("");
}
catch (Exception e) {
enErrors.add(e.getMessage());
}
finally {
// 回覆成功訊息。
if (enErrors.size() == 0)
out.println("1|OK");
// 回覆錯誤訊息。
else
out.println("0|" + enErrors);
}
使用 C# SDK 接收歐付寶回傳參數的範例程式:
小提醒 :若是初次使用歐付寶 SDK,可參考「下載及使用 SDK 元件」。
/*
* 接收訂單資料產生完成的範例程式碼。
*/
List<string> enErrors = new List<string>();
Hashtable htFeedback = null;
try
{
using (AllInOne oPayment = new AllInOne())
{
oPayment.HashKey = "[O'Pay提供給您的Hash Key]";
oPayment.HashIV = "[O'Pay提供給您的Hash IV]";
/* 取回付款結果 */
enErrors.AddRange(oPayment.CheckOutFeedback(ref htFeedback));
}
// 取回所有資料
if (enErrors.Count() == 0)
{
/* 支付後的回傳的基本參數 */
string szMerchantID = String.Empty;
string szMerchantTradeNo = String.Empty;
string szPaymentType = String.Empty;
string szRtnCode = String.Empty;
string szRtnMsg = String.Empty;
string szTradeAmt = String.Empty;
string szTradeDate = String.Empty;
string szTradeNo = String.Empty;
/* 使用 CVS 或 BARCODE 交易時,回傳的額外參數 */
string szPaymentNo = String.Empty;
string szExpireDate = String.Empty;
string szBarcode1 = String.Empty;
string szBarcode2 = String.Empty;
string szBarcode3 = String.Empty;
// 取得資料於畫面
foreach (string szKey in htFeedback.Keys)
{
switch (szKey)
{
/* 使用 CVS/BARCODE 交易時回傳的參數 */
case "MerchantID": szMerchantID = htFeedback[szKey].ToString(); break;
case "MerchantTradeNo": szMerchantTradeNo = htFeedback[szKey].ToString(); break;
case "RtnCode": szRtnCode = htFeedback[szKey].ToString(); break;
case "RtnMsg": szRtnMsg = htFeedback[szKey].ToString(); break;
case "TradeNo": szTradeNo = htFeedback[szKey].ToString(); break;
case "TradeAmt": szTradeAmt = htFeedback[szKey].ToString(); break;
case "PaymentType": szPaymentType = htFeedback[szKey].ToString(); break;
case "TradeDate": szTradeDate = htFeedback[szKey].ToString(); break;
case "PaymentNo": szPaymentNo = htFeedback[szKey].ToString(); break;
case "ExpireDate": szExpireDate = htFeedback[szKey].ToString(); break;
case "Barcode1": szBarcode1 = htFeedback[szKey].ToString(); break;
case "Barcode2": szBarcode2 = htFeedback[szKey].ToString(); break;
case "Barcode3": szBarcode3 = htFeedback[szKey].ToString(); break;
default: break;
}
}
// 其他資料處理。
………
} else {
// 其他資料處理。
………
}
}
catch (Exception ex)
{
// 例外錯誤處理。
enErrors.Add(ex.Message);
}
finally
{
this.Response.Clear();
// 回覆成功訊息。
if (enErrors.Count() == 0)
this.Response.Write("1|OK");
// 回覆錯誤訊息。
else
this.Response.Write(String.Format("0|{0}", String.Join("\\r\\n", enErrors)));
this.Response.Flush();
this.Response.End();
}
下一頁: 歐付寶回傳付款結果
