<%@ page language="java" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>前台首页</title>
</head>
<body>
<h1>在线支付演示</h1>
<form action="${pageContext.request.contextPath }/servlet/PayServlet" method="post">
此次购物订单编号<input type="text" name="p2_Order" /><br>
money<input type="text" name="p3_Amt" value="0.01"/><br>
工商银行<input type="radio" value="ICBC-NET" name="pd_FrpId">
建设银行<input type="radio" value="CCB-NET" name="pd_FrpId"><br>
<input type="submit" value="submit" />
<input type="hidden" value="pay" name="status"/>
</form>
</body>
</html>
public class PayServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String status = request.getParameter("status");
if (status.equals("pay")) { //index.jsp中隐藏字段传来的是pay,所以处理支付这部分
// 加密的密钥,用在加密算法中,由支付中介提供,每个商家独一无二的
String keyValue = "w0P75wMZ203fr46r5i70V556WHFa94j14yW5J6vuh4yo3nRl5jsqF3c41677";
// 1: 给参数赋值,这些参数(即明文)都是易宝官方提供的文档中所定义的,名字我们不能改
String p0_Cmd = formatString("Buy");
String p1_MerId = formatString("10000940764");
String p2_Order = formatString(request.getParameter("p2_Order"));
String p3_Amt = formatString(request.getParameter("p3_Amt"));
String p4_Cur = formatString("CNY");
String p5_Pid = "";
String p6_Pcat = "";
String p7_Pdesc = "";
String p8_Url = "http://www.tongji.edu.cn";//这是支付成功后跳转到的页面,可以设为商城首页,这个demo就用同济大学主页好了……
String p9_SAF = "0";
String pa_MP = "";
String pd_FrpId = formatString(request.getParameter("pd_FrpId"));
pd_FrpId = pd_FrpId.toUpperCase();
String pr_NeedResponse = "0";
String hmac = formatString("");//hmac是用来存储密文的
/*上面所有的明文都用都用formatString方法包装了一下,该方法在下面,主要是将null转换成""
*因为null是无法转换成密文的*/
// 解决数据安全性问题: 把明文加密--->密文 然后把明文和密文都交给易宝
// 易宝拿到数据后,把传过来的明文加密, 和传过来密文比较,
// 如果相等数据没有被篡改 (商家与易宝加密时都用的是相同key)
// 把明文数据追加到StringBuffer,注意追加顺序不能改,否则生成的密文会不同的,
// 要严格按照易宝的官方文档说名来写才行,因为易宝那边就是根据文档中的顺序追加的
StringBuffer infoBuffer = new StringBuffer();
infoBuffer.append(p0_Cmd);
infoBuffer.append(p1_MerId);
infoBuffer.append(p2_Order);
infoBuffer.append(p3_Amt);
infoBuffer.append(p4_Cur);
infoBuffer.append(p5_Pid);
infoBuffer.append(p6_Pcat);
infoBuffer.append(p7_Pdesc);
infoBuffer.append(p8_Url);
infoBuffer.append(p9_SAF);
infoBuffer.append(pa_MP);
infoBuffer.append(pd_FrpId);
infoBuffer.append(pr_NeedResponse);
// 加密后的密文存储到了hmac中,加密算法易宝会提供的,因为他那边也得用相同的算法
hmac = DigestUtil.hmacSign(infoBuffer.toString(), keyValue);
// 把明文和密文都存储到request.setAttribute中
request.setAttribute("p0_Cmd", p0_Cmd);
request.setAttribute("p1_MerId", p1_MerId);
request.setAttribute("p2_Order", p2_Order);
request.setAttribute("p3_Amt", p3_Amt);
request.setAttribute("p4_Cur", p4_Cur);
request.setAttribute("p5_Pid", p5_Pid);
request.setAttribute("p6_Pcat", p6_Pcat);
request.setAttribute("p7_Pdesc", p7_Pdesc);
request.setAttribute("p8_Url", p8_Url);
request.setAttribute("p9_SAF", p9_SAF);
request.setAttribute("pa_MP", pa_MP);
request.setAttribute("pd_FrpId", pd_FrpId);
request.setAttribute("pr_NeedResponse", pr_NeedResponse);
request.setAttribute("hmac", hmac);
System.out.println("hmac-->" + hmac);
//跳转到reqpay.jsp中,将这些信息提交到易宝
request.getRequestDispatcher("/reqpay.jsp").forward(request,
response);
} else if (status.equals("success")) {//易宝那边传来的是success,处理返回验证部分
PrintWriter out = response.getWriter();
String keyValue = "w0P75wMZ203fr46r5i70V556WHFa94j14yW5J6vuh4yo3nRl5jsqF3c41677";
// 获取所有的明文
String r0_Cmd = formatString(request.getParameter("r0_Cmd"));
String p1_MerId = request.getParameter("p1_MerId");
String r1_Code = formatString(request.getParameter("r1_Code"));
String r2_TrxId = formatString(request.getParameter("r2_TrxId"));
String r3_Amt = formatString(request.getParameter("r3_Amt"));
String r4_Cur = formatString(request.getParameter("r4_Cur"));
String r5_Pid = new String(formatString(
request.getParameter("r5_Pid")).getBytes("iso-8859-1"),
"UTF-8");
String r6_Order = formatString(request.getParameter("r6_Order"));
String r7_Uid = formatString(request.getParameter("r7_Uid"));
String r8_MP = new String(formatString(
request.getParameter("r8_MP")).getBytes("iso-8859-1"),
"UTF-8");
String r9_BType = formatString(request.getParameter("r9_BType"));
// 对明文进行数据追加
String hmac = formatString(request.getParameter("hmac"));
StringBuffer infoBuffer = new StringBuffer();
infoBuffer.append(p1_MerId);
infoBuffer.append(r0_Cmd);
infoBuffer.append(r1_Code);
infoBuffer.append(r2_TrxId);
infoBuffer.append(r3_Amt);
infoBuffer.append(r4_Cur);
infoBuffer.append(r5_Pid);
infoBuffer.append(r6_Order);
infoBuffer.append(r7_Uid);
infoBuffer.append(r8_MP);
infoBuffer.append(r9_BType);
// 对返回的明文进行加密
String md5 = DigestUtil.hmacSign(infoBuffer.toString(), keyValue);
// 判断加密的密文与传过来的数据签名是否相等
boolean isOK = md5.equals(hmac);
if (isOK && r1_Code.equals("1")) {//r1_Code为1表示成功
//把支付成功的订单状态改成已支付,并个给用户显示支付成功信息
//调用邮件服务接口,短信发送服务等
//这里就打印一句话呗~
out.println("订单编号为:" + r6_Order + "支付金额为:" + r3_Amt);
} else {
out.println("fail !!!!");
}
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
String formatString(String text) {
if (text == null) {
return "";
}
return text;
}
}
public class DigestUtil {
private static String encodingCharset = "UTF-8";
public static String hmacSign(String aValue, String aKey) {
byte k_ipad[] = new byte[64];
byte k_opad[] = new byte[64];
byte keyb[];
byte value[];
try {
keyb = aKey.getBytes(encodingCharset);
value = aValue.getBytes(encodingCharset);
} catch (UnsupportedEncodingException e) {
keyb = aKey.getBytes();
value = aValue.getBytes();
}
Arrays.fill(k_ipad, keyb.length, 64, (byte) 54);
Arrays.fill(k_opad, keyb.length, 64, (byte) 92);
for (int i = 0; i < keyb.length; i++) {
k_ipad[i] = (byte) (keyb[i] ^ 0x36);
k_opad[i] = (byte) (keyb[i] ^ 0x5c);
}
MessageDigest md = null;
try {
md = MessageDigest.getInstance("MD5");
} catch (NoSuchAlgorithmException e) {
return null;
}
md.update(k_ipad);
md.update(value);
byte dg[] = md.digest();
md.reset();
md.update(k_opad);
md.update(dg, 0, 16);
dg = md.digest();
return toHex(dg);
}
public static String toHex(byte input[]) {
if (input == null)
return null;
StringBuffer output = new StringBuffer(input.length * 2);
for (int i = 0; i < input.length; i++) {
int current = input[i] & 0xff;
if (current < 16)
output.append("0");
output.append(Integer.toString(current, 16));
}
return output.toString();
}
public static String getHmac(String[] args, String key) {
if (args == null || args.length == 0) {
return (null);
}
StringBuffer str = new StringBuffer();
for (int i = 0; i < args.length; i++) {
str.append(args[i]);
}
return (hmacSign(str.toString(), key));
}
/**
* @param aValue
* @return
*/
public static String digest(String aValue) {
aValue = aValue.trim();
byte value[];
try {
value = aValue.getBytes(encodingCharset);
} catch (UnsupportedEncodingException e) {
value = aValue.getBytes();
}
MessageDigest md = null;
try {
md = MessageDigest.getInstance("SHA");
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
return null;
}
return toHex(md.digest(value));
}
//我自己用来测试的
public static void main(String[] args) {
// 参数1: 明文(要加密的数据) 参数2: 密钥
System.out.println(DigestUtil.hmacSign("11111", "abc"));
System.out.println(DigestUtil.hmacSign("11111", "abd"));
// 解决数据安全性问题: 把明文加密--->密文 然后把明文和密文都交给易宝
// 易宝拿到数据后,把传过来的明文加密, 和传过来密文比较,如果相等数据没有被篡改 (商家与易宝加密时都用的是相同key)
}
}
<%@page language="java" contentType="text/html;charset=gbk"%>
<html>
<head>
<title>To YeePay Page
</title>
</head>
<body>
<form name="yeepay" action='https://www.yeepay.com/app-merchant-proxy/node' method='POST' target="_blank">
<input type='hidden' name='p0_Cmd' value='${requestScope.p0_Cmd}'>
<input type='hidden' name='p1_MerId' value='${requestScope.p1_MerId}'>
<input type='hidden' name='p2_Order' value='${requestScope.p2_Order}'>
<input type='hidden' name='p3_Amt' value='${requestScope.p3_Amt}'>
<input type='hidden' name='p4_Cur' value='${requestScope.p4_Cur}'>
<input type='hidden' name='p5_Pid' value='${requestScope.p5_Pid}'>
<input type='hidden' name='p6_Pcat' value='${requestScope.p6_Pcat}'>
<input type='hidden' name='p7_Pdesc' value='${requestScope.p7_Pdesc}'>
<input type='hidden' name='p8_Url' value='${requestScope.p8_Url}'>
<input type='hidden' name='p9_SAF' value='${requestScope.p9_SAF}'>
<input type='hidden' name='pa_MP' value='${requestScope.pa_MP}'>
<input type='hidden' name='pd_FrpId' value='${requestScope.pd_FrpId}'>
<input type="hidden" name="pr_NeedResponse" value="${requestScope.pr_NeedResponse}">
<input type='hidden' name='hmac' value='${requestScope.hmac}'>
<input type='submit' />
</form>
</body>
</html>
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有