protected void Page_Load(object sender, EventArgs e) { List <string> enErrors = new List <string>(); Hashtable htFeedback = null; try { using (AllInOne oPayment = new AllInOne()) { /* 服務參數 */ oPayment.ServiceMethod = HttpMethod.ServerPOST; //介接服務時,呼叫 API 的方法 oPayment.ServiceURL = "https://payment-stage.ecpay.com.tw/Cashier/QueryTradeInfo"; //要呼叫介接服務的網址 oPayment.HashKey = "5294y06JbISpM5x9"; //ECPay 提供的 HashKey oPayment.HashIV = "v77hoKGq4kWxNNIS"; //ECPay 提供的 HashIV oPayment.MerchantID = "2000132"; //ECPay 提供的廠商編號 /* 基本參數 */ oPayment.Query.MerchantTradeNo = "a74383"; //廠商的交易編號 //oPayment.Query.PlatformID = "";//特約合作平台商代號 /**********************************************************************************/ /* 查詢訂單 */ enErrors.AddRange(oPayment.QueryTradeInfo(ref htFeedback)); } // 取回所有資料 if (enErrors.Count() == 0) { /* 查詢後的回傳的基本參數 */ string szMerchantID = String.Empty; string szMerchantTradeNo = String.Empty; string szTradeNo = String.Empty; string szTradeAmt = String.Empty; string szPaymentDate = String.Empty; string szPaymentType = String.Empty; string szHandlingCharge = String.Empty; string szPaymentTypeChargeFee = String.Empty; string szTradeDate = String.Empty; string szTradeStatus = String.Empty; string szItemName = String.Empty; /* 使用 WebATM 交易時,回傳的額外參數 */ string szWebATMAccBank = String.Empty; string szWebATMAccNo = String.Empty; /* 使用 ATM 交易時,回傳的額外參數 */ string szATMAccBank = String.Empty; string szATMAccNo = String.Empty; /* 使用 CVS 或 BARCODE 交易時,回傳的額外參數 */ string szPaymentNo = String.Empty; string szPayFrom = String.Empty; /* 使用 Alipay 交易時,回傳的額外參數 */ string szAlipayID = String.Empty; string szAlipayTradeNo = String.Empty; /* 使用 Tenpay 交易時,回傳的額外參數 */ string szTenpayTradeNo = String.Empty; /* 使用 Credit 交易時,回傳的額外參數 */ string szGwsr = String.Empty; string szProcessDate = String.Empty; string szAuthCode = String.Empty; string szAmount = String.Empty; string szStage = String.Empty; string szStast = String.Empty; string szStaed = String.Empty; string szECI = String.Empty; string szCard4No = String.Empty; string szCard6No = String.Empty; string szRedDan = String.Empty; string szRedDeAmt = String.Empty; string szRedOkAmt = String.Empty; string szRedYet = String.Empty; string szPeriodType = String.Empty; string szFrequency = String.Empty; string szExecTimes = String.Empty; string szPeriodAmount = String.Empty; string szTotalSuccessTimes = String.Empty; string szTotalSuccessAmount = String.Empty; // 取得資料於畫面 foreach (string szKey in htFeedback.Keys) { switch (szKey) { /* 查詢後的回傳的基本參數 */ case "MerchantID": szMerchantID = htFeedback[szKey].ToString(); break; case "MerchantTradeNo": szMerchantTradeNo = htFeedback[szKey].ToString(); break; case "TradeNo": szTradeNo = htFeedback[szKey].ToString(); break; case "TradeAmt": szTradeAmt = htFeedback[szKey].ToString(); break; case "PaymentDate": szPaymentDate = htFeedback[szKey].ToString(); break; case "PaymentType": szPaymentType = htFeedback[szKey].ToString(); break; case "HandlingCharge": szHandlingCharge = htFeedback[szKey].ToString(); break; case "PaymentTypeChargeFee": szPaymentTypeChargeFee = htFeedback[szKey].ToString(); break; case "TradeDate": szTradeDate = htFeedback[szKey].ToString(); break; case "TradeStatus": szTradeStatus = htFeedback[szKey].ToString(); break; case "ItemName": szItemName = htFeedback[szKey].ToString(); break; /* 使用 WebATM 交易時回傳的參數 */ case "WebATMAccBank": szWebATMAccBank = htFeedback[szKey].ToString(); break; case "WebATMAccNo": szWebATMAccNo = htFeedback[szKey].ToString(); break; /* 使用 ATM 交易時回傳的參數 */ case "ATMAccBank": szATMAccBank = htFeedback[szKey].ToString(); break; case "ATMAccNo": szATMAccNo = htFeedback[szKey].ToString(); break; /* 使用 CVS 或 BARCODE 交易時回傳的參數 */ case "PaymentNo": szPaymentNo = htFeedback[szKey].ToString(); break; case "PayFrom": szPayFrom = htFeedback[szKey].ToString(); break; /* 使用 Alipay 交易時回傳的參數 */ case "AlipayID": szAlipayID = htFeedback[szKey].ToString(); break; case "AlipayTradeNo": szAlipayTradeNo = htFeedback[szKey].ToString(); break; /* 使用 Tenpay 交易時回傳的參數 */ case "TenpayTradeNo": szTenpayTradeNo = htFeedback[szKey].ToString(); break; /* 使用 Credit 交易時回傳的參數 */ case "gwsr": szGwsr = htFeedback[szKey].ToString(); break; case "process_date": szProcessDate = htFeedback[szKey].ToString(); break; case "auth_code": szAuthCode = htFeedback[szKey].ToString(); break; case "amount": szAmount = htFeedback[szKey].ToString(); break; case "stage": szStage = htFeedback[szKey].ToString(); break; case "stast": szStast = htFeedback[szKey].ToString(); break; case "staed": szStaed = htFeedback[szKey].ToString(); break; case "eci": szECI = htFeedback[szKey].ToString(); break; case "card4no": szCard4No = htFeedback[szKey].ToString(); break; case "card6no": szCard6No = htFeedback[szKey].ToString(); break; case "red_dan": szRedDan = htFeedback[szKey].ToString(); break; case "red_de_amt": szRedDeAmt = htFeedback[szKey].ToString(); break; case "red_ok_amt": szRedOkAmt = htFeedback[szKey].ToString(); break; case "red_yet": szRedYet = htFeedback[szKey].ToString(); break; case "PeriodType": szPeriodType = htFeedback[szKey].ToString(); break; case "Frequency": szFrequency = htFeedback[szKey].ToString(); break; case "ExecTimes": szExecTimes = htFeedback[szKey].ToString(); break; case "PeriodAmount": szPeriodAmount = htFeedback[szKey].ToString(); break; case "TotalSuccessTimes": szTotalSuccessTimes = htFeedback[szKey].ToString(); break; case "TotalSuccessAmount": szTotalSuccessAmount = htFeedback[szKey].ToString(); break; default: break; } } // 其他資料處理(將回傳值印在頁面)。 string output = String.Format("MerchantID={0}&MerchantTradeNo={1}&TradeNo={2}&TradeAmt={3}&PaymentDate={4}&PaymentType={5}&HandlingCharge={6}&PaymentTypeChargeFee={7}&TradeDate={8}&TradeStatus={9}&ItemName={10}" , szMerchantID, szMerchantTradeNo, szTradeNo, szTradeAmt, szPaymentDate, szPaymentType, szHandlingCharge, szPaymentTypeChargeFee, szTradeDate, szTradeStatus, szItemName); this.Response.Clear(); this.Response.Write(output); this.Response.Flush(); this.Response.End(); } } catch (Exception ex) { // 例外錯誤處理。 enErrors.Add(ex.Message); } finally { // 顯示錯誤訊息。 if (enErrors.Count() > 0) { string szErrorMessage = String.Join("\\r\\n", enErrors); } } }
public void PayOfFeedBack(string MerchantTradeNo) { List <string> enErrors = new List <string>(); Hashtable htFeedback = null; try { using (AllInOne oPayment = new AllInOne()) { /* 服務參數 */ oPayment.ServiceMethod = HttpMethod.ServerPOST; // 或使用 HttpMethod.HttpSOAP; oPayment.ServiceURL = "https://payment.allpay.com.tw/Cashier/QueryTradeInfo/V2"; oPayment.HashKey = HashKey; oPayment.HashIV = HashIV; oPayment.MerchantID = MerchantID; /* 基本參數 */ oPayment.Query.MerchantTradeNo = MerchantTradeNo; /* 查詢訂單 */ enErrors.AddRange(oPayment.QueryTradeInfo(ref htFeedback)); } // 取回所有資料 if (enErrors.Count() == 0) { /* 查詢後的回傳的基本參數 */ string szMerchantID = String.Empty; string szMerchantTradeNo = String.Empty; string szTradeNo = String.Empty; string szTradeAmt = String.Empty; string szPaymentDate = String.Empty; string szPaymentType = String.Empty; string szHandlingCharge = String.Empty; string szPaymentTypeChargeFee = String.Empty; string szTradeDate = String.Empty; string szTradeStatus = String.Empty; string szItemName = String.Empty; /* 使用 WebATM 交易時,回傳的額外參數 */ string szWebATMAccBank = String.Empty; string szWebATMAccNo = String.Empty; /* 使用 ATM 交易時,回傳的額外參數 */ string szATMAccBank = String.Empty; string szATMAccNo = String.Empty; /* 使用 CVS 交易時,回傳的額外參數 */ string szPaymentNo = String.Empty; string szPayFrom = String.Empty; /* 使用 Tenpay 交易時,回傳的額外參數 */ string szTenpayTradeNo = String.Empty; /* 使用 Credit 交易時,回傳的額外參數 */ string szGwsr = String.Empty; string szProcessDate = String.Empty; string szAuthCode = String.Empty; string szAmount = String.Empty; string szStage = String.Empty; string szStast = String.Empty; string szStaed = String.Empty; string szECI = String.Empty; string szCard4No = String.Empty; string szCard6No = String.Empty; string szRedDan = String.Empty; string szRedDeAmt = String.Empty; string szRedOkAmt = String.Empty; string szRedYet = String.Empty; string szPeriodType = String.Empty; string szFrequency = String.Empty; string szExecTimes = String.Empty; string szPeriodAmount = String.Empty; string szTotalSuccessTimes = String.Empty; string szTotalSuccessAmount = String.Empty; // 取得資料於畫面 foreach (string szKey in htFeedback.Keys) { switch (szKey) { /* 查詢後的回傳的基本參數 */ case "MerchantID": szMerchantID = htFeedback[szKey].ToString(); break; case "MerchantTradeNo": szMerchantTradeNo = htFeedback[szKey].ToString(); break; case "TradeNo": szTradeNo = htFeedback[szKey].ToString(); break; case "TradeAmt": szTradeAmt = htFeedback[szKey].ToString(); break; case "PaymentDate": szPaymentDate = htFeedback[szKey].ToString(); break; case "PaymentType": szPaymentType = htFeedback[szKey].ToString(); break; case "HandlingCharge": szHandlingCharge = htFeedback[szKey].ToString(); break; case "PaymentTypeChargeFee": szPaymentTypeChargeFee = htFeedback[szKey].ToString(); break; case "TradeDate": szTradeDate = htFeedback[szKey].ToString(); break; case "TradeStatus": szTradeStatus = htFeedback[szKey].ToString(); break; case "ItemName": szItemName = htFeedback[szKey].ToString(); break; /* 使用 WebATM 交易時回傳的參數 */ case "WebATMAccBank": szWebATMAccBank = htFeedback[szKey].ToString(); break; case "WebATMAccNo": szWebATMAccNo = htFeedback[szKey].ToString(); break; /* 使用 ATM 交易時回傳的參數 */ case "ATMAccBank": szATMAccBank = htFeedback[szKey].ToString(); break; case "ATMAccNo": szATMAccNo = htFeedback[szKey].ToString(); break; /* 使用 CVS 交易時回傳的參數 */ case "PaymentNo": szPaymentNo = htFeedback[szKey].ToString(); break; case "PayFrom": szPayFrom = htFeedback[szKey].ToString(); break; /* 使用 Tenpay 交易時回傳的參數 */ case "TenpayTradeNo": szTenpayTradeNo = htFeedback[szKey].ToString(); break; /* 使用 Credit 交易時回傳的參數 */ case "gwsr": szGwsr = htFeedback[szKey].ToString(); break; case "process_date": szProcessDate = htFeedback[szKey].ToString(); break; case "auth_code": szAuthCode = htFeedback[szKey].ToString(); break; case "amount": szAmount = htFeedback[szKey].ToString(); break; case "stage": szStage = htFeedback[szKey].ToString(); break; case "stast": szStast = htFeedback[szKey].ToString(); break; case "staed": szStaed = htFeedback[szKey].ToString(); break; case "eci": szECI = htFeedback[szKey].ToString(); break; case "card4no": szCard4No = htFeedback[szKey].ToString(); break; case "card6no": szCard6No = htFeedback[szKey].ToString(); break; case "red_dan": szRedDan = htFeedback[szKey].ToString(); break; case "red_de_amt": szRedDeAmt = htFeedback[szKey].ToString(); break; case "red_ok_amt": szRedOkAmt = htFeedback[szKey].ToString(); break; case "red_yet": szRedYet = htFeedback[szKey].ToString(); break; case "PeriodType": szPeriodType = htFeedback[szKey].ToString(); break; case "Frequency": szFrequency = htFeedback[szKey].ToString(); break; case "ExecTimes": szExecTimes = htFeedback[szKey].ToString(); break; case "PeriodAmount": szPeriodAmount = htFeedback[szKey].ToString(); break; case "TotalSuccessTimes": szTotalSuccessTimes = htFeedback[szKey].ToString(); break; case "TotalSuccessAmount": szTotalSuccessAmount = htFeedback[szKey].ToString(); break; default: break; } } using (var db = new MyAnythingEntities()) { var order = db.OrderMaster.Where(o => o.MerchantOrderNo == MerchantTradeNo).FirstOrDefault(); if (order != null) { order.TradeNo = szTradeNo; order.TradeStatus = szTradeStatus; order.PaymentType = szPaymentType; db.SaveChanges(); } } } } catch (Exception ex) { // 例外錯誤處理。 enErrors.Add(ex.Message); } finally { // 顯示錯誤訊息。 if (enErrors.Count() > 0) { string szErrorMessage = String.Join("\\r\\n", enErrors); } } }