本文實(shí)例為大家分享了java網(wǎng)上商城支付模塊的具體代碼,供大家參考,具體內(nèi)容如下
1.支付準(zhǔn)備
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. 準(zhǔn)備13個(gè)參數(shù) */ String p0_Cmd = "Buy";//業(yè)務(wù)類型,固定值Buy String p1_MerId = props.getProperty("p1_MerId");//商號編碼,在易寶的唯一標(biāo)識 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");//在支付成功后,易寶會訪問這個(gè)地址。 String p9_SAF = "";//送貨地址 String pa_MP = "";//擴(kuò)展信息 String pd_FrpId = req.getParameter("yh");//支付通道 String pr_NeedResponse = "1";//應(yīng)答機(jī)制,固定值1 /* * 2. 計(jì)算hmac * 需要13個(gè)參數(shù) * 需要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. 重定向到易寶的支付網(wǎng)關(guān) */ 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.回饋方法
當(dāng)支付成功時(shí),易寶會訪問這里
用兩種方法訪問:
1. 引導(dǎo)用戶的瀏覽器重定向(如果用戶關(guān)閉了瀏覽器,就不能訪問這里了)
2. 易寶的服務(wù)器會使用點(diǎn)對點(diǎn)通訊的方法訪問這個(gè)方法。(必須回饋success,不然易寶服務(wù)器會一直調(diào)用這個(gè)方法)
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個(gè)參數(shù) */ 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. 調(diào)用PaymentUtil的校驗(yàn)方法來校驗(yàn)調(diào)用者的身份 * >如果校驗(yàn)失敗:保存錯(cuò)誤信息,轉(zhuǎn)發(fā)到msg.jsp * >如果校驗(yàn)通過: * * 判斷訪問的方法是重定向還是點(diǎn)對點(diǎn),如果要是重定向 * 修改訂單狀態(tài),保存成功信息,轉(zhuǎn)發(fā)到msg.jsp * * 如果是點(diǎn)對點(diǎn):修改訂單狀態(tài),返回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" >選擇網(wǎng)上銀行</ 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 |
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。