package pay;
import java.net.InetAddress;
import java.net.URLEncoder;
import java.net.UnknownHostException;
import java.text.DecimalFormat;
import java.util.HashMap;
import java.util.Map;
import java.util.SortedMap;
import java.util.TreeMap;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import util.Const;
import util.MyNumberUtils;
import util.QRCodeGenerator;
import weixin.GetWxOrderno;
import weixin.RequestHandler;
import weixin.Sha1Util;
import weixin.TenpayUtil;
public class WxpayUtil{
/**
* 微信支付
* @param order_number:订单编号
* @param pay_money:订单金额
* @param openid:用户openid
* @param trade_type:交易类型:JSAPI、APP、SMALL、Native、H5
* @param request
* @return
*/
public static Map<String, Object> payOrderContrast(String order_number,Double pay_money,String openid,String trade_type,HttpServletRequest request){
Map<String, Object> map = new HashMap<String, Object>();
try {
DecimalFormat df=new DecimalFormat("0.00");//构造方法的字符格式这里如果小数不足2位,会以0补足.
String pay1= df.format(pay_money);//格式化金额
if(trade_type.equalsIgnoreCase(Const.wx_trade_type_jsapi)) {
map = wxJSAPIPay("xxx订单", order_number, pay1,openid,request);
}else if(trade_type.equalsIgnoreCase(Const.wx_trade_type_app)) {
map = wxAPPPay("xxx订单", order_number, pay1,request);
}else if(trade_type.equalsIgnoreCase(Const.wx_trade_type_small)) {
map = wxSmallPay("xxx订单", order_number, pay1, openid, request);
}else if(trade_type.equalsIgnoreCase(Const.wx_trade_type_h5)) {
map = wxH5Pay("xxx订单", order_number, pay1, request);
}else if(trade_type.equalsIgnoreCase(Const.wx_trade_type_native)) {
map = wxNativePay("xxx订单", order_number, pay1, request);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return map;
}
/**
* 微信公众号支付
* @param productName 订单名称(商品名称)
* @param orderNumber 订单号
* @param amount 总金额
* @param openid 用户openid
*
* @throws UnknownHostException
*/
public static Map<String, Object> wxJSAPIPay(String productName,String orderNumber,String amount,String openid,HttpServletRequest request) throws UnknownHostException{
//金额转化为分为单位
float sessionmoney = Float.parseFloat(amount);
String finalmoney = String.format("%.2f", sessionmoney);
finalmoney = finalmoney.replace(".", "");
String currTime = TenpayUtil.getCurrTime();
//8位日期
String strTime = currTime.substring(8, currTime.length());
//四位随机数
String strRandom = TenpayUtil.buildRandom(4) + "";
//10位序列号,可以自行调整。
String strReq = strTime + strRandom;
//商户号
String mch_id = Const.wx_partner;
//子商户号 非必输
//String sub_mch_id="";
//随机数
String nonce_str = strReq;
String body = orderNumber;
//附加数据
String attach = "";
//商户订单号
String out_trade_no = orderNumber;//order.getSn()+"|"+System.currentTimeMillis();//订单编号加时间戳
int intMoney = Integer.parseInt(finalmoney);
//总金额以分为单位,不带小数点
String total_fee = String.valueOf(intMoney);
//订单生成的机器 IP
String spbill_create_ip = InetAddress.getLocalHost().getHostAddress();
String notify_url = Const.wx_pay_notify_url;//微信异步通知地址
String trade_type = "JSAPI";
String sign_type = "HMAC-SHA256";
//对以下字段进行签名
SortedMap<String, Object> packageParams = new TreeMap<String, Object>();
packageParams.put("appid", Const.wx_appId);
packageParams.put("attach", attach);
packageParams.put("body", body);
packageParams.put("mch_id", mch_id);
packageParams.put("nonce_str", nonce_str);
packageParams.put("notify_url", notify_url);
packageParams.put("openid", openid);
packageParams.put("out_trade_no", out_trade_no);
packageParams.put("sign_type", sign_type);
packageParams.put("spbill_create_ip", spbill_create_ip);
packageParams.put("total_fee", total_fee);
packageParams.put("trade_type", trade_type);
HttpServletResponse response = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getResponse();
RequestHandler reqHandler = new RequestHandler(request, response);
reqHandler.init(Const.wx_appId, Const.wx_appSecret, Const.wx_partner_key);
String sign = reqHandler.createSign(packageParams,Const.wx_partner_key);//获取签名
System.out.println(sign+"===========sign");
String xml="<xml>"+
"<appid>"+Const.wx_appId+"</appid>"+
"<attach>"+attach+"</attach>"+
"<body><![CDATA["+body+"]]></body>"+
"<mch_id>"+mch_id+"</mch_id>"+
"<nonce_str>"+nonce_str+"</nonce_str>"+
"<notify_url>"+notify_url+"</notify_url>"+
"<openid>"+openid+"</openid>"+
"<out_trade_no>"+out_trade_no+"</out_trade_no>"+
"<sign>"+sign+"</sign>"+
"<sign_type>"+sign_type+"</sign_type>"+
"<spbill_create_ip>"+spbill_create_ip+"</spbill_create_ip>"+
"<total_fee>"+total_fee+"</total_fee>"+
"<trade_type>"+trade_type+"</trade_type>"+
"</xml>";
String createOrderURL = Const.wx_payURL;
String prepay_id="";
try {
prepay_id = GetWxOrderno.getPayNo(createOrderURL, xml);
if(prepay_id.equals("")){
/// 返回null,代表请求失败
return null;
}
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
//8位日期
strTime = currTime.substring(8, currTime.length());
//四位随机数
strRandom = TenpayUtil.buildRandom(4) + "";
//10位序列号,可以自行调整。
strReq = strTime + strRandom;
String timestamp = Sha1Util.getTimeStamp();
SortedMap<String, Object> hashMap = new TreeMap<String, Object>();
hashMap.put("appId", Const.wx_appId);
hashMap.put("timeStamp", timestamp);
hashMap.put("nonceStr", strReq);
hashMap.put("package", "prepay_id="+prepay_id);
hashMap.put("signType", sign_type);
sign = reqHandler.createSign(hashMap,Const.wx_partner_key);//获取签名
hashMap.put("paySign", sign);
System.out.println("hashMap===================="+hashMap);
return hashMap;
}
/**
* 微信app支付
* @param productName 订单名称(商品名称)
* @param orderNumber 订单号
* @param amount 总金额
*
* @throws UnknownHostException
*/
public static Map<String, Object> wxAPPPay(String productName,String orderNumber,String amount,HttpServletRequest request) throws UnknownHostException{
//金额转化为分为单位
float sessionmoney = Float.parseFloat(amount);
String finalmoney = String.format("%.2f", sessionmoney);
finalmoney = finalmoney.replace(".",
没有合适的资源?快使用搜索试试~ 我知道了~
微信支付源码包含JSAPI、APP、小程序、PC端扫码、H5
共50个文件
java:21个
class:21个
xml:2个
需积分: 47 20 下载量 40 浏览量
2020-11-18
10:46:36
上传
评论
收藏 106KB ZIP 举报
温馨提示
微信各种支付demo源码,包含JSAPI、APP、小程序、H5、PC端扫码支付,调用方法WxpayUtil.payOrderContrast
资源推荐
资源详情
资源评论
收起资源包目录
WxPayDemo.zip (50个子文件)
WxPayDemo
pom.xml 19KB
target
test-classes
m2e-wtp
web-resources
META-INF
maven
cn.lamplet
shop
pom.xml 19KB
pom.properties 200B
MANIFEST.MF 115B
classes
weixin
WeixinConst.class 1KB
Sha1Util.class 3KB
http
HttpClientConnectionManager.class 3KB
HttpResponse.class 1KB
MySSLSocketFactory.class 2KB
HttpResultType.class 1015B
TrustAnyTrustManager.class 883B
HttpRequest.class 3KB
GetWxOrderno.class 9KB
TenpayUtil.class 3KB
RequestHandler.class 8KB
MD5Util.class 2KB
util
Const.class 1KB
MyNumberUtils.class 6KB
QRCodeGenerator.class 2KB
DateUtil.class 10KB
PublicUtil.class 1KB
MyCollectionUtils.class 5KB
PathUtil.class 4KB
MyStringUtils.class 18KB
pay
WxpayUtil.class 16KB
.settings
org.eclipse.m2e.core.prefs 90B
org.eclipse.jdt.core.prefs 429B
src
test
resources
java
main
resources
java
weixin
Sha1Util.java 2KB
WeixinConst.java 2KB
GetWxOrderno.java 8KB
TenpayUtil.java 4KB
http
HttpResponse.java 2KB
HttpRequest.java 3KB
HttpResultType.java 700B
HttpClientConnectionManager.java 2KB
TrustAnyTrustManager.java 587B
MySSLSocketFactory.java 1KB
MD5Util.java 1KB
RequestHandler.java 9KB
util
PathUtil.java 4KB
PublicUtil.java 822B
DateUtil.java 15KB
MyNumberUtils.java 7KB
Const.java 2KB
MyStringUtils.java 27KB
QRCodeGenerator.java 1008B
MyCollectionUtils.java 4KB
pay
WxpayUtil.java 31KB
.project 767B
.classpath 1KB
共 50 条
- 1
资源评论
对象至上
- 粉丝: 1
- 资源: 11
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功