Commit 15d19821 authored by cy's avatar cy

微信小程序支付

parent ead6e6b6
...@@ -31,4 +31,7 @@ public class PayPageDto { ...@@ -31,4 +31,7 @@ public class PayPageDto {
*/ */
@ApiModelProperty(value = "支付类型 1:支付宝 2:微信 3:充值卡", name = "payType") @ApiModelProperty(value = "支付类型 1:支付宝 2:微信 3:充值卡", name = "payType")
private Integer payType; private Integer payType;
@ApiModelProperty(value = "微信用户的openid",name="openid")
private String openid;
} }
...@@ -8,6 +8,7 @@ import javax.servlet.http.HttpServletRequest; ...@@ -8,6 +8,7 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.io.IOException; import java.io.IOException;
import java.util.Map; import java.util.Map;
import java.util.SortedMap;
/** /**
...@@ -15,15 +16,32 @@ import java.util.Map; ...@@ -15,15 +16,32 @@ import java.util.Map;
*/ */
public interface TestWxPayService { public interface TestWxPayService {
/** /**
* 测试-微信支付 * pc端微信支付
* @Param * @Param
* @return * @return
*/ */
R<Map<String, String>> wxPay(PayPageDto payPageDto, HttpServletResponse response); R<Map<String, String>> wxPay(PayPageDto payPageDto, HttpServletResponse response);
/***
* h5微信支付
* @param payPageDto
* @param request
* @param response
* @return
* @throws JsonProcessingException
*/
R<String> h5WxPay(PayPageDto payPageDto,HttpServletRequest request, HttpServletResponse response) throws JsonProcessingException; R<String> h5WxPay(PayPageDto payPageDto,HttpServletRequest request, HttpServletResponse response) throws JsonProcessingException;
R<String> WxPayApplets(PayPageDto payPageDto,HttpServletRequest request, HttpServletResponse response) throws JsonProcessingException; /***
* 小程序微信支付
* @param payPageDto
* @param request
* @param response
* @return
* @throws JsonProcessingException
*/
R<SortedMap<String, String>> WxPayApplets(PayPageDto payPageDto, HttpServletRequest request, HttpServletResponse response) throws JsonProcessingException;
/*** /***
*支付成功回调 *支付成功回调
* @param request * @param request
...@@ -32,6 +50,13 @@ public interface TestWxPayService { ...@@ -32,6 +50,13 @@ public interface TestWxPayService {
*/ */
void wxPayCallBack(HttpServletRequest request, HttpServletResponse response) throws Exception; void wxPayCallBack(HttpServletRequest request, HttpServletResponse response) throws Exception;
/***
* 订单状态查询
* @param out_trade_no
* @return
* @throws Exception
*/
R<Map<String,String>> wxQuery(String out_trade_no) throws Exception; R<Map<String,String>> wxQuery(String out_trade_no) throws Exception;
} }
...@@ -10,11 +10,9 @@ import cn.wisenergy.service.app.AliPayService; ...@@ -10,11 +10,9 @@ import cn.wisenergy.service.app.AliPayService;
import cn.wisenergy.service.app.UserLimitService; import cn.wisenergy.service.app.UserLimitService;
import cn.wisenergy.service.common.Common; import cn.wisenergy.service.common.Common;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient; import com.alipay.api.AlipayClient;
import com.alipay.api.AlipayResponse; import com.alipay.api.AlipayResponse;
import com.alipay.api.DefaultAlipayClient; import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.domain.AlipayTradeWapPayModel;
import com.alipay.api.internal.util.AlipaySignature; import com.alipay.api.internal.util.AlipaySignature;
import com.alipay.api.request.AlipayTradePagePayRequest; import com.alipay.api.request.AlipayTradePagePayRequest;
import com.alipay.api.request.AlipayTradeWapPayRequest; import com.alipay.api.request.AlipayTradeWapPayRequest;
...@@ -24,15 +22,11 @@ import lombok.extern.slf4j.Slf4j; ...@@ -24,15 +22,11 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import springfox.documentation.schema.Entry;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter; import java.io.PrintWriter;
import java.math.BigDecimal;
import java.util.HashMap; import java.util.HashMap;
import java.util.Iterator;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
...@@ -61,10 +55,6 @@ public class AliPayServiceImpl implements AliPayService { ...@@ -61,10 +55,6 @@ public class AliPayServiceImpl implements AliPayService {
/*** /***
* pc端支付宝支付 * pc端支付宝支付
* @param payPageDto
* @param request
* @param httpResponse
* @return
*/ */
@Override @Override
public R<String> doPost(PayPageDto payPageDto, HttpServletRequest request, HttpServletResponse httpResponse) { public R<String> doPost(PayPageDto payPageDto, HttpServletRequest request, HttpServletResponse httpResponse) {
...@@ -75,12 +65,12 @@ public class AliPayServiceImpl implements AliPayService { ...@@ -75,12 +65,12 @@ public class AliPayServiceImpl implements AliPayService {
AlipayClient alipayClient = new DefaultAlipayClient(Common.PAY_URL, APP_ID, PRIVATE_KEY, "json", CHARSET, ALIPAY_PUBLIC_KEY, "RSA2"); AlipayClient alipayClient = new DefaultAlipayClient(Common.PAY_URL, APP_ID, PRIVATE_KEY, "json", CHARSET, ALIPAY_PUBLIC_KEY, "RSA2");
AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest(); AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();
String tradeNo = "21" + System.currentTimeMillis(); String tradeNo = "21" + System.currentTimeMillis();
Double amount = 0.01; double amount = 0.01;
//支付成功跳转地址 //支付成功跳转地址
alipayRequest.setReturnUrl(Common.RETURN_URL_PC); alipayRequest.setReturnUrl(Common.RETURN_URL_PC);
//支付回调地址 //支付回调地址
alipayRequest.setNotifyUrl(Common.NOTIFY_URL); alipayRequest.setNotifyUrl(Common.NOTIFY_URL);
//alipayRequest.setNotifyUrl(" http://iub3mv.natappfree.cc/pay/aliPayCallBack.do"); //alipayRequest.setNotifyUrl("http://bga7hc.natappfree.cc/pay/aliPayCallBack.do");
alipayRequest.setBizContent("{" + alipayRequest.setBizContent("{" +
"\"out_trade_no\":\"" + tradeNo + "\"," + "\"out_trade_no\":\"" + tradeNo + "\"," +
"\"total_amount\":" + amount + "," + "\"total_amount\":" + amount + "," +
...@@ -88,7 +78,7 @@ public class AliPayServiceImpl implements AliPayService { ...@@ -88,7 +78,7 @@ public class AliPayServiceImpl implements AliPayService {
"\"body\":\"充值\"," + "\"body\":\"充值\"," +
"\"product_code\":\"FAST_INSTANT_TRADE_PAY\"" + "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"" +
"}"); "}");
String form = ""; String form;
//调用SDK生成表单 //调用SDK生成表单
try { try {
AlipayTradePagePayResponse response = alipayClient.pageExecute(alipayRequest); AlipayTradePagePayResponse response = alipayClient.pageExecute(alipayRequest);
...@@ -100,7 +90,6 @@ public class AliPayServiceImpl implements AliPayService { ...@@ -100,7 +90,6 @@ public class AliPayServiceImpl implements AliPayService {
httpResponse.getWriter().flush(); httpResponse.getWriter().flush();
httpResponse.getWriter().close(); httpResponse.getWriter().close();
if (response.isSuccess()) { if (response.isSuccess()) {
System.out.println("调用成功");
//生成预支付订单,充值结果设为失败(result=1) //生成预支付订单,充值结果设为失败(result=1)
PayRecord payRecord = new PayRecord(); PayRecord payRecord = new PayRecord();
payRecord.setMoney(payPageDto.getTotal()); payRecord.setMoney(payPageDto.getTotal());
...@@ -120,10 +109,6 @@ public class AliPayServiceImpl implements AliPayService { ...@@ -120,10 +109,6 @@ public class AliPayServiceImpl implements AliPayService {
/*** /***
* 手机网页支付宝支付 * 手机网页支付宝支付
* @param payPageDto
* @param request
* @param httpResponse
* @return
*/ */
@Override @Override
public R<String> wapAliPay(PayPageDto payPageDto, HttpServletRequest request, HttpServletResponse httpResponse) { public R<String> wapAliPay(PayPageDto payPageDto, HttpServletRequest request, HttpServletResponse httpResponse) {
...@@ -133,7 +118,7 @@ public class AliPayServiceImpl implements AliPayService { ...@@ -133,7 +118,7 @@ public class AliPayServiceImpl implements AliPayService {
AlipayClient alipayClient = new DefaultAlipayClient(Common.PAY_URL, APP_ID, PRIVATE_KEY, "json", CHARSET, ALIPAY_PUBLIC_KEY, "RSA2"); AlipayClient alipayClient = new DefaultAlipayClient(Common.PAY_URL, APP_ID, PRIVATE_KEY, "json", CHARSET, ALIPAY_PUBLIC_KEY, "RSA2");
AlipayTradeWapPayRequest alipayRequest = new AlipayTradeWapPayRequest(); AlipayTradeWapPayRequest alipayRequest = new AlipayTradeWapPayRequest();
String tradeNo = "21" + System.currentTimeMillis(); String tradeNo = "21" + System.currentTimeMillis();
Double amount = 0.01; double amount = 0.01;
//支付成功跳转地址 //支付成功跳转地址
alipayRequest.setReturnUrl(Common.RETURN_URL_WAP); alipayRequest.setReturnUrl(Common.RETURN_URL_WAP);
//支付后回调地址 //支付后回调地址
...@@ -146,7 +131,7 @@ public class AliPayServiceImpl implements AliPayService { ...@@ -146,7 +131,7 @@ public class AliPayServiceImpl implements AliPayService {
"\"body\":\"充值\"," + "\"body\":\"充值\"," +
"\"product_code\":\"QUICK_WAP_WAY\"" + "\"product_code\":\"QUICK_WAP_WAY\"" +
"}"); "}");
String form = ""; String form;
//调用SDK生成表单 //调用SDK生成表单
try { try {
AlipayResponse response = alipayClient.pageExecute(alipayRequest); AlipayResponse response = alipayClient.pageExecute(alipayRequest);
...@@ -185,9 +170,6 @@ public class AliPayServiceImpl implements AliPayService { ...@@ -185,9 +170,6 @@ public class AliPayServiceImpl implements AliPayService {
/*** /***
* 支付后回调方法 * 支付后回调方法
* @param response
* @param request
* @throws Exception
*/ */
@Override @Override
public void aliPayCallBack(HttpServletResponse response, HttpServletRequest request) throws Exception { public void aliPayCallBack(HttpServletResponse response, HttpServletRequest request) throws Exception {
...@@ -233,11 +215,9 @@ public class AliPayServiceImpl implements AliPayService { ...@@ -233,11 +215,9 @@ public class AliPayServiceImpl implements AliPayService {
/*** /***
* 将request中的参数转换成Map * 将request中的参数转换成Map
* @param request
* @return
*/ */
private static Map<String, String> convertRequestParamsToMap(HttpServletRequest request) { private static Map<String, String> convertRequestParamsToMap(HttpServletRequest request) {
Map<String, String> retMap = new HashMap<String, String>(); Map<String, String> retMap = new HashMap<>();
Set<Map.Entry<String, String[]>> entries = request.getParameterMap().entrySet(); Set<Map.Entry<String, String[]>> entries = request.getParameterMap().entrySet();
for (Map.Entry<String, String[]> entry : entries) { for (Map.Entry<String, String[]> entry : entries) {
......
...@@ -10,21 +10,23 @@ import cn.wisenergy.service.app.UserLimitService; ...@@ -10,21 +10,23 @@ import cn.wisenergy.service.app.UserLimitService;
import cn.wisenergy.service.util.MapToXmlUtils; import cn.wisenergy.service.util.MapToXmlUtils;
import cn.wisenergy.service.util.WxPayUtil; import cn.wisenergy.service.util.WxPayUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.fasterxml.jackson.core.JsonProcessingException;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.RandomStringUtils; import org.apache.commons.lang.RandomStringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.io.*; import java.io.*;
import java.net.HttpURLConnection; import java.net.HttpURLConnection;
import java.net.URL; import java.net.URL;
import java.net.URLEncoder; import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.*; import java.util.*;
import static com.baomidou.mybatisplus.core.toolkit.Constants.MD5;
/** /**
* @author chengyan * @author chengyan
...@@ -33,49 +35,51 @@ import java.util.*; ...@@ -33,49 +35,51 @@ import java.util.*;
@Slf4j @Slf4j
public class TestWxPayServiceImpl implements TestWxPayService { public class TestWxPayServiceImpl implements TestWxPayService {
//统一下单接口链接 //统一下单接口链接
public static String basePath = "https://api.mch.weixin.qq.com/pay/unifiedorder"; public static String unifiedOrderUrl = "https://api.mch.weixin.qq.com/pay/unifiedorder";
@Autowired @Autowired
private UserLimitService userLimitService; private UserLimitService userLimitService;
@Autowired @Autowired
private PayRecordMapper payRecordMapper; private PayRecordMapper payRecordMapper;
/*@Autowired
private WxPayService wxService; //上边依赖第三方库提供的*/ //appid
@Value("${wxPay.APP_ID}")
private String appid;
//商户id
@Value("${wxPay.MCH_ID}")
private String mchid;
//商户id
@Value("${wxPay.PRIVATE_KEY}")
private String key;
//小程序appid
@Value("${wxPay.Applets_ID}")
private String Applets_ID;
/*** /***
* pc微信支付总流程 * pc微信支付总流程
* @param payPageDto
* @param response
* @return
*/ */
@Override @Override
public R<Map<String, String>> wxPay(PayPageDto payPageDto, HttpServletResponse response) { public R<Map<String, String>> wxPay(PayPageDto payPageDto, HttpServletResponse response) {
if (null == payPageDto || null == payPageDto.getTotal()) { if (null == payPageDto || null == payPageDto.getTotal()) {
return R.error("入参不能为空"); return R.error("入参不能为空");
} }
ServletOutputStream sos = null;
String tradeNo = "21" + System.currentTimeMillis(); String tradeNo = "21" + System.currentTimeMillis();
String product_id = "10" + System.currentTimeMillis(); String product_id = "10" + System.currentTimeMillis();
String time_expire=WxPayUtil.getOrderExpireTime(2*60*1000L); String time_expire=WxPayUtil.getOrderExpireTime(2*60*1000L);
//生成预支付订单,充值结果设为失败(result=1) //生成预支付订单,充值结果设为失败(result=1)
try { try {
//生成【统一下单API】所需参数的接口 //生成【统一下单API】所需参数的接口
String orderInfo = WxPayUtil.createOrderInfo(tradeNo, product_id,time_expire, appid, mchid, key);
String orderInfo = WxPayUtil.createOrderInfo(payPageDto, tradeNo, product_id,time_expire);
System.out.println(orderInfo); System.out.println(orderInfo);
//调用统一下单接口 //调用统一下单接口
Map<String, String> map = unifiedOrder(orderInfo); Map<String, String> map = unifiedOrder(unifiedOrderUrl,orderInfo);
//返回信息
String return_msg = map.get("return_msg");
//状态码
String return_code = map.get("return_code");
//业务结果
String result_code = map.get("result_code");
String code_url = map.get("code_url"); String code_url = map.get("code_url");
System.out.println("return_msg:" + return_msg); log.info("支付返回信息:", map.get("return_msg"));
System.out.println("return_code:" + return_code); if (map!=null && "SUCCESS".equals(map.get("return_code")) && "SUCCESS".equals(map.get("result_code"))) {
log.info("支付返回信息:" + return_msg);
if (null != map && "SUCCESS".equals(return_code) && "SUCCESS".equals(result_code)) {
PayRecord payRecord = new PayRecord(); PayRecord payRecord = new PayRecord();
payRecord.setMoney(payPageDto.getTotal()); payRecord.setMoney(payPageDto.getTotal());
payRecord.setResult(1); payRecord.setResult(1);
...@@ -98,36 +102,24 @@ public class TestWxPayServiceImpl implements TestWxPayService { ...@@ -98,36 +102,24 @@ public class TestWxPayServiceImpl implements TestWxPayService {
/*** /***
* h5微信支付总流程 * h5微信支付总流程
* @param payPageDto
* @param request
* @param response
* @return
* @throws JsonProcessingException
*/ */
@Override @Override
public R<String> h5WxPay(PayPageDto payPageDto, HttpServletRequest request, HttpServletResponse response) { public R<String> h5WxPay(PayPageDto payPageDto, HttpServletRequest request, HttpServletResponse response) {
if (null == payPageDto || null == payPageDto.getTotal()) { if (null == payPageDto || null == payPageDto.getTotal()) {
return R.error("入参不能为空"); return R.error("入参不能为空");
} }
ServletOutputStream sos = null;
String tradeNo = "21" + System.currentTimeMillis(); String tradeNo = "21" + System.currentTimeMillis();
//生成预支付订单,充值结果设为失败(result=1) //生成预支付订单,充值结果设为失败(result=1)
try { try {
//生成【统一下单API】所需参数的接口 //生成【统一下单API】所需参数的接口
String orderInfo = WxPayUtil.createOrderInfoH5(payPageDto, tradeNo, request); String orderInfo = WxPayUtil.createOrderInfoH5(tradeNo, request, appid, mchid, key);
System.out.println(orderInfo); System.out.println(orderInfo);
//调用统一下单接口 //调用统一下单接口
Map<String, String> map = unifiedOrder(orderInfo); Map<String, String> map = unifiedOrder(unifiedOrderUrl,orderInfo);
//返回信息 String urlString = URLEncoder.encode("http://111.203.232.171:8999/#/history", "GBK");
String return_msg = map.get("return_msg");
//状态码
String return_code = map.get("return_code");
//业务结果
String result_code = map.get("result_code");
String urlString = URLEncoder.encode("http://www.baidu.com", "GBK");
String mweb_url = map.get("mweb_url") + "&redirect_url=" + urlString; String mweb_url = map.get("mweb_url") + "&redirect_url=" + urlString;
log.info("支付返回信息:", return_msg, "状态码:", return_code); log.info("返回信息:", map.get("return_msg"));
if (null != map && "SUCCESS".equals(return_code) && "SUCCESS".equals(result_code)) { if (map!=null && "SUCCESS".equals(map.get("return_code")) && "SUCCESS".equals(map.get("result_code"))) {
PayRecord payRecord = new PayRecord(); PayRecord payRecord = new PayRecord();
payRecord.setMoney(payPageDto.getTotal()); payRecord.setMoney(payPageDto.getTotal());
payRecord.setResult(1); payRecord.setResult(1);
...@@ -136,7 +128,6 @@ public class TestWxPayServiceImpl implements TestWxPayService { ...@@ -136,7 +128,6 @@ public class TestWxPayServiceImpl implements TestWxPayService {
payRecord.setUserId(payPageDto.getUserId()); payRecord.setUserId(payPageDto.getUserId());
payRecordMapper.add(payRecord); payRecordMapper.add(payRecord);
} }
System.out.println("mweb_url:" + mweb_url);
return R.ok("0", mweb_url); return R.ok("0", mweb_url);
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
...@@ -145,60 +136,49 @@ public class TestWxPayServiceImpl implements TestWxPayService { ...@@ -145,60 +136,49 @@ public class TestWxPayServiceImpl implements TestWxPayService {
} }
/*** /***
* 小程序微信支付总流程 * 小程序微信支付总流程
* @param payPageDto
* @param request
* @param response
* @return
* @throws JsonProcessingException
*/ */
@Override @Override
public R<String> WxPayApplets(PayPageDto payPageDto, HttpServletRequest request, HttpServletResponse response) { public R<SortedMap<String, String>> WxPayApplets(PayPageDto payPageDto, HttpServletRequest request, HttpServletResponse response) {
if (null == payPageDto || null == payPageDto.getTotal()) { if (null == payPageDto || null == payPageDto.getTotal() || null == payPageDto.getOpenid()) {
return R.error("入参不能为空"); return R.error("入参不能为空");
} }
SortedMap<String, String> mapParams = new TreeMap<>();
//随机字符串 //随机字符串
String nonce_str = RandomStringUtils.randomAlphanumeric(16); String nonce_str = RandomStringUtils.randomAlphanumeric(16);
String tradeNo = "21" + System.currentTimeMillis(); String tradeNo = "21" + System.currentTimeMillis();
//生成预支付订单,充值结果设为失败(result=1) //生成预支付订单,充值结果设为失败(result=1)
try { try {
//生成【统一下单API】所需参数的接口 //生成【统一下单API】所需参数的接口
String orderInfo = WxPayUtil.createOrderInfoWx(payPageDto, tradeNo, request, nonce_str); String orderInfo = WxPayUtil.createOrderInfoWx(payPageDto, tradeNo, nonce_str, Applets_ID, mchid, key);
System.out.println(orderInfo); System.out.println(orderInfo);
//调用统一下单接口 //调用统一下单接口
Map<String, String> map = unifiedOrder(orderInfo); Map<String, String> map = unifiedOrder(unifiedOrderUrl,orderInfo);
String return_msg = map.get("return_msg");//返回信息 String return_msg = map.get("return_msg");
String return_code = map.get("return_code");//状态码
String result_code = map.get("result_code");//业务结果
log.info("支付返回信息:", return_msg); log.info("支付返回信息:", return_msg);
if (null != map && "SUCCESS".equals(return_code) && "SUCCESS".equals(result_code)) { if ("SUCCESS".equals(map.get("return_code")) && "SUCCESS".equals(map.get("result_code"))) {
PayRecord payRecord = new PayRecord(); PayRecord record = new PayRecord();
payRecord.setMoney(payPageDto.getTotal()); record.setMoney(payPageDto.getTotal());
payRecord.setResult(1); record.setResult(1);
payRecord.setTradeNo(tradeNo); record.setTradeNo(tradeNo);
payRecord.setType(payPageDto.getPayType()); record.setType(payPageDto.getPayType());
payRecord.setUserId(payPageDto.getUserId()); record.setUserId(payPageDto.getUserId());
payRecordMapper.add(payRecord); payRecordMapper.add(record);
SortedMap<String, String> mapParams = new TreeMap<String, String>(); //返回的预付单信息,小程序端使用
mapParams.put("return_code", return_code);
mapParams.put("return_msg", return_msg);
//返回的预付单信息 小程序端使用
String prepay_id = map.get("prepay_id"); String prepay_id = map.get("prepay_id");
mapParams.put("appId", Applets_ID);
mapParams.put("nonceStr", nonce_str); mapParams.put("nonceStr", nonce_str);
mapParams.put("package", "prepay_id=" + prepay_id); mapParams.put("package", "prepay_id=" + prepay_id);
Long timeStamp = new Date().getTime(); Long timeStamp = new Date().getTime();
//这边要将返回的时间戳转化成字符串,不然小程序端调用wx.requestPayment方法会报签名错误 //这边要将返回的时间戳转化成字符串,不然小程序端调用wx.requestPayment方法会报签名错误
mapParams.put("timeStamp", timeStamp + ""); mapParams.put("timeStamp", timeStamp + "");
String characterEncoding = "UTF-8"; mapParams.put("signType", MD5);
String paySign = WxPayUtil.createSign(characterEncoding, mapParams); //二次签名
String paySign = WxPayUtil.createSign(mapParams,key);
mapParams.put("paySign", paySign); mapParams.put("paySign", paySign);
mapParams.put("appid", "");
} }
System.out.println("mweb_url:"); return R.ok("0",mapParams);
return R.ok("0");
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
return R.error("获取mweb_url失败"); return R.error("获取mweb_url失败");
...@@ -208,39 +188,32 @@ public class TestWxPayServiceImpl implements TestWxPayService { ...@@ -208,39 +188,32 @@ public class TestWxPayServiceImpl implements TestWxPayService {
/*** /***
* 微信统一下单 * 微信统一下单
* @param info
* @return
* @throws Exception
*/ */
public Map<String, String> unifiedOrder(String info) throws Exception { public Map<String, String> unifiedOrder(String url,String info) throws Exception {
HttpURLConnection conn = (HttpURLConnection) new URL(basePath).openConnection(); HttpURLConnection conn = (HttpURLConnection) new URL(url).openConnection();
//加入数据 //加入数据
conn.setRequestMethod("POST"); conn.setRequestMethod("POST");
conn.setDoOutput(true); conn.setDoOutput(true);
BufferedOutputStream buffOutStr = new BufferedOutputStream(conn.getOutputStream()); BufferedOutputStream buffOutStr = new BufferedOutputStream(conn.getOutputStream());
buffOutStr.write(info.getBytes("UTF-8")); buffOutStr.write(info.getBytes(StandardCharsets.UTF_8));
buffOutStr.flush(); buffOutStr.flush();
buffOutStr.close(); buffOutStr.close();
//获取输入流 //获取输入流
BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8")); BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), StandardCharsets.UTF_8));
String line = null; String line;
StringBuffer sb = new StringBuffer(); StringBuilder sb = new StringBuilder();
while ((line = reader.readLine()) != null) { while ((line = reader.readLine()) != null) {
sb.append(line); sb.append(line);
} }
Map<String, String> map = MapToXmlUtils.xmlToMap(sb.toString()); return MapToXmlUtils.xmlToMap(sb.toString());
return map;
} }
/*** /***
* 微信支付成功回调 * 微信支付成功回调
* @param request
* @param response
* @return
*/ */
@Override @Override
public void wxPayCallBack(HttpServletRequest request, HttpServletResponse response) throws Exception { public void wxPayCallBack(HttpServletRequest request, HttpServletResponse response) throws Exception {
...@@ -249,28 +222,16 @@ public class TestWxPayServiceImpl implements TestWxPayService { ...@@ -249,28 +222,16 @@ public class TestWxPayServiceImpl implements TestWxPayService {
InputStream inStream = request.getInputStream(); InputStream inStream = request.getInputStream();
ByteArrayOutputStream outSteam = new ByteArrayOutputStream(); ByteArrayOutputStream outSteam = new ByteArrayOutputStream();
byte[] buffer = new byte[1024]; byte[] buffer = new byte[1024];
int len = 0; int len;
while ((len = inStream.read(buffer)) != -1) { while ((len = inStream.read(buffer)) != -1) {
outSteam.write(buffer, 0, len); outSteam.write(buffer, 0, len);
} }
outSteam.close(); outSteam.close();
inStream.close(); inStream.close();
// 获取微信调用我们notify_url的返回信息 // 获取微信调用我们notify_url的返回信息
String result = new String(outSteam.toByteArray(), "utf-8"); String result = new String(outSteam.toByteArray(), StandardCharsets.UTF_8);
Map<String, String> map = MapToXmlUtils.xmlToMap(result); Map<String, String> map = MapToXmlUtils.xmlToMap(result);
//过滤空 设置 TreeMap String resXml;
SortedMap<String, String> packageParams = new TreeMap<String, String>();
Iterator it = map.keySet().iterator();
while (it.hasNext()) {
String parameter = (String) it.next();
String parameterValue = map.get(parameter);
String v = "";
if (null != parameterValue) {
v = parameterValue.trim();
}
packageParams.put(parameter, v);
}
String resXml = "";
if (map.get("result_code").equalsIgnoreCase("SUCCESS")) { if (map.get("result_code").equalsIgnoreCase("SUCCESS")) {
//返回成功后修改订单充值结果为0,保存查询次数 //返回成功后修改订单充值结果为0,保存查询次数
QueryWrapper<PayRecord> queryWrapper = new QueryWrapper<>(); QueryWrapper<PayRecord> queryWrapper = new QueryWrapper<>();
...@@ -306,8 +267,11 @@ public class TestWxPayServiceImpl implements TestWxPayService { ...@@ -306,8 +267,11 @@ public class TestWxPayServiceImpl implements TestWxPayService {
} }
} }
/***
* 订单状态查询
*/
@Override @Override
public R<Map<String,String>> wxQuery(String out_trade_no) throws Exception { public R<Map<String,String>> wxQuery(String out_trade_no){
QueryWrapper<PayRecord> queryWrapper = new QueryWrapper<>(); QueryWrapper<PayRecord> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("trade_no",out_trade_no); queryWrapper.eq("trade_no",out_trade_no);
PayRecord payRecord = payRecordMapper.selectOne(queryWrapper); PayRecord payRecord = payRecordMapper.selectOne(queryWrapper);
...@@ -321,4 +285,5 @@ public class TestWxPayServiceImpl implements TestWxPayService { ...@@ -321,4 +285,5 @@ public class TestWxPayServiceImpl implements TestWxPayService {
return R.error("支付失败"); return R.error("支付失败");
} }
} }
} }
package cn.wisenergy.service.util; package cn.wisenergy.service.util;
import com.itextpdf.text.DocumentException;
import org.apache.poi.util.DocumentHelper;
import org.w3c.dom.Node; import org.w3c.dom.Node;
import org.w3c.dom.NodeList; import org.w3c.dom.NodeList;
import javax.management.Attribute;
import javax.swing.text.Document;
import javax.swing.text.Element;
import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys; import javax.xml.transform.OutputKeys;
...@@ -18,78 +13,19 @@ import javax.xml.transform.stream.StreamResult; ...@@ -18,78 +13,19 @@ import javax.xml.transform.stream.StreamResult;
import java.io.ByteArrayInputStream; import java.io.ByteArrayInputStream;
import java.io.InputStream; import java.io.InputStream;
import java.io.StringWriter; import java.io.StringWriter;
import java.nio.charset.StandardCharsets;
import java.util.*; import java.util.*;
public class MapToXmlUtils { public class MapToXmlUtils {
/**
* map 对象转换成 xml 字符串
**//*
public static String mapToXml(Map map) throws Exception{
if (null == map) return null;
System.out.println("转换前的Map对象数据:" + map.toString());
StringBuffer sb = new StringBuffer();
*//** 添加xml 的公共头信息 *//*
sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
mapToXmlHelp(map, sb);
System.out.println("将map转成xml后的数据:" + sb.toString());
return sb.toString();
}
*//**
* 转换帮助方法
**//*
private static void mapToXmlHelp(Map map, StringBuffer str) throws Exception{
Set set = map.keySet();
*//** 遍历key *//*
for (Iterator it = set.iterator(); it.hasNext();) {
String key = (String) it.next();
Object value = map.get(key);
if (null == value)
value = "";
*//** 如果对象是集合 *//*
if (value.getClass().getName().equals("java.util.ArrayList")) {
ArrayList list = (ArrayList) map.get(key);
str.append("<" + key + ">");
for (int i = 0; i < list.size(); i++) {
HashMap hm = (HashMap) list.get(i);
mapToXmlHelp(hm, str);
}
str.append("</" + key + ">");
*//** 如果该集合对象的长度只有1,那么默认重复添加集合下节点 *//*
if (null !=list && !list.isEmpty() && list.size() <= 1) {
str.append("<" + key + ">");
for (int i = 0; i < list.size(); i++) {
HashMap hm = (HashMap) list.get(i);
mapToXmlHelp(hm, str);
}
str.append("</" + key + ">");
}
*//** 对象非集合时 *//*
} else {
if (value instanceof HashMap) {
str.append("<" + key + ">");
mapToXmlHelp((HashMap) value, str);
str.append("</" + key + ">");
} else {
str.append("<" + key + ">" + value + "</" + key + ">");
}
}
}
}*/
/** /**
* XML格式字符串转换为Map * XML格式字符串转换为Map
*
* @param strXML XML字符串
* @return XML数据转换后的Map
* @throws Exception
*/ */
public static Map<String, String> xmlToMap(String strXML) throws Exception { public static Map<String, String> xmlToMap(String strXML) throws Exception {
try { Map<String, String> data = new HashMap<>();
Map<String, String> data = new HashMap<String, String>();
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder(); DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
InputStream stream = new ByteArrayInputStream(strXML.getBytes("UTF-8")); InputStream stream = new ByteArrayInputStream(strXML.getBytes(StandardCharsets.UTF_8));
org.w3c.dom.Document doc = documentBuilder.parse(stream); org.w3c.dom.Document doc = documentBuilder.parse(stream);
doc.getDocumentElement().normalize(); doc.getDocumentElement().normalize();
NodeList nodeList = doc.getDocumentElement().getChildNodes(); NodeList nodeList = doc.getDocumentElement().getChildNodes();
...@@ -102,22 +38,14 @@ public class MapToXmlUtils { ...@@ -102,22 +38,14 @@ public class MapToXmlUtils {
} }
try { try {
stream.close(); stream.close();
} catch (Exception ex) { } catch (Exception ignored) {
// do nothing
} }
return data; return data;
} catch (Exception ex) {
throw ex;
}
} }
/** /**
* 将Map转换为XML格式的字符串 * 将Map转换为XML格式的字符串
*
* @param data Map类型数据
* @return XML格式的字符串
* @throws Exception
*/ */
public static String mapToXml(Map<String, String> data) throws Exception { public static String mapToXml(Map<String, String> data) throws Exception {
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
...@@ -147,7 +75,7 @@ public class MapToXmlUtils { ...@@ -147,7 +75,7 @@ public class MapToXmlUtils {
try { try {
writer.close(); writer.close();
} }
catch (Exception ex) { catch (Exception ignored) {
} }
return output; return output;
} }
......
package cn.wisenergy.service.util; package cn.wisenergy.service.util;
import cn.wisenergy.common.utils.Md5Util;
import cn.wisenergy.model.dto.PayPageDto; import cn.wisenergy.model.dto.PayPageDto;
import cn.wisenergy.service.httpClient.WechatPayHttpClientBuilder; import cn.wisenergy.service.httpClient.WechatPayHttpClientBuilder;
import cn.wisenergy.service.httpClient.auth.AutoUpdateCertificatesVerifier; import cn.wisenergy.service.httpClient.auth.AutoUpdateCertificatesVerifier;
...@@ -10,7 +9,7 @@ import cn.wisenergy.service.httpClient.auth.WechatPay2Credentials; ...@@ -10,7 +9,7 @@ import cn.wisenergy.service.httpClient.auth.WechatPay2Credentials;
import cn.wisenergy.service.httpClient.auth.WechatPay2Validator; import cn.wisenergy.service.httpClient.auth.WechatPay2Validator;
import cn.wisenergy.service.httpClient.util.PemUtil; import cn.wisenergy.service.httpClient.util.PemUtil;
import cn.wisenergy.service.wxpay.WxCommon; import cn.wisenergy.service.wxpay.WxCommon;
import com.fasterxml.jackson.core.JsonProcessingException;
import okhttp3.HttpUrl; import okhttp3.HttpUrl;
import org.apache.commons.codec.digest.DigestUtils; import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.lang.RandomStringUtils; import org.apache.commons.lang.RandomStringUtils;
...@@ -27,6 +26,7 @@ import javax.servlet.http.HttpServletRequest; ...@@ -27,6 +26,7 @@ import javax.servlet.http.HttpServletRequest;
import java.io.ByteArrayInputStream; import java.io.ByteArrayInputStream;
import java.io.IOException; import java.io.IOException;
import java.io.UnsupportedEncodingException; import java.io.UnsupportedEncodingException;
import java.nio.charset.StandardCharsets;
import java.security.InvalidKeyException; import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException; import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey; import java.security.PrivateKey;
...@@ -39,12 +39,6 @@ import java.util.*; ...@@ -39,12 +39,6 @@ import java.util.*;
public class WxPayUtil { public class WxPayUtil {
/* @Value("${wxPay.APP_ID}")
private static String appid;
@Value("${wxPay.MCH_ID}")
private static String mchid;
@Value("${wxPay.PRIVATE_KEY}")
private static String key;*/
/** /**
* 商户号 * 商户号
*/ */
...@@ -166,10 +160,9 @@ public class WxPayUtil { ...@@ -166,10 +160,9 @@ public class WxPayUtil {
// httpPost.setHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)"); // httpPost.setHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
//完成签名并执行请求 //完成签名并执行请求
CloseableHttpResponse response = httpClient.execute(httpPost);
try { try (CloseableHttpResponse response = httpClient.execute(httpPost)) {
if (response.getStatusLine().getStatusCode() == 200) { if (response.getStatusLine().getStatusCode() == 200) {
HttpEntity httpEntity = response.getEntity(); HttpEntity httpEntity = response.getEntity();
String content = EntityUtils.toString(httpEntity, "utf8"); String content = EntityUtils.toString(httpEntity, "utf8");
...@@ -177,27 +170,23 @@ public class WxPayUtil { ...@@ -177,27 +170,23 @@ public class WxPayUtil {
} }
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
}finally {
response.close();
} }
} }
/*** /***
* pc端生成统一下单格式的订单,生成一个XML格式的字符串 * pc端生成统一下单格式的订单,生成一个XML格式的字符串
* @return
* @throws UnsupportedEncodingException
*/ */
public static String createOrderInfo(PayPageDto payPageDto,String tradeNo,String product_id,String time_expire) throws UnsupportedEncodingException { public static String createOrderInfo(String tradeNo,String product_id,String time_expire,String appid,String mchid,String key) throws UnsupportedEncodingException {
String nonce_str = RandomStringUtils.randomAlphanumeric(16); String nonce_str = RandomStringUtils.randomAlphanumeric(16);
SortedMap<String,String> parameters = new TreeMap<String,String>(); SortedMap<String,String> parameters = new TreeMap<>();
parameters.put("appid", WxCommon.APP_ID); parameters.put("appid", appid);
parameters.put("mch_id",mchId); parameters.put("mch_id",mchid);
parameters.put("body", "充值"); parameters.put("body", "充值");
parameters.put("out_trade_no",tradeNo); parameters.put("out_trade_no",tradeNo);
parameters.put("notify_url", "http://raux9u.natappfree.cc/pay/wxPayCallBack.do"); //parameters.put("notify_url", "http://raux9u.natappfree.cc/pay/wxPayCallBack.do");
//parameters.put("notify_url",WxCommon.NOTIFY_URL); parameters.put("notify_url",WxCommon.NOTIFY_URL);
DecimalFormat df = new DecimalFormat("#"); DecimalFormat df = new DecimalFormat("#");
//parameters.put("total_fee", df.format(payPageDto.getTotal()*100)); //parameters.put("total_fee", df.format(payPageDto.getTotal()*100));
parameters.put("total_fee", df.format(1)); parameters.put("total_fee", df.format(1));
...@@ -206,8 +195,7 @@ public class WxPayUtil { ...@@ -206,8 +195,7 @@ public class WxPayUtil {
parameters.put("product_id", product_id); parameters.put("product_id", product_id);
parameters.put("spbill_create_ip","0.0.0.0"); parameters.put("spbill_create_ip","0.0.0.0");
parameters.put("time_expire",time_expire); parameters.put("time_expire",time_expire);
String characterEncoding = "UTF-8"; String sign = createSign(parameters,key);
String sign = createSign(characterEncoding,parameters);
parameters.put("sign", sign);//签名 parameters.put("sign", sign);//签名
//将订单对象转为xml格式 //将订单对象转为xml格式
String s = null; String s = null;
...@@ -216,24 +204,23 @@ public class WxPayUtil { ...@@ -216,24 +204,23 @@ public class WxPayUtil {
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} }
return new String(s.getBytes("UTF-8")); assert false;
return new String(s.getBytes(StandardCharsets.UTF_8));
} }
/*** /***
* h5生成统一下单格式的订单,生成一个XML格式的字符串 * h5生成统一下单格式的订单,生成一个XML格式的字符串
* @return
* @throws UnsupportedEncodingException
*/ */
public static String createOrderInfoH5(PayPageDto payPageDto,String tradeNo,HttpServletRequest request) throws UnsupportedEncodingException, JsonProcessingException { public static String createOrderInfoH5(String tradeNo, HttpServletRequest request, String appid, String mchid, String key) {
String nonce_str = RandomStringUtils.randomAlphanumeric(16); String nonce_str = RandomStringUtils.randomAlphanumeric(16);
String sceneInfo="{'h5_info':{'type':'WAP','wap_url': 'http://111.203.232.171:8999/','wap_name': '充值'}}"; String sceneInfo="{'h5_info':{'type':'WAP','wap_url': 'http://111.203.232.171:8999/','wap_name': '充值'}}";
String spbill_create_ip = getRealIp(request); String spbill_create_ip = getRealIp(request);
SortedMap<String,String> parameters = new TreeMap<String,String>(); SortedMap<String,String> parameters = new TreeMap<>();
parameters.put("appid", WxCommon.APP_ID); parameters.put("appid", appid);
parameters.put("mch_id", mchId); parameters.put("mch_id", mchid);
parameters.put("body", "充值"); parameters.put("body", "充值");
parameters.put("out_trade_no", tradeNo); parameters.put("out_trade_no", tradeNo);
parameters.put("nonce_str", nonce_str); parameters.put("nonce_str", nonce_str);
...@@ -244,8 +231,7 @@ public class WxPayUtil { ...@@ -244,8 +231,7 @@ public class WxPayUtil {
parameters.put("trade_type","MWEB"); parameters.put("trade_type","MWEB");
parameters.put("scene_info",sceneInfo); parameters.put("scene_info",sceneInfo);
parameters.put("spbill_create_ip",spbill_create_ip); parameters.put("spbill_create_ip",spbill_create_ip);
String characterEncoding = "UTF-8"; String sign = createSign(parameters,key);
String sign = createSign(characterEncoding,parameters);
parameters.put("sign", sign);//签名 parameters.put("sign", sign);//签名
//将订单对象转为xml格式 //将订单对象转为xml格式
String s = null; String s = null;
...@@ -254,22 +240,19 @@ public class WxPayUtil { ...@@ -254,22 +240,19 @@ public class WxPayUtil {
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} }
return new String(s.getBytes("UTF-8")); assert false;
return new String(s.getBytes(StandardCharsets.UTF_8));
} }
/*** /***
* 小程序生成统一下单格式的订单,生成一个XML格式的字符串 * 小程序生成统一下单格式的订单,生成一个XML格式的字符串
* @return
* @throws UnsupportedEncodingException
*/ */
public static String createOrderInfoWx(PayPageDto payPageDto,String tradeNo,HttpServletRequest request,String nonce_str) throws UnsupportedEncodingException, JsonProcessingException { public static String createOrderInfoWx(PayPageDto payPageDto,String tradeNo,String nonce_str,String Applets_ID,String mchid,String key) {
SortedMap<String,String> parameters = new TreeMap<>();
SortedMap<String,String> parameters = new TreeMap<String,String>(); parameters.put("appid", Applets_ID);
parameters.put("appid", WxCommon.APP_ID); parameters.put("mch_id", mchid);
parameters.put("mch_id", mchId);
parameters.put("body", "充值"); parameters.put("body", "充值");
parameters.put("description","充值");
parameters.put("out_trade_no", tradeNo); parameters.put("out_trade_no", tradeNo);
parameters.put("notify_url",WxCommon.NOTIFY_URL); parameters.put("notify_url",WxCommon.NOTIFY_URL);
parameters.put("nonce_str", nonce_str); parameters.put("nonce_str", nonce_str);
...@@ -277,8 +260,9 @@ public class WxPayUtil { ...@@ -277,8 +260,9 @@ public class WxPayUtil {
//parameters.put("total_fee", df.format(payPageDto.getTotal()*100)); //parameters.put("total_fee", df.format(payPageDto.getTotal()*100));
parameters.put("total_fee", df.format(1)); parameters.put("total_fee", df.format(1));
parameters.put("trade_type","JSAPI"); parameters.put("trade_type","JSAPI");
String characterEncoding = "UTF-8"; parameters.put("openid", payPageDto.getOpenid());
String sign = createSign(characterEncoding,parameters); parameters.put("spbill_create_ip","0.0.0.0");
String sign = createSign(parameters,key);
parameters.put("sign", sign);//签名 parameters.put("sign", sign);//签名
//将订单对象转为xml格式 //将订单对象转为xml格式
String s = null; String s = null;
...@@ -288,18 +272,18 @@ public class WxPayUtil { ...@@ -288,18 +272,18 @@ public class WxPayUtil {
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} }
return new String(s.getBytes("UTF-8")); assert false;
return new String(s.getBytes(StandardCharsets.UTF_8));
} }
/*** /***
* 生成签名 * 生成签名
* @param characterEncoding
* @param parameters
* @return
*/ */
public static String createSign(String characterEncoding, SortedMap<String,String> parameters) { public static String createSign(SortedMap<String,String> parameters,String key) {
StringBuilder sb = new StringBuilder(); // 多线程访问的情况下需要用StringBuffer // 多线程访问的情况下需要用StringBuffer
Set es = parameters.keySet(); // 所有参与传参的key按照accsii排序(升序) StringBuilder sb = new StringBuilder();
// 所有参与传参的key按照accsii排序(升序)
Set es = parameters.keySet();
for (Object set : es) { for (Object set : es) {
String k = set.toString(); String k = set.toString();
Object v = parameters.get(k); Object v = parameters.get(k);
...@@ -309,15 +293,13 @@ public class WxPayUtil { ...@@ -309,15 +293,13 @@ public class WxPayUtil {
.append("&"); .append("&");
} }
sb.append("key=") sb.append("key=")
.append(WxCommon.PRIVATE_KEY); .append(key);
return DigestUtils.md5Hex(sb.toString()).toUpperCase(); return DigestUtils.md5Hex(sb.toString()).toUpperCase();
} }
/** /**
* 获取真实ip地址 通过阿帕奇代理的也能获取到真实ip * 获取真实ip地址 通过阿帕奇代理的也能获取到真实ip
* @param request
* @return
*/ */
public static String getRealIp(HttpServletRequest request) { public static String getRealIp(HttpServletRequest request) {
String ip = request.getHeader("x-forwarded-for"); String ip = request.getHeader("x-forwarded-for");
...@@ -335,8 +317,6 @@ public class WxPayUtil { ...@@ -335,8 +317,6 @@ public class WxPayUtil {
/** /**
* 设置微信二维码失效时间,并返回具体失效的时间点 * 设置微信二维码失效时间,并返回具体失效的时间点
* @param expire 二维码的有效时间,单位是毫秒
* @return
*/ */
public static String getOrderExpireTime(Long expire){ public static String getOrderExpireTime(Long expire){
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss"); SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
......
...@@ -32,6 +32,7 @@ import java.security.NoSuchAlgorithmException; ...@@ -32,6 +32,7 @@ import java.security.NoSuchAlgorithmException;
import java.security.SignatureException; import java.security.SignatureException;
import java.security.spec.InvalidKeySpecException; import java.security.spec.InvalidKeySpecException;
import java.util.Map; import java.util.Map;
import java.util.SortedMap;
/** /**
* @author 86187 * @author 86187
...@@ -45,8 +46,6 @@ import java.util.Map; ...@@ -45,8 +46,6 @@ import java.util.Map;
@Slf4j @Slf4j
public class PayController { public class PayController {
@Autowired
private WxPayService1 wxPayService;
@Autowired @Autowired
private TestWxPayService testWxPayService; private TestWxPayService testWxPayService;
...@@ -115,7 +114,7 @@ public class PayController { ...@@ -115,7 +114,7 @@ public class PayController {
@ApiOperation(value = "小程序-统一下单", notes = "小程序-统一下单", httpMethod = "POST") @ApiOperation(value = "小程序-统一下单", notes = "小程序-统一下单", httpMethod = "POST")
@ApiImplicitParam(name = "payPageDto", value = "支付入参", dataType = "PayPageDto") @ApiImplicitParam(name = "payPageDto", value = "支付入参", dataType = "PayPageDto")
@PostMapping("/WxPayApplets") @PostMapping("/WxPayApplets")
public R<String> WxPayApplets(@RequestBody PayPageDto payPageDto,HttpServletRequest request, HttpServletResponse response) throws JsonProcessingException { public R<SortedMap<String, String>> WxPayApplets(@RequestBody PayPageDto payPageDto, HttpServletRequest request, HttpServletResponse response) throws JsonProcessingException {
return testWxPayService.WxPayApplets(payPageDto,request, response); return testWxPayService.WxPayApplets(payPageDto,request, response);
} }
/** /**
......
...@@ -3,8 +3,8 @@ spring: ...@@ -3,8 +3,8 @@ spring:
type: com.alibaba.druid.pool.DruidDataSource type: com.alibaba.druid.pool.DruidDataSource
druid: druid:
driver-class-name: com.mysql.cj.jdbc.Driver driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://192.168.110.165:3306/volunteer?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&serverTimezone=GMT%2B8 #url: jdbc:mysql://192.168.110.165:3306/volunteer?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&serverTimezone=GMT%2B8
#url: jdbc:mysql://localhost:3306/volunteer?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&serverTimezone=GMT%2B8 url: jdbc:mysql://localhost:3306/volunteer?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&serverTimezone=GMT%2B8
username: root username: root
password: adm4HYservice$ password: adm4HYservice$
initial-size: 10 initial-size: 10
...@@ -74,8 +74,10 @@ aliPay: ...@@ -74,8 +74,10 @@ aliPay:
APP_ID: 2021002126609937 APP_ID: 2021002126609937
ALIPAY_PUBLIC_KEY: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2cUDFyw7sLpTpICDURNefRfzr7I7qO5Spq6HwdyFbVv5m6wVzt3fXYTcDrVUuzfbV7+rrXqnvk7LNOp10qPtUyHyZKO2jTBBcUK5H0RPNzs1XInKaSTAznGH8dEAk6yQiwhSDpQzwoOq1Ool2MQocdkcBWwAMEcEUByIbJ4ABsrwXdmkgu2hDHR/GgLvarUp1zOXfZkaTK//L1GUI5uCI+/omcqMPDIOwd8DfcNr0TKlXfAEixp9eVuU/b09b7vW7O9Vh+w0gmy5FN+BWX/JaRRL1DhRqbHl7Sl4/oGu1yjfQA5U8jXBgd+QjwdUiAXVwPdESS/AUbPWE517eH5FtQIDAQAB ALIPAY_PUBLIC_KEY: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2cUDFyw7sLpTpICDURNefRfzr7I7qO5Spq6HwdyFbVv5m6wVzt3fXYTcDrVUuzfbV7+rrXqnvk7LNOp10qPtUyHyZKO2jTBBcUK5H0RPNzs1XInKaSTAznGH8dEAk6yQiwhSDpQzwoOq1Ool2MQocdkcBWwAMEcEUByIbJ4ABsrwXdmkgu2hDHR/GgLvarUp1zOXfZkaTK//L1GUI5uCI+/omcqMPDIOwd8DfcNr0TKlXfAEixp9eVuU/b09b7vW7O9Vh+w0gmy5FN+BWX/JaRRL1DhRqbHl7Sl4/oGu1yjfQA5U8jXBgd+QjwdUiAXVwPdESS/AUbPWE517eH5FtQIDAQAB
PRIVATE_KEY: MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCA9/p6UJH2kpTumbyRt/gdAOUnRJQ0VRQj/o0GtJ9ECweSIk6+8K81CAGcfmdeB6ZfteXZlKr9SGf3hkwuOz5oOJb5GAmKgv60T6zrBm5/MSVYhDY935eCYjFSj59w2120kvtWvq94Km3TkvAstrbSwBgpS4eutZ2qg1U4h5j6H3v+PB6RxyOsugarEYQ6TxCTr/CWHWU9G28yXSaQ66S3rsxl5aSpUCY+lUwIEVmZ9SyAa+g4FV3EfRitssiKMdCuli46YQ0/uxc59igCdgd4uxygswYgUGfP4HLQ5wEGPn7H4Q5IxSlxPvc60fYxgkRo9NMZgAljRohGdKP2u6jjAgMBAAECggEAGRakbljwHCRlvoi/qyU7qgC7k0j+/7MxSNNDAfPvK6Btp5ru8KwHmWxmS9g3KY6ZafMLtKj8HmuQdhF1DmVN/Z5MmEZ5zK0w+UiqncnRgwK/fhmyJ5Uwdxe8+o+f96dk8jTJmhVcMycl2Eu0Vy5wIE1oJdhgm7cO5dXIpUeTlcx09F3v2xx4lvmJTQvzPxgFYMbB7M8ijEQvkeXdBw7fAlA+izl8Paovgv6tu/dikImZZZgoHKZugZbz3orxpZWiIXzoB9SymBo+lWkeGMj55hlKV9sXTrf5pM6vd5JYmzfYoF/bcO7k4NJ0Elddz3EHe/0IX8M90rAH9WFSdLGseQKBgQDMkEPUfrWP/Z6nE76muUQE4y3OH0ckLacbCEI+RseVNqSKIs+TrzhQllvb/V/foeiv6SLBvmyWbO3AX+Gh9GuedLyRTct/K9o1J3Q4GAa8jGJeoi1uYPPAfqt3BMv05/i1jIvTePUrxp1NV7u0/i9QmV4R1it0+abs2Ro8Q3XqZwKBgQChZa3UBe4FbaTBWVToU4lW5KdEv93gm6iKQiHWI4yTXaJJlPOo8Hx9+/REeaxOIsaW6XZLyarNuh+cThTv4GLJKjogjcq9B1oNWgS6Z41CJZIkW/IFgjZvHh3n+SD3pTijA9y7usgu/R0OsVwrlAMyMvl7JdIMRYXFckRhb1v4JQKBgQC3+Ao4gZfRnjpfcd9k23rzlkfsdq6pN7FwGzZQAaGebNz/Kh1aaRuRRhfouW7OlTLJeTZ73UCU6/PJrbEi0Mk0YTHwz3DytsJwSUI47EqqqOoSx3FqMiEk/gZAbHzsjO5cf8CEd+St8Noo43z5Yhu1NainC+BbO+ZGXV0900GpgwKBgEEx2nK/5nLo5Fl55VNnkx23hV2/BzhYiE85AYQHnhxVAV4pvfcrFY6qfPRAFfsGDyQcsD1S/BzYJzazT7/J6v2JgituO0v6MUUdbLWDaMskdBEd1vikrapbBweSWd/PLL6kq8BlZcGdWuR5flrYEiZv8tjs4Rk16CBm1PpqykLFAoGASgkWQocPk0PYnEr1anXeiabc+/hMj4cZv3ynGv7NU9hUkZszMDKutG63y3nZ1QJPtfcF7xgTKpABfdIMCbAzKzDpd2znFg/bTxCV23GV6SNSWU+R8WC+30jw5o3W++wcILmd83L4IWLXUo6+GI0wqDBNOYG+nDLs1gWfBvX4UbI= PRIVATE_KEY: MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCA9/p6UJH2kpTumbyRt/gdAOUnRJQ0VRQj/o0GtJ9ECweSIk6+8K81CAGcfmdeB6ZfteXZlKr9SGf3hkwuOz5oOJb5GAmKgv60T6zrBm5/MSVYhDY935eCYjFSj59w2120kvtWvq94Km3TkvAstrbSwBgpS4eutZ2qg1U4h5j6H3v+PB6RxyOsugarEYQ6TxCTr/CWHWU9G28yXSaQ66S3rsxl5aSpUCY+lUwIEVmZ9SyAa+g4FV3EfRitssiKMdCuli46YQ0/uxc59igCdgd4uxygswYgUGfP4HLQ5wEGPn7H4Q5IxSlxPvc60fYxgkRo9NMZgAljRohGdKP2u6jjAgMBAAECggEAGRakbljwHCRlvoi/qyU7qgC7k0j+/7MxSNNDAfPvK6Btp5ru8KwHmWxmS9g3KY6ZafMLtKj8HmuQdhF1DmVN/Z5MmEZ5zK0w+UiqncnRgwK/fhmyJ5Uwdxe8+o+f96dk8jTJmhVcMycl2Eu0Vy5wIE1oJdhgm7cO5dXIpUeTlcx09F3v2xx4lvmJTQvzPxgFYMbB7M8ijEQvkeXdBw7fAlA+izl8Paovgv6tu/dikImZZZgoHKZugZbz3orxpZWiIXzoB9SymBo+lWkeGMj55hlKV9sXTrf5pM6vd5JYmzfYoF/bcO7k4NJ0Elddz3EHe/0IX8M90rAH9WFSdLGseQKBgQDMkEPUfrWP/Z6nE76muUQE4y3OH0ckLacbCEI+RseVNqSKIs+TrzhQllvb/V/foeiv6SLBvmyWbO3AX+Gh9GuedLyRTct/K9o1J3Q4GAa8jGJeoi1uYPPAfqt3BMv05/i1jIvTePUrxp1NV7u0/i9QmV4R1it0+abs2Ro8Q3XqZwKBgQChZa3UBe4FbaTBWVToU4lW5KdEv93gm6iKQiHWI4yTXaJJlPOo8Hx9+/REeaxOIsaW6XZLyarNuh+cThTv4GLJKjogjcq9B1oNWgS6Z41CJZIkW/IFgjZvHh3n+SD3pTijA9y7usgu/R0OsVwrlAMyMvl7JdIMRYXFckRhb1v4JQKBgQC3+Ao4gZfRnjpfcd9k23rzlkfsdq6pN7FwGzZQAaGebNz/Kh1aaRuRRhfouW7OlTLJeTZ73UCU6/PJrbEi0Mk0YTHwz3DytsJwSUI47EqqqOoSx3FqMiEk/gZAbHzsjO5cf8CEd+St8Noo43z5Yhu1NainC+BbO+ZGXV0900GpgwKBgEEx2nK/5nLo5Fl55VNnkx23hV2/BzhYiE85AYQHnhxVAV4pvfcrFY6qfPRAFfsGDyQcsD1S/BzYJzazT7/J6v2JgituO0v6MUUdbLWDaMskdBEd1vikrapbBweSWd/PLL6kq8BlZcGdWuR5flrYEiZv8tjs4Rk16CBm1PpqykLFAoGASgkWQocPk0PYnEr1anXeiabc+/hMj4cZv3ynGv7NU9hUkZszMDKutG63y3nZ1QJPtfcF7xgTKpABfdIMCbAzKzDpd2znFg/bTxCV23GV6SNSWU+R8WC+30jw5o3W++wcILmd83L4IWLXUo6+GI0wqDBNOYG+nDLs1gWfBvX4UbI=
#微信支付appid、mchid、密钥 #微信支付appid、mchid、密钥、小程序appid
wxPay: wxPay:
APP_ID: wx7d8f4502a2bfa865 APP_ID: wx7d8f4502a2bfa865
MCH_ID: 1606042985 MCH_ID: 1606042985
PRIVATE_KEY: a72e174a8c7f903bc4e5ae3c021eb552 PRIVATE_KEY: a72e174a8c7f903bc4e5ae3c021eb552
Applets_ID: wx9390a17892607f6c
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment