在线支付so easy

来源:互联网 发布:视频播放cms 编辑:程序博客网 时间:2024/05/25 18:12

        在项目开发时,也经常用到支付接口。那我们如何实现在线支付呢?

(一)在线支付方式

 第一种方式:就是直接和银行对接,引用对应银行的接口。

    优点:免费;

    缺点:

      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";}

    具体的参数说明,可以查看易宝帮助文档(关于支付请求参数说明、支付结果参数说明)。


2 0
原创粉丝点击