package com.itheima.utils;
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;
import java.util.ResourceBundle;
public class PaymentUtil {
private static String encodingCharset = "UTF-8";
/**
* 生成hmac方法
*
* @param p0_Cmd
* 业务类型
* @param p1_MerId
* 商户编号
* @param p2_Order
* 商户订单号
* @param p3_Amt
* 支付金额
* @param p4_Cur
* 交易币种
* @param p5_Pid
* 商品名称
* @param p6_Pcat
* 商品种类
* @param p7_Pdesc
* 商品描述
* @param p8_Url
* 商户接收支付成功数据的地址
* @param p9_SAF
* 送货地址
* @param pa_MP
* 商户扩展信息
* @param pd_FrpId
* 银行编码
* @param pr_NeedResponse
* 应答机制
* @param keyValue
* 商户密钥
* @return
*/
public static String buildHmac(String p0_Cmd, String p1_MerId, String p2_Order, String p3_Amt, String p4_Cur,
String p5_Pid, String p6_Pcat, String p7_Pdesc, String p8_Url, String p9_SAF, String pa_MP, String pd_FrpId,
String pr_NeedResponse, String keyValue) {
StringBuilder sValue = new StringBuilder();
// 业务类型
sValue.append(p0_Cmd);
// 商户编号
sValue.append(p1_MerId);
// 商户订单号
sValue.append(p2_Order);
// 支付金额
sValue.append(p3_Amt);
// 交易币种
sValue.append(p4_Cur);
// 商品名称
sValue.append(p5_Pid);
// 商品种类
sValue.append(p6_Pcat);
// 商品描述
sValue.append(p7_Pdesc);
// 商户接收支付成功数据的地址
sValue.append(p8_Url);
// 送货地址
sValue.append(p9_SAF);
// 商户扩展信息
sValue.append(pa_MP);
// 银行编码
sValue.append(pd_FrpId);
// 应答机制
sValue.append(pr_NeedResponse);
return PaymentUtil.hmacSign(sValue.toString(), keyValue);
}
/**
* 返回校验hmac方法
*
* @param hmac
* 支付网关发来的加密验证码
* @param p1_MerId
* 商户编号
* @param r0_Cmd
* 业务类型
* @param r1_Code
* 支付结果
* @param r2_TrxId
* 易宝支付交易流水号
* @param r3_Amt
* 支付金额
* @param r4_Cur
* 交易币种
* @param r5_Pid
* 商品名称
* @param r6_Order
* 商户订单号
* @param r7_Uid
* 易宝支付会员ID
* @param r8_MP
* 商户扩展信息
* @param r9_BType
* 交易结果返回类型
* @param keyValue
* 密钥
* @return
*/
public static boolean verifyCallback(String hmac, String p1_MerId, String r0_Cmd, String r1_Code, String r2_TrxId,
String r3_Amt, String r4_Cur, String r5_Pid, String r6_Order, String r7_Uid, String r8_MP, String r9_BType,
String keyValue) {
StringBuilder sValue = new StringBuilder();
// 商户编号
sValue.append(p1_MerId);
// 业务类型
sValue.append(r0_Cmd);
// 支付结果
sValue.append(r1_Code);
// 易宝支付交易流水号
sValue.append(r2_TrxId);
// 支付金额
sValue.append(r3_Amt);
// 交易币种
sValue.append(r4_Cur);
// 商品名称
sValue.append(r5_Pid);
// 商户订单号
sValue.append(r6_Order);
// 易宝支付会员ID
sValue.append(r7_Uid);
// 商户扩展信息
sValue.append(r8_MP);
// 交易结果返回类型
sValue.append(r9_BType);
//我们公司服务器这边的hmac
String sNewString = PaymentUtil.hmacSign(sValue.toString(), keyValue);
return sNewString.equals(hmac);
}
/**
* @param aValue
* @param aKey
* @return
*/
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();
}
/**
*
* @param args
* @param key
* @return
*/
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));
}
/**
* 构建发送给易宝支付服务器的url地址
* @param frpId 交易渠道
* @param oid 订单编号
* @param amt 付款金额
* @return
*/
public static String buildUrl(String frpId,String oid,String amt){
// 商户发送给支付公司需要携带的数据
String p0_Cmd = "Buy";
String p1_MerId = ResourceBundle.getBundle("merchantInfo").getString("p1_MerId");
String p2_Order = oid;
String pd_FrpId = frpId;//支付通道编号,比如某个银行等等
String p3_Amt = amt;//支付金额
String p4_Cur = "CNY";
String p5_Pid = "";
String p6_Pcat = "";
String p7_Pdesc = "";
// 支付成功回调地址 ---- 第三方支付公司会访问、用户访问
// 第三方支付可以访问网址
String p8_Url = ResourceBundle.getBundle("merchantInfo").getString("responseURL");
String p9_SAF = "";
String pa_MP = "";
String pr_NeedResponse = "1";
// 加密hmac 需要密钥
String keyValue = ResourceBundle.getBundle("merchantInfo").getString("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);
//将上述字符串拼接成请求参数
StringBuffer sb = new StringBuffer("https://www.yeepay.com/app-merchant-proxy/node?");
sb.append("p0_Cmd=").append(p0_Cmd).append("&");
sb.append("p1_MerId=").append(p1_MerId).append("&");
sb.append("p2_Order=").append(p2_Order).append("&");
sb.append("p3_Amt=").append(p3_Amt).append("&");
sb.append("p4_Cur=").append(p4_Cur).append("&");
sb.append("p5_Pid=").append(p5_Pid).append("&");
sb.append("p6_Pcat=").append(p6_Pcat).append("&");
sb.append("p7_Pdesc=").append(p7_Pdesc).append("&");
sb.append("p8_Url=").append(p8_Url).append("&");
sb.append("p9_SAF=").append(p9_SAF).append("&");
sb.append("pa_MP=").append(pa_MP).appe
没有合适的资源?快使用搜索试试~ 我知道了~
2018年6月Javaweb网上商城开发最新完整源码
共573个文件
jpg:182个
gif:68个
class:68个
2星 需积分: 50 133 下载量 108 浏览量
2018-06-17
20:12:41
上传
评论 17
收藏 28.26MB RAR 举报
温馨提示
改代码为2018年6月最新的老师Javaweb网上商城开发最新完整源码,
资源推荐
资源详情
资源评论
收起资源包目录
2018年6月Javaweb网上商城开发最新完整源码 (573个子文件)
common.css.bak 20KB
dy.bmp 6KB
sh.bmp 6KB
hx.bmp 6KB
guangda.bmp 6KB
bj.bmp 6KB
icbc.bmp 6KB
shpd.bmp 6KB
ningbo.bmp 6KB
cmbc.bmp 6KB
abc.bmp 6KB
zx.bmp 6KB
gf.bmp 6KB
sfz.bmp 6KB
beijingnongshang.bmp 6KB
nanjing.bmp 6KB
post.bmp 6KB
bcc.bmp 6KB
ccb.bmp 6KB
cib.bmp 6KB
bc.bmp 6KB
bh.bmp 6KB
zheshang.bmp 6KB
cmb.bmp 6KB
pingan.bmp 6KB
OrderServlet.class 6KB
PaymentUtil.class 6KB
OrderServiceImpl.class 6KB
AddProductServlet.class 6KB
OrderDaoImpl.class 5KB
AdminOrderDaoImpl.class 5KB
UserServlet.class 5KB
AdminOrderServlet.class 4KB
ProductDaoImpl.class 4KB
AdminOrderServiceImpl.class 3KB
ProductServlet.class 3KB
CodeServlet.class 3KB
Order.class 3KB
ProductServiceImpl.class 3KB
CarServlet.class 3KB
Product.class 3KB
AdminProductDaoImpl.class 3KB
User.class 3KB
UserDaoImpl.class 3KB
MyRequest.class 3KB
AdminCategoryServlet.class 3KB
Car.class 3KB
UserServiceImpl.class 3KB
CheckLoginFilter.class 2KB
AutoLoginFilter.class 2KB
BaseServlet.class 2KB
PageBean.class 2KB
AdminProductServiceImpl.class 2KB
AdminProductServlet.class 2KB
OrderItem.class 2KB
CategoryServiceImpl.class 2KB
AdminCategoryServiceImpl.class 2KB
JsonUtil.class 2KB
MailUtils.class 2KB
UploadUtils.class 2KB
ContextFactory.class 2KB
AdminCategoryDaoImpl.class 2KB
CarItem.class 2KB
EncodingFilter.class 1KB
CookieUtil.class 1KB
JedisUtil.class 1KB
CategoryServlet.class 1KB
TransactionManager.class 1KB
CategoryDaoImpl.class 1KB
CarServiceImpl.class 1KB
C3P0Util.class 1KB
Category.class 1KB
Constant.class 973B
IOrderDao.class 902B
DateUtil.class 865B
IAdminOrderDao.class 802B
MailUtils$1.class 734B
Client.class 703B
IProductDao.class 702B
UUIDUtils.class 617B
StringUtil.class 573B
IOrderService.class 562B
IAdminOrderService.class 542B
IProductService.class 494B
IAdminProductDao.class 492B
IUserDao.class 390B
IAdminProductService.class 374B
IAdminCategoryDao.class 362B
IAdminCategoryService.class 314B
IUserService.class 298B
ICategoryDao.class 280B
ICarService.class 263B
ICategoryService.class 174B
.classpath 661B
org.eclipse.wst.common.component 476B
org.eclipse.wst.jsdt.ui.superType.container 49B
bootstrap.css 144KB
bootstrap.min.css 120KB
bootstrap.min.css 120KB
product.css 29KB
共 573 条
- 1
- 2
- 3
- 4
- 5
- 6
资源评论
- 小强测试2019-05-12没有提供sql文件无法运行
- taozi66882018-12-09没有说明,导入工程后运行不起来,有点坑了。
飘…
- 粉丝: 469
- 资源: 18
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功