dev-discount
袁野 4 years ago
commit 86995339dd
  1. 2
      hai-cweb/src/main/java/com/cweb/config/AuthConfig.java
  2. 85
      hai-cweb/src/main/java/com/cweb/controller/WechatController.java
  3. 102
      hai-cweb/src/main/java/com/cweb/controller/pay/OrderController.java
  4. 2
      hai-cweb/src/main/resources/dev/config.properties
  5. BIN
      hai-cweb/src/main/resources/privatekey/apiclient_cert.p12
  6. 23
      hai-cweb/src/main/resources/privatekey/apiclient_cert.pem
  7. 28
      hai-cweb/src/main/resources/privatekey/apiclient_key.pem
  8. 5
      hai-service/pom.xml
  9. 39
      hai-service/src/main/java/com/hai/common/utils/HttpsUtils.java
  10. 3
      hai-service/src/main/java/com/hai/service/impl/HighUserServiceImpl.java

@ -105,6 +105,8 @@ public class AuthConfig implements WebMvcConfigurer {
.excludePathPatterns("/sms/sendSmsCode") .excludePathPatterns("/sms/sendSmsCode")
.excludePathPatterns("/sms/getSmsCode") .excludePathPatterns("/sms/getSmsCode")
.excludePathPatterns("/user/login") .excludePathPatterns("/user/login")
.excludePathPatterns("/user/getUnionId")
.excludePathPatterns("/order/orderToH5Pay")
.excludePathPatterns("/wechat/*") .excludePathPatterns("/wechat/*")
; ;
} }

