本文实例为大家分享了java网上商城支付模块的具体代码,供大家参考,具体内容如下
1.支付准备
1
2
3
4
5
|
public String paymentPre(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { req.setAttribute( "order" , orderService.load(req.getParameter( "oid" ))); return "f:/jsps/order/pay.jsp" ; } |
2.支付方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
public String payment(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { Properties props = new Properties(); props.load( this .getClass().getClassLoader().getResourceAsStream( "payment.properties" )); /* * 1. 准备13个参数 */ String p0_Cmd = "Buy";//业务类型,固定值Buy String p1_MerId = props.getProperty("p1_MerId");//商号编码,在易宝的唯一标识 String p2_Order = req.getParameter("oid");//订单编码 String p3_Amt = "0.01";//支付金额 String p4_Cur = "CNY";//交易币种,固定值CNY String p5_Pid = "";//商品名称 String p6_Pcat = "";//商品种类 String p7_Pdesc = "";//商品描述 String p8_Url = props.getProperty("p8_Url");//在支付成功后,易宝会访问这个地址。 String p9_SAF = "";//送货地址 String pa_MP = "";//扩展信息 String pd_FrpId = req.getParameter("yh");//支付通道 String pr_NeedResponse = "1";//应答机制,固定值1 /* * 2. 计算hmac * 需要13个参数 * 需要keyValue * 需要加密算法 */ String keyValue = props.getProperty("keyValue"); 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); /* * 3. 重定向到易宝的支付网关 */ StringBuilder sb = new StringBuilder( "https://www.yeepay.com/app-merchant-proxy/node" ); sb.append( "?" ).append( "p0_Cmd=" ).append(p0_Cmd); sb.append( "&" ).append( "p1_MerId=" ).append(p1_MerId); sb.append( "&" ).append( "p2_Order=" ).append(p2_Order); sb.append( "&" ).append( "p3_Amt=" ).append(p3_Amt); sb.append( "&" ).append( "p4_Cur=" ).append(p4_Cur); sb.append( "&" ).append( "p5_Pid=" ).append(p5_Pid); sb.append( "&" ).append( "p6_Pcat=" ).append(p6_Pcat); sb.append( "&" ).append( "p7_Pdesc=" ).append(p7_Pdesc); sb.append( "&" ).append( "p8_Url=" ).append(p8_Url); sb.append( "&" ).append( "p9_SAF=" ).append(p9_SAF); sb.append( "&" ).append( "pa_MP=" ).append(pa_MP); sb.append( "&" ).append( "pd_FrpId=" ).append(pd_FrpId); sb.append( "&" ).append( "pr_NeedResponse=" ).append(pr_NeedResponse); sb.append( "&" ).append( "hmac=" ).append(hmac); resp.sendRedirect(sb.toString()); return null ; } |
3.回馈方法
当支付成功时,易宝会访问这里
用两种方法访问:
1. 引导用户的浏览器重定向(如果用户关闭了浏览器,就不能访问这里了)
2. 易宝的服务器会使用点对点通讯的方法访问这个方法。(必须回馈success,不然易宝服务器会一直调用这个方法)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
public String back(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { /* * 1. 获取12个参数 */ String p1_MerId = req.getParameter("p1_MerId"); String r0_Cmd = req.getParameter("r0_Cmd"); String r1_Code = req.getParameter("r1_Code"); String r2_TrxId = req.getParameter("r2_TrxId"); String r3_Amt = req.getParameter("r3_Amt"); String r4_Cur = req.getParameter("r4_Cur"); String r5_Pid = req.getParameter("r5_Pid"); String r6_Order = req.getParameter("r6_Order"); String r7_Uid = req.getParameter("r7_Uid"); String r8_MP = req.getParameter("r8_MP"); String r9_BType = req.getParameter("r9_BType"); String hmac = req.getParameter("hmac"); /* * 2. 获取keyValue */ Properties props = new Properties(); props.load(this.getClass().getClassLoader().getResourceAsStream("payment.properties")); String keyValue = props.getProperty("keyValue"); /* * 3. 调用PaymentUtil的校验方法来校验调用者的身份 * >如果校验失败:保存错误信息,转发到msg.jsp * >如果校验通过: * * 判断访问的方法是重定向还是点对点,如果要是重定向 * 修改订单状态,保存成功信息,转发到msg.jsp * * 如果是点对点:修改订单状态,返回success */ boolean bool = PaymentUtil.verifyCallback(hmac, p1_MerId, r0_Cmd, r1_Code, r2_TrxId, r3_Amt, r4_Cur, r5_Pid, r6_Order, r7_Uid, r8_MP, r9_BType, keyValue); if (!bool) { req.setAttribute( "code" , "error" ); return "f:/jsps/msg.jsp" ; } if (r1_Code.equals( "1" )) { orderService.updateStatus(r6_Order, 2 ); if (r9_BType.equals( "1" )) { req.setAttribute( "code" , "success" ); req.setAttribute( "msg" , "恭喜,支付成功!" ); return "f:/jsps/msg.jsp" ; } else if (r9_BType.equals( "2" )) { resp.getWriter().print( "success" ); } } return null ; } |
4.pay.jsp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
|
<%@ page language="java" import="java.util.*" pageEncoding="GBK"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> < html > < head > < title >pay.jsp</ title > < meta http-equiv = "pragma" content = "no-cache" > < meta http-equiv = "cache-control" content = "no-cache" > < meta http-equiv = "expires" content = "0" > < meta http-equiv = "keywords" content = "keyword1,keyword2,keyword3" > < meta http-equiv = "description" content = "This is my page" > <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> < link rel = "stylesheet" type = "text/css" href="<c:url value = '/jsps/css/order/pay.css' />"> < script type = "text/javascript" src="<c:url value = '/jquery/jquery-1.5.1.js' />"></ script > < script type = "text/javascript" > $(function() { $("img").click(function() { $("#" + $(this).attr("name")).attr("checked", true); }); }); </ script > </ head > < body > < div class = "divContent" > < span class = "spanPrice" >支付金额:</ span >< span class = "price_t" >¥${order.total }</ span > < span class = "spanOid" >编号:${order.oid }</ span > </ div > < form action="<c:url value = '/OrderServlet' />" method="post" id="form1" target="_top"> < input type = "hidden" name = "method" value = "payment" /> < input type = "hidden" name = "oid" value = "${order.oid }" /> < div class = "divBank" > < div class = "divText" >选择网上银行</ div > < div style = "margin-left: 20px;" > < div style = "margin-bottom: 20px;" > < input id = "ICBC-NET-B2C" type = "radio" name = "yh" value = "ICBC-NET-B2C" checked = "checked" /> < img name = "ICBC-NET-B2C" align = "middle" src="<c:url value = '/bank_img/icbc.bmp' />"/> < input id = "CMBCHINA-NET-B2C" type = "radio" name = "yh" value = "CMBCHINA-NET-B2C" /> < img name = "CMBCHINA-NET-B2C" align = "middle" src="<c:url value = '/bank_img/cmb.bmp' />"/> < input id = "ABC-NET-B2C" type = "radio" name = "yh" value = "ABC-NET-B2C" /> < img name = "ABC-NET-B2C" align = "middle" src="<c:url value = '/bank_img/abc.bmp' />"/> < input id = "CCB-NET-B2C" type = "radio" name = "yh" value = "CCB-NET-B2C" /> < img name = "CCB-NET-B2C" align = "middle" src="<c:url value = '/bank_img/ccb.bmp' />"/> </ div > < div style = "margin-bottom: 20px;" > < input id = "BCCB-NET-B2C" type = "radio" name = "yh" value = "BCCB-NET-B2C" /> < img name = "BCCB-NET-B2C" align = "middle" src="<c:url value = '/bank_img/bj.bmp' />"/> < input id = "BOCO-NET-B2C" type = "radio" name = "yh" value = "BOCO-NET-B2C" /> < img name = "BOCO-NET-B2C" align = "middle" src="<c:url value = '/bank_img/bcc.bmp' />"/> < input id = "CIB-NET-B2C" type = "radio" name = "yh" value = "CIB-NET-B2C" /> < img name = "CIB-NET-B2C" align = "middle" src="<c:url value = '/bank_img/cib.bmp' />"/> < input id = "NJCB-NET-B2C" type = "radio" name = "yh" value = "NJCB-NET-B2C" /> < img name = "NJCB-NET-B2C" align = "middle" src="<c:url value = '/bank_img/nanjing.bmp' />"/> </ div > < div style = "margin-bottom: 20px;" > < input id = "CMBC-NET-B2C" type = "radio" name = "yh" value = "CMBC-NET-B2C" /> < img name = "CMBC-NET-B2C" align = "middle" src="<c:url value = '/bank_img/cmbc.bmp' />"/> < input id = "CEB-NET-B2C" type = "radio" name = "yh" value = "CEB-NET-B2C" /> < img name = "CEB-NET-B2C" align = "middle" src="<c:url value = '/bank_img/guangda.bmp' />"/> < input id = "BOC-NET-B2C" type = "radio" name = "yh" value = "BOC-NET-B2C" /> < img name = "BOC-NET-B2C" align = "middle" src="<c:url value = '/bank_img/bc.bmp' />"/> < input id = "PINGANBANK-NET" type = "radio" name = "yh" value = "PINGANBANK-NET" /> < img name = "PINGANBANK-NET" align = "middle" src="<c:url value = '/bank_img/pingan.bmp' />"/> </ div > < div style = "margin-bottom: 20px;" > < input id = "CBHB-NET-B2C" type = "radio" name = "yh" value = "CBHB-NET-B2C" /> < img name = "CBHB-NET-B2C" align = "middle" src="<c:url value = '/bank_img/bh.bmp' />"/> < input id = "HKBEA-NET-B2C" type = "radio" name = "yh" value = "HKBEA-NET-B2C" /> < img name = "HKBEA-NET-B2C" align = "middle" src="<c:url value = '/bank_img/dy.bmp' />"/> < input id = "NBCB-NET-B2C" type = "radio" name = "yh" value = "NBCB-NET-B2C" /> < img name = "NBCB-NET-B2C" align = "middle" src="<c:url value = '/bank_img/ningbo.bmp' />"/> < input id = "ECITIC-NET-B2C" type = "radio" name = "yh" value = "ECITIC-NET-B2C" /> < img name = "ECITIC-NET-B2C" align = "middle" src="<c:url value = '/bank_img/zx.bmp' />"/> </ div > < div style = "margin-bottom: 20px;" > < input id = "SDB-NET-B2C" type = "radio" name = "yh" value = "SDB-NET-B2C" /> < img name = "SDB-NET-B2C" align = "middle" src="<c:url value = '/bank_img/sfz.bmp' />"/> < input id = "GDB-NET-B2C" type = "radio" name = "yh" value = "GDB-NET-B2C" /> < img name = "GDB-NET-B2C" align = "middle" src="<c:url value = '/bank_img/gf.bmp' />"/> < input id = "SHB-NET-B2C" type = "radio" name = "yh" value = "SHB-NET-B2C" /> < img name = "SHB-NET-B2C" align = "middle" src="<c:url value = '/bank_img/sh.bmp' />"/> < input id = "SPDB-NET-B2C" type = "radio" name = "yh" value = "SPDB-NET-B2C" /> < img name = "SPDB-NET-B2C" align = "middle" src="<c:url value = '/bank_img/shpd.bmp' />"/> </ div > < div style = "margin-bottom: 20px;" > < input id = "POST-NET-B2C" type = "radio" name = "yh" value = "POST-NET-B2C" /> < img name = "POST-NET-B2C" align = "middle" src="<c:url value = '/bank_img/post.bmp' />"/> < input id = "BJRCB-NET-B2C" type = "radio" name = "yh" value = "BJRCB-NET-B2C" /> < img name = "BJRCB-NET-B2C" align = "middle" src="<c:url value = '/bank_img/beijingnongshang.bmp' />"/> < input id = "HXB-NET-B2C" type = "radio" name = "yh" value = "HXB-NET-B2C" /> < img name = "HXB-NET-B2C" align = "middle" src="<c:url value = '/bank_img/hx.bmp' />"/> < input id = "CZ-NET-B2C" type = "radio" name = "yh" value = "CZ-NET-B2C" /> < img name = "CZ-NET-B2C" align = "middle" src="<c:url value = '/bank_img/zheshang.bmp' />"/> </ div > </ div > < div style = "margin: 40px;" > < a href = "javascript:void $('#form1').submit();" class = "linkNext" >下一步</ a > </ div > </ div > </ form > </ body > </ html > |
payment.properties
1
2
3
|
p1_MerId= 10001126856 keyValue=69cl522AV6q613Ii4W6u8K6XuW8vM1N6bFgyv769220IuYe9u37N4y7rI4Pl p8_Url=http\: //localhost\:8080/goods/OrderServlet?method\=back |
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。