码迷,mamicode.com
首页 > 其他好文 > 详细

在线支付so easy

时间:2015-08-31 15:16:16      阅读:230      评论:0      收藏:0      [点我收藏+]

标签:

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

(一)在线支付方式

技术分享技术分享

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

    优点:免费;

    缺点:

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

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


版权声明:本文为博主原创文章,未经博主允许不得转载。

在线支付so easy

标签:

原文地址:http://blog.csdn.net/u010096526/article/details/48131267

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!