@ -8,6 +8,9 @@ import com.alibaba.fastjson.JSONObject;
import com.cweb.config.SessionKeyCache; import com.cweb.config.SessionKeyCache;
import com.cweb.config.SysConst; import com.cweb.config.SysConst;
import com.cweb.config.WxMaConfiguration; import com.cweb.config.WxMaConfiguration;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.hai.common.exception.ErrorCode; import com.hai.common.exception.ErrorCode;
import com.hai.common.exception.ErrorHelp; import com.hai.common.exception.ErrorHelp;
import com.hai.common.exception.SysCode; import com.hai.common.exception.SysCode;
@ -35,10 +38,7 @@ import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.net.URLEncoder; import java.net.URLEncoder;
import java.util.Date; import java.util.*;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
@Controller @Controller
@RequestMapping(value = "/wechat") @RequestMapping(value = "/wechat")
@ -68,7 +68,7 @@ public class WechatController {
final WxMaService wxService = WxMaConfiguration.getMaService(); final WxMaService wxService = WxMaConfiguration.getMaService();
WxMaJscode2SessionResult session = wxService.jsCode2SessionInfo(code); WxMaJscode2SessionResult session = wxService.jsCode2SessionInfo(code);
//保存小程序用户登录的openId及sessionKey信息 //保存小程序用户登录的openId及sessionKey信息
SessionKeyCache.setData(session.getOpenid(), session.getSessionKey(), -1); SessionKeyCache.setData(session.getOpenid(), session, -1);
JSONObject jo = new JSONObject(); JSONObject jo = new JSONObject();
jo.put("openId", session.getOpenid()); jo.put("openId", session.getOpenid());
return ResponseMsgUtil.success(jo); return ResponseMsgUtil.success(jo);
@ -126,11 +126,11 @@ public class WechatController {
throw ErrorHelp.genException(SysCode.MiniProgram, ErrorCode.REQ_PARAMS_ERROR, ""); throw ErrorHelp.genException(SysCode.MiniProgram, ErrorCode.REQ_PARAMS_ERROR, "");
} }
//请求微信api,获取用户session_key以及openId //请求微信api,获取用户session_key以及openId
String sessionKey = SessionKeyCache.getData(openId); WxMaJscode2SessionResult session = SessionKeyCache.getData(openId);
final WxMaService wxService = WxMaConfiguration.getMaService(); final WxMaService wxService = WxMaConfiguration.getMaService();
WxMaPhoneNumberInfo phoneNoInfo = wxService.getUserService().getPhoneNoInfo(sessionKey, encryptedData, iv); WxMaPhoneNumberInfo phoneNoInfo = wxService.getUserService().getPhoneNoInfo(session.getSessionKey(), encryptedData, iv);
if (phoneNoInfo == null || StringUtils.isEmpty(phoneNoInfo.getPurePhoneNumber())) { if (phoneNoInfo == null || StringUtils.isEmpty(phoneNoInfo.getPurePhoneNumber())) {
throw ErrorHelp.genException(SysCode.MiniProgram, ErrorCode.WECHAT_DECRYPT_ERROR, "用户phoneNumber解析失败"); throw ErrorHelp.genException(SysCode.MiniProgram, ErrorCode.WECHAT_DECRYPT_ERROR, "用户phoneNumber解析失败");
} }
@ -170,18 +170,22 @@ public class WechatController {
throw ErrorHelp.genException(SysCode.MiniProgram, ErrorCode.REQ_PARAMS_ERROR, ""); throw ErrorHelp.genException(SysCode.MiniProgram, ErrorCode.REQ_PARAMS_ERROR, "");
} }
//请求微信api,获取用户session_key以及openId //请求微信api,获取用户session_key以及openId
String sessionKey = SessionKeyCache.getData(openId); WxMaJscode2SessionResult session = SessionKeyCache.getData(openId);
System.out.println(JSONObject.toJSONString(session));
final WxMaService wxService = WxMaConfiguration.getMaService(); final WxMaService wxService = WxMaConfiguration.getMaService();
WxMaUserInfo userInfo = wxService.getUserService().getUserInfo(session.getSessionKey(), encryptedData, iv);
WxMaUserInfo userInfo = wxService.getUserService().getUserInfo(sessionKey, encryptedData, iv);
if (userInfo == null) { if (userInfo == null) {
throw ErrorHelp.genException(SysCode.MiniProgram, ErrorCode.WECHAT_DECRYPT_ERROR, "用户phoneNumber解析失败"); throw ErrorHelp.genException(SysCode.MiniProgram, ErrorCode.WECHAT_DECRYPT_ERROR, "用户phoneNumber解析失败");
} }
HighUser user = highUserService.findByUnionId(userInfo.getUnionId()); if (StringUtils.isBlank(session.getUnionid())) {
throw ErrorHelp.genException(SysCode.MiniProgram, ErrorCode.WECHAT_DECRYPT_ERROR, "获取UnionId失败");
}
HighUser user = highUserService.findByOpenId(session.getOpenid());
if (user == null) { if (user == null) {
user = new HighUser(); user = new HighUser();
user.setUnionId(userInfo.getUnionId()); user.setUnionId(session.getUnionid());
user.setOpenId(openId); user.setOpenId(openId);
user.setRegTime(new Date()); user.setRegTime(new Date());
user.setStatus(1); user.setStatus(1);
@ -190,8 +194,10 @@ public class WechatController {
user.setName(userInfo.getNickName()); user.setName(userInfo.getNickName());
highUserService.insertUser(user); highUserService.insertUser(user);
} else { } else {
user.setUnionId(session.getUnionid());
user.setHeaderImg(userInfo.getAvatarUrl()); user.setHeaderImg(userInfo.getAvatarUrl());
user.setName(userInfo.getNickName()); user.setName(userInfo.getNickName());
user.setOpenId(userInfo.getOpenId());
highUserService.updateUser(user); highUserService.updateUser(user);
} }
@ -200,7 +206,7 @@ public class WechatController {
user.setPassword(null); user.setPassword(null);
highUserModel.setHighUser(user); highUserModel.setHighUser(user);
SessionObject so = new SessionObject(userInfo.getUnionId(), 1 , highUserModel); SessionObject so = new SessionObject(user.getUnionId(), 1 , highUserModel);
userCenter.save(request, response, so); userCenter.save(request, response, so);
return ResponseMsgUtil.success(so); return ResponseMsgUtil.success(so);
@ -283,11 +289,13 @@ public class WechatController {
params.put("openid", openid); params.put("openid", openid);
params.put("lang", "zh_CN"); params.put("lang", "zh_CN");
JSONObject userInfo = HttpsUtils.doGet("https://api.weixin.qq.com/sns/userinfo", params); JSONObject userInfo = HttpsUtils.doGet("https://api.weixin.qq.com/sns/userinfo", params);
System.out.println(userInfo.toJSONString());
if (StringUtils.isNotBlank(userInfo.getString("errcode"))) { if (StringUtils.isNotBlank(userInfo.getString("errcode"))) {
log.error("getH5UserInfo error!", "获取微信用户信息失败"); log.error("getH5UserInfo error!", "获取微信用户信息失败");
throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, "获取微信用户信息失败"); throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, "获取微信用户信息失败");
} }
if (StringUtils.isBlank(userInfo.getString("unionid"))) {
throw ErrorHelp.genException(SysCode.MiniProgram, ErrorCode.WECHAT_DECRYPT_ERROR, "获取UnionId失败");
}
HighUser user = highUserService.findByUnionId(userInfo.getString("unionid")); HighUser user = highUserService.findByUnionId(userInfo.getString("unionid"));
if (user == null) { if (user == null) {
@ -301,6 +309,7 @@ public class WechatController {
user.setName(userInfo.getString("nickname")); user.setName(userInfo.getString("nickname"));
highUserService.insertUser(user); highUserService.insertUser(user);
} else { } else {
user.setOpenIdH5(openid);
user.setHeaderImg(userInfo.getString("headimgurl")); user.setHeaderImg(userInfo.getString("headimgurl"));
user.setName(userInfo.getString("nickname")); user.setName(userInfo.getString("nickname"));
highUserService.updateUser(user); highUserService.updateUser(user);
@ -320,4 +329,54 @@ public class WechatController {
} }
@RequestMapping(value = "/getUnionId", method = RequestMethod.GET)
@ResponseBody
@ApiOperation(value = "刷取unionid")
public ResponseData getUnionId(HttpServletRequest request, HttpServletResponse response) {
try {
// 获取access_token
Map<String, Object> params = new HashMap<>();
params.put("appid", SysConst.getSysConfig().getWxAppId());
params.put("secret", SysConst.getSysConfig().getWxAppSecret());
params.put("grant_type", "client_credential");
JSONObject jsonObject = HttpsUtils.doGet("https://api.weixin.qq.com/cgi-bin/token", params);
System.out.println(jsonObject.toJSONString());
String accessToken = jsonObject.getString("access_token");
if (StringUtils.isBlank(accessToken)) {
log.error("getH5UserInfo error!", "获取微信access_token失败" );
throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, "获取微信access_token失败");
}
params.clear();
List<Map<String,Object>> userMapList = new ArrayList<>();
Map<String,Object> userMap;
int pageNum = 1;
while (true) {
userMapList.clear();;
PageHelper.startPage(pageNum, 100);
PageInfo<HighUser> pageInfo = new PageInfo<>(highUserService.getListUser(new HashMap<>()));
if (pageInfo.getList().size() > 0) {
for (HighUser user : pageInfo.getList()) {
userMap = new HashMap<>();
userMap.put("openid", user.getOpenId());
userMap.put("lang", "zh_CN");
userMapList.add(userMap);
}
params.put("user_list", userMapList);
System.out.println(JSONObject.toJSONString(params));
JSONObject userInfo = HttpsUtils.doPost("https://api.weixin.qq.com/cgi-bin/user/info/batchget?access_token=" + accessToken, JSONObject.toJSONString(params));
System.out.println(userInfo.toJSONString());
}
pageNum++;
break;
}
return ResponseMsgUtil.success("处理成功");
} catch (Exception e) {
return ResponseMsgUtil.exception(e);
}
}
} }

@ -1,5 +1,6 @@
package com.cweb.controller.pay; package com.cweb.controller.pay;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.cweb.config.SysConst; import com.cweb.config.SysConst;
import com.hai.common.exception.ErrorCode; import com.hai.common.exception.ErrorCode;
@ -9,8 +10,10 @@ import com.hai.common.pay.WechatPayUtil;
import com.hai.common.pay.entity.OrderType; import com.hai.common.pay.entity.OrderType;
import com.hai.common.pay.entity.WeChatPayReqInfo; import com.hai.common.pay.entity.WeChatPayReqInfo;
import com.hai.common.pay.util.MD5Util; import com.hai.common.pay.util.MD5Util;
import com.hai.common.security.Base64Util;
import com.hai.common.security.SessionObject; import com.hai.common.security.SessionObject;
import com.hai.common.security.UserCenter; import com.hai.common.security.UserCenter;
import com.hai.common.utils.HttpsUtils;
import com.hai.common.utils.MathUtils; import com.hai.common.utils.MathUtils;
import com.hai.common.utils.ResponseMsgUtil; import com.hai.common.utils.ResponseMsgUtil;
import com.hai.entity.HighChildOrder; import com.hai.entity.HighChildOrder;
@ -21,9 +24,21 @@ import com.hai.model.ResponseData;
import com.hai.model.UserInfoModel; import com.hai.model.UserInfoModel;
import com.hai.service.HighCouponService; import com.hai.service.HighCouponService;
import com.hai.service.HighOrderService; import com.hai.service.HighOrderService;
import com.wechat.pay.contrib.apache.httpclient.WechatPayHttpClientBuilder;
import com.wechat.pay.contrib.apache.httpclient.auth.AutoUpdateCertificatesVerifier;
import com.wechat.pay.contrib.apache.httpclient.auth.PrivateKeySigner;
import com.wechat.pay.contrib.apache.httpclient.auth.WechatPay2Credentials;
import com.wechat.pay.contrib.apache.httpclient.auth.WechatPay2Validator;
import com.wechat.pay.contrib.apache.httpclient.util.PemUtil;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.util.EntityUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -35,10 +50,11 @@ import org.springframework.web.bind.annotation.ResponseBody;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import java.io.*;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.HashMap; import java.security.*;
import java.util.Map; import java.security.spec.PKCS8EncodedKeySpec;
import java.util.SortedMap; import java.util.*;
import java.util.concurrent.ThreadLocalRandom; import java.util.concurrent.ThreadLocalRandom;
/** /**
@ -207,4 +223,84 @@ public class OrderController {
return ResponseMsgUtil.exception(e); return ResponseMsgUtil.exception(e);
} }
} }
@RequestMapping(value="/orderToH5Pay",method = RequestMethod.POST)
@ResponseBody
@ApiOperation(value = "H5订单下单")
public ResponseData orderToH5Pay(@RequestBody String reqBodyStr) {
try {
/* if (StringUtils.isBlank(reqBodyStr)) {
log.error("orderToPay error!", "参数错误");
throw ErrorHelp.genException(SysCode.System, ErrorCode.REQ_PARAMS_ERROR, "");
}
JSONObject jsonObject = JSONObject.parseObject(reqBodyStr);
Long orderId = jsonObject.getLong("orderId");
if ( orderId == null) {
log.error("orderToPay error!", "参数错误");
throw ErrorHelp.genException(SysCode.System, ErrorCode.REQ_PARAMS_ERROR, "");
}*/
Map<String,Object> param = new HashMap<>();
param.put("appid", SysConst.getSysConfig().getWxMchAppId());
param.put("mchid", SysConst.getSysConfig().getWxSubMchId());
param.put("description", "购买商品");
param.put("out_trade_no", String.valueOf(new Date().getTime()));
param.put("notify_url", SysConst.getSysConfig().getNotifyUrl());
Map<String,Object> amountMap = new HashMap<>();
amountMap.put("total", 1);
param.put("amount", amountMap);
Map<String,Object> sceneInfoMap = new HashMap<>();
sceneInfoMap.put("payer_client_ip", "127.0.0.1");
Map<String,Object> h5InfoMap = new HashMap<>();
h5InfoMap.put("type", "Wap");
sceneInfoMap.put("h5_info", h5InfoMap);
param.put("scene_info", sceneInfoMap);
Map<String,Object> header = new HashMap<>();
String post = getToken("POST", "/v3/pay/transactions/h5", JSONObject.toJSONString(param));
header.put("Accept","application/json");
header.put("Authorization", "WECHATPAY2-SHA256-RSA2048 " + post);
JSONObject object = HttpsUtils.doPost("https://api.mch.weixin.qq.com/v3/pay/transactions/h5", param, header);
return ResponseMsgUtil.success(object);
} catch (Exception e) {
log.error("orderToPay error!", e);
return ResponseMsgUtil.exception(e);
}
}
String getToken(String method, String url, String body) throws UnsupportedEncodingException, SignatureException, NoSuchAlgorithmException, InvalidKeyException, FileNotFoundException {
long timeMillis = System.currentTimeMillis();
String nonceStr = String.valueOf(timeMillis);
long timestamp = System.currentTimeMillis() / 1000;
String message = buildMessage(method, url, timestamp, nonceStr, body);
PrivateKey privateKey = PemUtil.loadPrivateKey(new FileInputStream("G:/hurui-project/hai-parent/hai-cweb/src/main/resources/privatekey/apiclient_key.pem"));
String signature = sign(privateKey,message.getBytes("utf-8"));
return "mchid=\"" + SysConst.getSysConfig().getWxSubMchId() + "\","
+ "nonce_str=\"" + nonceStr + "\","
+ "timestamp=\"" + timestamp + "\","
+ "serial_no=\"" + "1B08DC2A078B0B1F77A65C97C445AAD545B5EAA6" + "\","
+ "signature=\"" + signature + "\"";
}
String sign(PrivateKey privateKey,byte[] message) throws SignatureException, NoSuchAlgorithmException, InvalidKeyException {
Signature sign = Signature.getInstance("SHA256withRSA");
sign.initSign(privateKey);
sign.update(message);
return Base64.getEncoder().encodeToString(sign.sign());
}
String buildMessage(String method, String url, long timestamp, String nonceStr, String body) {
return method + "\n"
+ url + "\n"
+ timestamp + "\n"
+ nonceStr + "\n"
+ body + "\n";
}
} }

