标签:
在项目开发时,也经常用到支付接口。那我们如何实现在线支付呢?
(一)在线支付方式
第一种方式:就是直接和银行对接,引用对应银行的接口。
优点:免费;
缺点:
1、需要引用所有银行的接口,比较麻烦;
2、商业银行一般只针对大型企业及集团公司提供接口,对个人及小企业的网站不支持。所以申请不易;
第二种方式:就是通过一个第三方支付平台,和银行对接;这个第三方支付平台就很类似我们学过的外观,整合所有接口,网站只需要调用第三方的接口就可以完成所有对接;
优点:简单,只需了解第三方的接口;
缺点:
1、收费;
2、风险;
(二)什么是第三方支付:
所谓第三方支付,就是一些和各大银行签约、并具备一定实力和信誉保障的第三方独立机构提供的交易支持平台。在通过第三方支付平台的交易中,买方选购商品后,使用第三方平台提供的账户进行货款支付,由第三方通知卖家货款到达。
目前中国国内的第三方支付产品主要有PayPal(易趣公司产品)、支付宝(阿里巴巴旗下)、易宝、财付通(腾讯公司)、快钱、百付宝(百度C2C)、环迅支付、汇付天下等,其中数量最大的用户群体是PayPal和支付宝,前者主要在欧美国家流行,后者是阿里巴巴旗下的产品。
(三)支付流程:
用户在支付的过程中,必须传递一些关键的参数,所以必须保证数据安全。可以采用数字签名的方式。如果作为练习,不妨用易宝提供的测试账号
p1_MerId=10001126856
keyValue=69cl522AV6q613Ii4W6u8K6XuW8vM1N6bFgyv769220IuYe9u37N4y7rI4Pl
responseURL= http://localhost:8080/onlinepay/servlet/PaymentResponse
//订单付款方法 public String payOrder() throws IOException { //修改订单 Order currOrder = orderService.findByOid(order.getOid()); currOrder.setAddr(order.getAddr()); currOrder.setName(order.getName()); currOrder.setPhone(order.getPhone()); orderService.update(currOrder); //完成付款 String p0_Cmd = "Buy"; // 业务类型: String p1_MerId = "10001126856";// 商户编号: String p2_Order = order.getOid().toString();// 订单编号: String p3_Amt = "0.01"; // 付款金额: String p4_Cur = "CNY"; // 交易币种: String p5_Pid = ""; // 商品名称: String p6_Pcat = ""; // 商品种类: String p7_Pdesc = ""; // 商品描述: String p8_Url = "http://192.168.??.???:8080/MyShop/order_callBack.action"; // 商户接收支付成功数据的地址: String p9_SAF = ""; // 送货地址: String pa_MP = ""; // 商户扩展信息: String pd_FrpId = this.pd_FrpId;// 支付通道编码: String pr_NeedResponse = "1"; // 应答机制: String keyValue = "69cl522AV6q613Ii4W6u8K6XuW8vM1N6bFgyv769220IuYe9u37N4y7rI4Pl"; String hmac = PaymentUtil.buildHmac(p0_Cmd, p1_MerId, p2_Order, p3_Amt, p4_Cur, p5_Pid, p6_Pcat, p7_Pdesc, p8_Url, p9_SAF, pa_MP, pd_FrpId, pr_NeedResponse, keyValue); // hmac //向易宝出发 StringBuffer stringBuffer = new StringBuffer("https://www.yeepay.com/app-merchant-proxy/node?"); stringBuffer.append("p0_Cmd=").append(p0_Cmd).append("&"); stringBuffer.append("p1_MerId=").append(p1_MerId).append("&"); stringBuffer.append("p2_Order=").append(p2_Order).append("&"); stringBuffer.append("p3_Amt=").append(p3_Amt).append("&"); stringBuffer.append("p4_Cur=").append(p4_Cur).append("&"); stringBuffer.append("p5_Pid=").append(p5_Pid).append("&"); stringBuffer.append("p6_Pcat=").append(p6_Pcat).append("&"); stringBuffer.append("p7_Pdesc=").append(p7_Pdesc).append("&"); stringBuffer.append("p8_Url=").append(p8_Url).append("&"); stringBuffer.append("p9_SAF=").append(p9_SAF).append("&"); stringBuffer.append("pa_MP=").append(pa_MP).append("&"); stringBuffer.append("pd_FrpId=").append(pd_FrpId).append("&"); stringBuffer.append("pr_NeedResponse=").append(pr_NeedResponse).append("&"); stringBuffer.append("hmac=").append(hmac); //重定向到易宝 ServletActionContext.getResponse().sendRedirect(stringBuffer.toString()); return NONE; } //付款成功后的转向 public String callBack() { //修改订单状态,为已经付款 Order currOrder = orderService.findByOid(Integer.parseInt(r6_Order)); currOrder.setState(2); orderService.update(currOrder); //在页面上显示付款成功信息! this.addActionMessage("订单付款成功:订单编号:"+r6_Order+"订单金额:"+r3_Amt); return "msg"; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/u010096526/article/details/48131267