AllPay,http://www.allpay.com.tw/,欧付宝是台湾知名的第三方支付公司,拥有丰富的支付模式(支持和支付宝、财付通),只需要一次对接,各种支付模式均可使用。

接口编写SDK:http://www.allpay.com.tw/Service/API_Help?Anchor=AnchorDoc

官方提供了比较完整的SDK,里面有丰富的代码,这里只讲需要注意的地方:

1.欧付宝提供若干支付模式,可以再接口中指定(不给用户选择的机会);也可以在接口中设置ALL,等到付款的时候让用户选择

2.确定支付模式后,便可以生成订单,然后等待支付

3.支付结果的确认是Server静默方式通知的,非URL跳转的方式,这点类似PayPal的Classic模式

4.提供沙箱模式http://vendor-stage.allpay.com.tw,用户名StageTest,密码Test1234,在沙箱中可以任意下订单,模拟支付等等

5.正式模式的后台http://vendor.allpay.com.tw同样支持模拟付款的方式

6.支付结果接收service,注意需要验证来源,也就是CheckMacValue,验证方法后面给出

7.如果接口中不指定支付模式,oPayment.Send.ChoosePayment = PaymentMethod.ALL; 即使客户不选择支付宝支付,那么也需要将支付宝的支付选项填入

oPayment.SendExtend.PhoneNo = "";
oPayment.SendExtend.Email = "";
oPayment.SendExtend.UserName = "";

因为这三项是必填字段,注意是SendExtend。

8.ReturnURL 為Server 端的回應,歐付寶Server會直接將付款結果送到您指定的ReturnURL

OrderResultURL 則為 Client 端的回應,我們會將使用者的畫面轉導到您指定的OrderResultURL

ClientBackURL 主要的功能,是在交易完成的頁面中,若廠商端有設定網址,則在該頁面上會出現「返回商店」的按鈕,當消費者點選後,會導到所設定的網址。

9.MerchantTradeNo测试的时候如果两笔都是一样的,会导致第二次创建订单失败,这个要注意,每次最好用随机数