@ -9,7 +9,7 @@ wxApiKey=Skufk5oi85wDFGl888i6wsRSTkdd5df5
wxMchAppId=wx637bd6f7314daa46 wxMchAppId=wx637bd6f7314daa46
wxMchId=1289663601 wxMchId=1289663601
wxSubAppId=wx8d49e2f83025229d wxSubAppId=wx8d49e2f83025229d
wxSubMchId=1603942866 wxSubMchId=1609882817
wxUnifiedOrderUrl=https://api.mch.weixin.qq.com/pay/unifiedorder wxUnifiedOrderUrl=https://api.mch.weixin.qq.com/pay/unifiedorder
notifyUrl=https://hsgcs.dctpay.com/crest/wechatpay/notify notifyUrl=https://hsgcs.dctpay.com/crest/wechatpay/notify

@ -0,0 +1,23 @@
-----BEGIN CERTIFICATE-----
MIID3TCCAsWgAwIBAgIUGwjcKgeLCx93plyXxEWq1UW16qYwDQYJKoZIhvcNAQEL
BQAwXjELMAkGA1UEBhMCQ04xEzARBgNVBAoTClRlbnBheS5jb20xHTAbBgNVBAsT
FFRlbnBheS5jb20gQ0EgQ2VudGVyMRswGQYDVQQDExJUZW5wYXkuY29tIFJvb3Qg
Q0EwHhcNMjEwNTMwMTMwNTM1WhcNMjYwNTI5MTMwNTM1WjBvMRMwEQYDVQQDDAox
NjA5ODgyODE3MRswGQYDVQQKDBLlvq7kv6HllYbmiLfns7vnu58xGzAZBgNVBAsM
EuS4quS9k+aIt+m7juadqOePjTELMAkGA1UEBgwCQ04xETAPBgNVBAcMCFNoZW5a
aGVuMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvyofjHIn+PWAwM9Z
2/uv8hyRCP+nh8YcylUrRsgQtjoKi1HbRtj9AAwo0eBKgFZ3IviM2+4kQRctcN76
cGBVGJh8Pvz7MreZgqTLPVHDLz5aVuyc7gzjCQ9o4B5pRjCdR3ORQuK1E+F65IGK
Ez2CjuVnZ+hGvsKhP2NExdhJJbLql3Za9G65Q0fU2z300g01wrRldv3lNr8cXWCr
7AAC491pqpa+yqGzibQustXPG4E3cFew/ZEvI+Said8YchrZmzlImaOS0JFGsSO+
W0DAemP+k+UfZ8AoipQ4VZvL5MsEjnTk9MvmGiqXr4pS1iqJggWcKgk6g4w+FI5i
INRKkQIDAQABo4GBMH8wCQYDVR0TBAIwADALBgNVHQ8EBAMCBPAwZQYDVR0fBF4w
XDBaoFigVoZUaHR0cDovL2V2Y2EuaXRydXMuY29tLmNuL3B1YmxpYy9pdHJ1c2Ny
bD9DQT0xQkQ0MjIwRTUwREJDMDRCMDZBRDM5NzU0OTg0NkMwMUMzRThFQkQyMA0G
CSqGSIb3DQEBCwUAA4IBAQCijzFxcaRNdoHzWKMlNNj/WI8j0tqaE6tublseIsZq
fzysnAuadSuawPVyHmPlaOD/wmB+sLkmQECgsgg0dloxETLdElQztSOok6GO+SLm
uRUgDbQJ5wpUu4YphdW2WFpXF2uLgbOvRBJGKiMsTY2FutyTlvj7kqQnhoBr5XWW
08cH40LvHte1/slRpoy0QM0zGZAGGMkNIgKGwlmF5jDuEIyZJs0lrNIJUOoxnZBU
4l7NZhZqckP8bWw0Dyfy4hGw/NAd7gI5nX9yiX185C6aqJr5Aw05HloJHNxMbtTj
5LtFybU6ZAazTWkY301c8CF7tlsaIglnsf/6odkSYn+u
-----END CERTIFICATE-----

