gpt4 book ai didi

java网上图书商城(9)支付模块

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 26 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章java网上图书商城(9)支付模块由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

本文实例为大家分享了java网上商城支付模块的具体代码,供大家参考,具体内容如下 。

java网上图书商城(9)支付模块

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" );
   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" >选择网上银行</ 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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我.

最后此篇关于java网上图书商城(9)支付模块的文章就讲到这里了,如果你想了解更多关于java网上图书商城(9)支付模块的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com