激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|編程技術(shù)|正則表達(dá)式|

服務(wù)器之家 - 編程語言 - JAVA教程 - java網(wǎng)上圖書商城(9)支付模塊

java網(wǎng)上圖書商城(9)支付模塊

2020-07-10 19:35ganchuanpu JAVA教程

這篇文章主要為大家詳細(xì)介紹了java網(wǎng)上圖書商城,支付模塊,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了java網(wǎng)上商城支付模塊的具體代碼,供大家參考,具體內(nèi)容如下

java網(wǎng)上圖書商城(9)支付模塊

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");
  req.setAttribute("msg", "無效的簽名,支付失敗!(你不是好人)");
  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ù)器之家。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 精品成人久久久 | 中文字幕国产一区 | 成人电影毛片 | 国产在线免费 | 午夜精品福利在线观看 | 精品一区二区亚洲 | 中文字幕在线观看亚洲 | 国色天香综合网 | 国产妞干网| 成年免费在线视频 | 欧美一区二区三区久久精品视 | 亚洲视频精品在线 | 欧美一区二区三区免费电影 | 91精品国产91久久久 | 97久久日一线二线三线 | 亚洲成人福利电影 | 精品国产一区二区三区在线 | 国产精品一区二区免费在线观看 | 黄色网址在线播放 | 亚洲国产成人一区二区 | 日本在线免费观看视频 | 久草在线资源观看 | av在线直播观看 | 国产乱淫av一区二区三区 | 国产系列 视频二区 | 天堂福利电影 | 欧美在线观看视频网站 | 黄色网址在线视频 | 一本色道久久综合亚洲精品图片 | 国产成年人网站 | 久久久久亚洲美女啪啪 | 91美女视频在线观看 | 欧美一区久久久 | 成年人黄色片视频 | 精品亚洲午夜久久久久91 | 第一区免费在线观看 | 精品国产91一区二区三区 | 精品无吗乱吗av国产爱色 | 一级黄色在线观看 | 毛片视频免费观看 | 欧美一级淫片a免费播放口 91九色蝌蚪国产 |