@ -0,0 +1,28 @@
-----BEGIN PRIVATE KEY-----
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC/Kh+Mcif49YDA
z1nb+6/yHJEI/6eHxhzKVStGyBC2OgqLUdtG2P0ADCjR4EqAVnci+Izb7iRBFy1w
3vpwYFUYmHw+/Psyt5mCpMs9UcMvPlpW7JzuDOMJD2jgHmlGMJ1Hc5FC4rUT4Xrk
gYoTPYKO5Wdn6Ea+wqE/Y0TF2EklsuqXdlr0brlDR9TbPfTSDTXCtGV2/eU2vxxd
YKvsAALj3Wmqlr7KobOJtC6y1c8bgTdwV7D9kS8j5JqJ3xhyGtmbOUiZo5LQkUax
I75bQMB6Y/6T5R9nwCiKlDhVm8vkywSOdOT0y+YaKpevilLWKomCBZwqCTqDjD4U
jmIg1EqRAgMBAAECggEBAIiEOnd/5o/iMwp+iXuR5/qM7/5vJGLP1iugWwF3Sof4
NyN7V47m0va/uD75X/r6xKXSvjUpgfaB6M+cTVkHUn34F3KcE4AKobQsn3+w7iTE
8Jr26rMNvOzxdkHnNeMMQKWQIIKViB8kfTDGWaaX3K7ToN8Rf8QnFiRAbhKj/MjQ
GSXTcFJ9004jBGB+EawWC9rekZo2mHiEQWVYtDEYBnSJ9fQeg4b6Fo7IN/SMoLSM
HONNsq/uiQJjZr8Tm/5S1Wq1UTw1kiU9CyEG6dnsFkWSfrcrgeEbKHs7DATu0h9p
sVfvu/+fiDq9AoahDvfw1X+Pg4z3gy+PCH3Z3TNnEqkCgYEA9M09FSqvgDdzgtnz
xzF4dppIMxTfSls2Cg1+2Gdgj/P9ffi21LgYzPPIMpSiVGRY3QQiKfCq8Ba9+IWd
azB09z6D+pDjOUcQzGfH0bQsmYDGPNiO5o+oZYf0cr+GZ23NQBwDGZR8xjqjsBEB
XPWPMWOIN8gzoLo6O3VdxRhCUrMCgYEAx+jDoFCDKjvrJhAcUW6cKgXZ0izdLobK
4qDH26Afw2Ju2F/3b8e9+5L8WLqziFydvUQfcLl3btHrzctx2XE4YRRIiufAuEJz
8yBKjCCIGeHRdMtwVx8x+b1NQftTb8k/d5NmYnqZiYQyD3l+1R5Rmk1Zl2FkFut5
EJCrxE+fP6sCgYBTxaRAiRHzw4YQ4jrtEH3TwGoyqNLcpCfy+rlMntvJh0pZAHK4
iqNaB5ab0IdYb9qFD7QNPCGS9YVe9YJwOu3b6hXJ+ij34dzaxiz4Ezsr8IhmLAmC
1uhejk7Vsbrxy/5wEOXyrACi6VA4oSkhQZsV4KStyiH4v6HL1RcYqnuPxwKBgQCP
fxqlggWVFGun59qb7Xz1gTuo7YFbO3B5GxY7JYaHVqngcYqI12UdJ5YyDtp+YJTt
3e9/l/IOP2s3TvkLL4Vb0hZ8dvzUhwb6F0zLpzJq+bjDUKD0OLVD4kmJumFbFaeU
Kt9Mg1qg5p6Ukw6i5l+HFkzgKA2TkjVV2bMieFEEfwKBgHAxLffRyMer0vEzs7iq
Sm05FVoURm9wqeM0SCpXtXOtuXiDoxtw8jSCh/mXTiKAgEx3K/KO4fiBB5tCQKzA
TYcP72Jmqvuc4d/5FFH2sKuCiJ5s/XAlGo2zGSDbbkV7KJnRxOtYptW3Zt1VBQG1
ECOoJd0HryxcP3qSddJHPMV9
-----END PRIVATE KEY-----