下面是支付界面,传入订单编号,通过调用AllPay接口,会默认跳转到AllPay去支付
        public ActionResult PaymentByAllPay(Guid BillCode){List<string> enErrors = new List<string>();string szHtml = String.Empty;try{using (AllInOne oPayment = new AllInOne()){/* 服務參數 */oPayment.ServiceMethod = AllPay.Payment.Integration.HttpMethod.HttpPOST;//oPayment.ServiceURL = "http://payment-stage.allpay.com.tw/Cashier/AioCheckOut";oPayment.ServiceURL = "https://payment.allpay.com.tw/Cashier/AioCheckOut";oPayment.HashKey = System.Configuration.ConfigurationManager.AppSettings["APHashKey"];oPayment.HashIV = System.Configuration.ConfigurationManager.AppSettings["APHashIV"];oPayment.MerchantID = System.Configuration.ConfigurationManager.AppSettings["MerchantID"];
IList<COM_Bill> list = WMSFactory.COM_Bill.FindByCondition("");if (list == null || list.Count() != 1){throw new Exception("Error:BillCode Is Wrong!");}COM_Bill bill = list.First();IList<COM_BillSub> billSub = WMSFactory.COM_BillSub.FindByCondition("BillCode='" + BillCode.ToString() + "'");/* 基本參數 */string baseURI = Request.Url.Scheme + "://" + Request.Url.Authority + "/Order/";//以后台服务通知的形式发送到该URLoPayment.Send.ReturnURL = baseURI + "AllPayResult/"+BillCode.ToString().Replace("-","_");//完成付款,注意这里有严格的url限制,不能传递-oPayment.Send.ClientBackURL = baseURI;oPayment.Send.MerchantTradeNo = bill.Id.ToString()+DateTime.Parse(bill.CreateTime).ToString("yyyyMMddHHmmss") + new Random().Next(0, 9999).ToString();oPayment.Send.MerchantTradeDate = DateTime.Now;oPayment.Send.TotalAmount = (int)(bill.TotalAmount + bill.ShippingFee - bill.VoucherMoney);oPayment.Send.TradeDesc = "物流费:" + bill.ShippingFee.ToString();oPayment.Send.ChoosePayment = PaymentMethod.ALL;oPayment.Send.ChooseSubPayment = PaymentMethodItem.None;oPayment.Send.NeedExtraPaidInfo = ExtraPaymentInfo.No;oPayment.Send.DeviceSource = DeviceType.PC;//例(排除支付寶與財富通): Alipay#TenpayoPayment.Send.IgnorePayment = ""; // 加入選購商品資料。foreach (COM_BillSub sb in billSub){AllPay.Payment.Integration.Item item = new AllPay.Payment.Integration.Item();item.Name = sb.SkcName + ":" + sb.Skc.ToString() + "," + sb.ColorName + "," + sb.SizeName;item.Currency = "新台幣";item.Price = sb.Price;item.Quantity = sb.Num;item.URL = "";oPayment.Send.Items.Add(item);//oPayment.SendExtend.AlipayItemCounts += sb.Num.ToString() + "#";//oPayment.SendExtend.AlipayItemName += sb.SkcName + "#";//oPayment.SendExtend.AlipayItemPrice += sb.Price.ToString() + "#";
                    }//物流费用AllPay.Payment.Integration.Item shippingfeeitm = new AllPay.Payment.Integration.Item();shippingfeeitm.Name = "Shipping";shippingfeeitm.Currency = "新台幣";shippingfeeitm.Price = bill.ShippingFee;shippingfeeitm.Quantity = 1;oPayment.Send.Items.Add(shippingfeeitm);//oPayment.SendExtend.AlipayItemCounts += "1";//oPayment.SendExtend.AlipayItemName += "Shipping";//oPayment.SendExtend.AlipayItemPrice += bill.ShippingFee.ToString();//获取物流信息COM_Address address = WMSFactory.COM_Address.FindById(bill.ShippingId.ToString());oPayment.SendExtend.PhoneNo = address.TelPhone;oPayment.SendExtend.Email = member.Email;oPayment.SendExtend.UserName = address.LastName + address.FirstName;/* 產生訂單 */enErrors.AddRange(oPayment.CheckOut());/* 產生產生訂單 Html Code 的方法 */enErrors.AddRange(oPayment.CheckOutString(ref szHtml));Session.Add(BillCode.ToString(), oPayment.Send.MerchantTradeNo);}}catch (Exception ex){// 例外錯誤處理。
                enErrors.Add(ex.Message);}finally{if (enErrors.Count() > 0)throw new Exception(String.Join("<br />", enErrors));}//扣库存DataTable dt = WMSFactory.COM_BillSub.UpdateStore(BillCode, 2);if (dt != null && dt.Rows.Count > 0 && dt.Rows[0][0].ToString() != "0"){return RedirectToAction("PayResult", new { id = 3, msg = dt.Rows[0][0].ToString() });}ViewBag.AllPayRedirect = szHtml;return View();}

支付确认接口实现:

public void AllPayResult(string id){List<string> enErrors = new List<string>();Hashtable htFeedback = null;id = id.Replace("_", "-");log.Debug("进入allpayresult,id=" + id);try{string szHashKey = System.Configuration.ConfigurationManager.AppSettings["APHashKey"];string szHashIV = System.Configuration.ConfigurationManager.AppSettings["APHashIV"];// 取回所有資料 if (enErrors.Count() == 0){         /* 支付後的回傳的基本參數 */string szMerchantID = Request.Form["MerchantID"];string szMerchantTradeNo = Request.Form["MerchantTradeNo"];string szPaymentDate =Request.Form["PaymentDate"];string szPaymentType =  Request.Form["PaymentType"];string szPaymentTypeChargeFee =  Request.Form["PaymentTypeChargeFee"];string szRtnCode = Request.Form["RtnCode"];string szRtnMsg = Request.Form["RtnMsg"];string szSimulatePaid = Request.Form["SimulatePaid"];string szTradeAmt =Request.Form["TradeAmt"];string szTradeDate =Request.Form["TradeDate"];string szTradeNo = Request.Form["TradeNo"];string szCheckMacValue = Request.Form["CheckMacValue"];//一般回傳參數CMV(若需要其他檢查請自行增加)Dictionary<string, string> Parameters = new Dictionary<string, string>();Parameters.Add("MerchantID", szMerchantID);Parameters.Add("MerchantTradeNo", szMerchantTradeNo);Parameters.Add("RtnCode", szRtnCode);Parameters.Add("RtnMsg", szRtnMsg);Parameters.Add("TradeNo", szTradeNo);Parameters.Add("TradeAmt", szTradeAmt);Parameters.Add("PaymentDate", szPaymentDate);Parameters.Add("PaymentType", szPaymentType);Parameters.Add("PaymentTypeChargeFee", szPaymentTypeChargeFee);Parameters.Add("TradeDate", szTradeDate);Parameters.Add("SimulatePaid", szSimulatePaid);string ParameterString = string.Join("&", Parameters.OrderBy(d => d.Key).Select(p => p.Key + "=" + p.Value));string str = "HashKey=" + szHashKey + "&" + ParameterString + "&HashIV=" + szHashIV;log.Debug("接收到AllPay返回值=" + str);string urlEncodeStrPost = HttpUtility.UrlEncode(str);//url大寫轉小寫string lowerUrlEncodeStrPost = urlEncodeStrPost.ToLower();//檢查碼要使用MD5加密MD5 md5Hasher = MD5.Create();byte[] data = md5Hasher.ComputeHash(Encoding.Default.GetBytes(lowerUrlEncodeStrPost));StringBuilder sBuilder = new StringBuilder();for (int i = 0; i < data.Length; i++){sBuilder.Append(data[i].ToString("X2"));}string sCheckMacValue = sBuilder.ToString();log.Debug("mine:" + sCheckMacValue + ";param:" + szCheckMacValue);if (szRtnCode == "1" && szSimulatePaid == "0" && sCheckMacValue == szCheckMacValue){//更新订单状态}}}catch (Exception ex){     // 例外錯誤處理。
                enErrors.Add(ex.Message);}finally{this.Response.Clear();     // 回覆成功訊息。 if (enErrors.Count() == 0)this.Response.Write("1|OK");     // 回覆錯誤訊息。 elsethis.Response.Write(String.Format("0|{0}", String.Join("\\r\\n", enErrors)));this.Response.Flush();this.Response.End();}}

AllPay(欧付宝)支付接口集成相关推荐

  1. 台湾第三方支付平台欧付宝参与臺大…

    传统金融產业正面临互联网金融FinTech的衝击,而其中又以数位金融相关的区块链(Blockchain)技术为新兴显学,臺湾大学今日成立「国立臺湾大学金融科技暨区块链中心」,由臺大教授廖世伟担任中心主 ...

  2. PHP在线支付接口集成教程

    网上支付(支付宝,财付通,易宝,银联)是电子支付的一种形式,它是通过第三方提供的与银行之间的支付接口进行的即时支付方式,这种方式的好处在于可以直接把资金从用户的银行卡中转账到网站账户中,汇款马上到账, ...

  3. 支付宝在台湾被侵权,马云起诉欧付宝

    前段时间才传出马云为了避免商标受到侵害,还特地给阿里巴巴注册了众多商标,什么阿里爸爸.阿里奶奶.阿里妈妈等.弄得网友们啼笑皆非,但还是防不胜防,支付宝在台湾被侵权. 现今,第三方支付越来越吃香,而在台 ...

  4. Android WebView使用及苏宁易付宝支付相关问题

    最近项目中应用到苏宁易付宝支付方式  项目中遇到了一些问题总结如下: 易付宝使用处理的逻辑代码: public class YiFuBaoWebView extends BaseActivity im ...

  5. 与建行进行善付通支付接口小知识

    与建行进行善付通支付接口小知识 1.测试环境 目前做的工作都是为了更顺利的与生产环境进行对接. 2.生产环境 测试环境没问题后,申请生产环境的开发==一般需要三到五天==: 3.感觉最坑人的地方 1. ...

  6. 【支付宝】Android-支付宝支付时显示:系统繁忙,请稍后再试。错误码:ALI40247

    说明 该报错只会出现在app支付[alipay.trade.app.pay ]接口中. APP支付交易参数验证不通过,建议根据下面的思路去分析和排查.出现此类异常时系统交互如下: 注意红色字体部分信息 ...

  7. python支付宝自动支付_python-支付宝支付示例

    项目演示: 1.输入金额 2.扫码支付: 3.支付完成: 4.跳转回商户 一.注册账号 二.设置应用公钥 三.代码实现 1.项目结构: 2.把生成的     应用私钥     和    支付宝的公钥  ...

  8. 百付宝支付通道加解密和加签验签总结

    百付宝发送报文时,先进行加密,然后加签,返回报文后,先验签,再解密. 其中加密和解密用的是AES算法,且密钥相同,由百付宝提供.AES算法的密钥长度,JDK中规定最长是128位,如果超过了(比如256 ...

  9. app沙箱宝支付接口怎么测_支付宝沙箱测试DEMO实践

    1.DEMO说明 本次测试只实现支付宝沙箱里面的 扫码支付.商家退款:(本来买家支付也想实现来着:但是没找到相关接口信息所以暂未实现:有知道的朋友请告知) 2.支付宝开放平台沙箱地址: https:/ ...

最新文章

  1. 重磅 | 2018年清华大学研究生新生大数据
  2. NTU 笔记 6422quiz 复习(1~3节)
  3. 分享一次 Java 内存泄漏的排查
  4. 记录一个自动创建分区的脚本
  5. PAT_B_1011_Java(15分)
  6. NFS精简版配置方法
  7. Android LinearLayout加载Fragment
  8. linux 内存查看_Linux终端查看最消耗CPU内存的进程
  9. 视觉SLAM十四讲学习笔记-第二讲-开发环境搭建
  10. 文件夹的最小化时,上面的名字。
  11. 【Codeforces Round #519 by Botan Investments D】Mysterious Crime
  12. log4net异步写入日志_redis学习笔记(三)RDB日志
  13. 2016峰会:项目管理与高级项目管理(广州站)
  14. 学习笔记-Bandit-WalkThrough
  15. 信用报告OCR服务 助力授信审核快人一步
  16. 对JSP内置对象的部分总结
  17. 160个CrackMe001
  18. 磁共振影像分析之: 基于FSL的VBM分析(1)
  19. 计算机英语教学设计,英语教学设计doc范文精选
  20. .nav ul .mall a:hover是什么意思

热门文章

  1. android 代码 自动锁定时间,Android系统取消自动锁定屏幕
  2. 关于盏溢出和 Security_cookie
  3. java中sleep()的用法(毫秒)
  4. DDS之DCPS Infrastructure模块
  5. Blog小技巧之五-在Blog上添加邮件图标
  6. easyui源码翻译1.32--Resizable(调整大小)
  7. python3怎么创建文件_python3怎么创建新文件
  8. 【详解】Python数据分析第三方库分析
  9. Locksupport 与 Condition
  10. 内测分发是什么,都有哪些方式?