- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章java网上图书商城(9)支付模块由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
本文实例为大家分享了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"
);
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的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
在哪里可以找到有关退款状态的信息? 对于“取消”和“失败”,没关系。但是“已捕获”、“已授权”、“暂停”和“待处理”之间有什么区别。支付宝是什么意思? 谢谢 最佳答案 以下是 Paypal 付款状态列
我想问问是否有人知道无需用户交互即可进行 PayPal 付款的可能性。我目前正在开展一个项目,我们希望在用户无需登录 PayPal 的情况下按需进行 PayPal 付款。 我发现的是: 做引用交易 定
我无法找到 PayPal 提供的关于它如何处理 webhook 以进行支付的文档。付款是否与付款一样对待,以便完成的付款将启动付款完成的 webhook?一般来说,付款和支出是否通过网络 Hook 相
我有一个表单,人们可以在其中以固定金额订购一件商品。以下是步骤: 客户填写表格 客户点击提交并进入评论页面,他可以在其中检查他的输入 在评论表单中应该有一个使用 paypal 支付的按钮(带有自己的设
用了微信sdk各种痛苦,感觉比qq sdk调用麻烦多了,回调过于麻烦,还必须要在指定包名下的actvity进行回调,所以我在这里写一篇博客,有这个需求的朋友可以借鉴一下,以后自己别的项目有用到也有个
这个问题已经有答案了: 已关闭10 年前。 Possible Duplicate: How to set Azure Max Spending Limit or Cost CAP $ amount?
我正在尝试将 Stripe 集成到 Symfony2 项目上,我在他们的文档中看到的唯一付款方式是“用卡付款”按钮 https://stripe.com/docs/checkout它在我的项目上创建了
这个问题已经有答案了: 已关闭10 年前。 Possible Duplicate: How to set Azure Max Spending Limit or Cost CAP $ amount?
我想使用 firebase 作为服务器并向 stripe 发送付款请求。我在服务器端的经验为零,所以我正在寻找一种简单的方法来实现这一目标。此帖Is it possible to integrate
我在这里使用自适应 Paypal 支付控制台:https://apigee.com/console/paypal向人们付款。我无法找到一种方法在不授予他们许可的情况下向个人汇款(来 self )。我希
我一直坚持使用 OpenCart 的 PayPal 标准付款,但尚未找到解决方案。 我做了什么: 在 sandbox.paypal.com 上创建了企业帐户 设置以下网络首选项: 自动返回(指定 UR
我想在我的 WPF 应用程序中通过 PayPal 进行购物付款。我想为用户生成一个链接,但不知道如何通知应用程序已接受付款。是否唯一的解决方案将是服务器,它会检查付款是否已被接受并且应用程序会不时轮询
PayPal PayOut REST API 没有记录它的局限性。什么是: 每次付款的最大收款人数? 每次付款的最高金额? 每个收件人的最大金额? 注意: 我查看了在线文档和 paypal 论坛 (
我是 web 开发的新手,我需要做的是创建一个表单,用户可以在其中输入一些东西到一个字段中,让我们暂时称之为名称......然后当他们去 paypal 时,他们会捐赠 1 美元(预定)然后从支付给 P
我正在尝试将 PayPal 集成到我的应用程序中并了解 PayPal SDK 的工作原理我正在使用示例应用程序。我知道在用户按下“购买”按钮后,我需要将授权响应发送到我的服务器以验证付款。问题是我找不
在我的 oscar 应用程序中,django 需要自适应并行 oscar 支付程序。 谁能告诉我如何将 Adaptive Parallel Paypal 方法集成到 Normal Paypal 中。我
您好,我正在开发用于 NFC 支付的安卓应用程序。 Android 设置中有一个选项可以使用打开的应用程序而不是默认应用程序。例如,当我将默认应用程序设置为 Android Pay 并在付款前打开我的
我构建了一个使用命名空间和 PSR-0 自动加载的 PHP 应用程序。在尝试实现 Stripe库,我发现它似乎无法加载类,因为它们没有命名空间。如果我手动包含文件,有没有办法不自动加载? // Get
有人成功地将 Adyen 支付插件集成到 iOS 应用程序中吗? 我到了它向用户显示付款选项的地步,但选择其中一个选项没有任何作用。我希望它会转到表单以捕获卡的详细信息,但事实并非如此。 如有任何帮助
我正在与 Stripe Payment Gateway 集成——API 的最新版本。 除了“client_reference_id”没有传递给 webhook 或事务(没有出现在日志中)之外,这一切都
我是一名优秀的程序员,十分优秀!