@ -298,6 +298,11 @@
<version>1.1.3</version> <version>1.1.3</version>
<scope>compile</scope> <scope>compile</scope>
</dependency> </dependency>
<dependency>
<groupId>com.github.wechatpay-apiv3</groupId>
<artifactId>wechatpay-apache-httpclient</artifactId>
<version>0.2.2</version>
</dependency>
</dependencies> </dependencies>
</project> </project>

@ -338,6 +338,45 @@ public class HttpsUtils {
return null; return null;
} }
public static JSONObject doWxH5PayPost(String apiUrl, Map<String,Object> body, Map<String,Object> header) {
CloseableHttpClient httpClient = null;
if (apiUrl.startsWith("https")) {
httpClient = HttpClients.custom().setSSLSocketFactory(createSSLConnSocketFactory())
.setConnectionManager(connMgr).setDefaultRequestConfig(requestConfig).build();
} else {
httpClient = HttpClients.createDefault();
}
String httpStr = null;
CloseableHttpResponse response = null;
try {
HttpPost httpPost = new HttpPost(apiUrl);
httpPost.setConfig(requestConfig);
for (Map.Entry<String, Object> entry : header.entrySet()) {
httpPost.setHeader(entry.getKey(), entry.getValue().toString());
}
StringEntity stringEntity = new StringEntity(body.get("from").toString());// 解决中文乱码问题
stringEntity.setContentEncoding("UTF-8");
stringEntity.setContentType("application/x-www-form-urlencoded");
httpPost.setEntity(stringEntity);
response = httpClient.execute(httpPost);
HttpEntity entity = response.getEntity();
httpStr = EntityUtils.toString(entity, "UTF-8");
return JSON.parseObject(httpStr);
} catch (Exception e) {
log.error(e.getMessage(),e);
} finally {
if (response != null) {
try {
EntityUtils.consume(response.getEntity());
} catch (IOException e) {
log.error(e.getMessage(),e);
}
}
}
return null;
}
/** /**
* 发送 POST 请求JSON形式 * 发送 POST 请求JSON形式
* *

@ -112,7 +112,7 @@ public class HighUserServiceImpl implements HighUserService {
if (highUser == null) { if (highUser == null) {
throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, "未找到用户"); throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, "未找到用户");
} }
if (StringUtils.isBlank(highUser.getPhone())) { if (StringUtils.isNotBlank(highUser.getPhone())) {
throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, "已绑定手机号,请勿重复绑定"); throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, "已绑定手机号,请勿重复绑定");
} }
@ -125,6 +125,7 @@ public class HighUserServiceImpl implements HighUserService {
highUser.setStatus(0); highUser.setStatus(0);
highUserMapper.updateByPrimaryKey(highUser); highUserMapper.updateByPrimaryKey(highUser);
user.setGold(user.getGold() + highUser.getGold());
user.setHeaderImg(highUser.getHeaderImg()); user.setHeaderImg(highUser.getHeaderImg());
user.setName(highUser.getName()); user.setName(highUser.getName());
user.setOpenId(highUser.getOpenId()); user.setOpenId(highUser.getOpenId());

Loading…
Cancel
Save