訂單建立後,歐付寶會將建立訂單結果,以背景 POST 的方式,回傳至商店傳來的 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
PaymentNo
string (14)
繳費代碼
ExpireDate
string (20)
繳費期限
格式為 yyyy/MM/dd HH:mm:ss
Barcode1
string (20)
條碼第一段號碼
使用超商代碼,則此欄位回傳空白
Barcode2
string (20)
條碼第二段號碼
使用超商代碼,則此欄位回傳空白
Barcode3
string (20)
條碼第三段號碼
使用超商代碼,則此欄位回傳空白
CheckMacValue
string (max)
檢查碼
※如果您使用 phpJavaC#Ruby on RailsNode.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();
}
                                    

使用 Ruby on Rails SDK 範例程式:
https://github.com/allPay/allPayAIO_Ruby/



使用 Node.js SDK 範例程式:
https://github.com/allPay/allPayAIO_Node.js/



 下一頁: 歐付寶回傳付款結果


GO TOP