Browse Source

fix pay v3

release_toaliyun_real
zhengfangyuan 3 years ago
parent
commit
887c92cca4
2 changed files with 25 additions and 11 deletions
  1. +19
    -0
      mallinkService/src/main/java/com/iformall/pay/WxPayV3.java
  2. +6
    -11
      mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v3/miniApp/appPay/WxMiniAppPayV3AdapterService.java

+ 19
- 0
mallinkService/src/main/java/com/iformall/pay/WxPayV3.java View File

@@ -2,6 +2,7 @@ package com.iformall.pay;


import java.io.IOException; import java.io.IOException;
import java.io.UnsupportedEncodingException; import java.io.UnsupportedEncodingException;
import java.nio.charset.StandardCharsets;
import java.security.GeneralSecurityException; import java.security.GeneralSecurityException;
import java.security.cert.X509Certificate; import java.security.cert.X509Certificate;
import java.util.HashMap; import java.util.HashMap;
@@ -11,8 +12,11 @@ import java.util.Map;
import javax.crypto.IllegalBlockSizeException; import javax.crypto.IllegalBlockSizeException;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.aliyun.openservices.shade.org.apache.commons.lang3.StringUtils; import com.aliyun.openservices.shade.org.apache.commons.lang3.StringUtils;
import com.github.binarywang.wxpay.config.WxPayConfig;
import com.github.binarywang.wxpay.exception.WxPayException; import com.github.binarywang.wxpay.exception.WxPayException;
import com.github.binarywang.wxpay.service.WxPayService; import com.github.binarywang.wxpay.service.WxPayService;
import com.github.binarywang.wxpay.v3.auth.PrivateKeySigner;
import com.github.binarywang.wxpay.v3.auth.Signer.SignatureResult;
import com.github.binarywang.wxpay.v3.util.AesUtils; import com.github.binarywang.wxpay.v3.util.AesUtils;
import com.github.binarywang.wxpay.v3.util.RsaCryptoUtil; import com.github.binarywang.wxpay.v3.util.RsaCryptoUtil;
import com.iformall.service.pay.service.pay.wx.sft.entity.SFTCombineCloseReq; import com.iformall.service.pay.service.pay.wx.sft.entity.SFTCombineCloseReq;
@@ -26,6 +30,7 @@ import com.iformall.service.pay.service.refund.wx.v3.entity.V3PayRefundReq;
import com.iformall.service.pay.service.share.wx.v3.entity.V3PayShareQueryReq; import com.iformall.service.pay.service.share.wx.v3.entity.V3PayShareQueryReq;
import com.iformall.service.pay.service.share.wx.v3.entity.V3PayShareReq; import com.iformall.service.pay.service.share.wx.v3.entity.V3PayShareReq;
import com.iformall.service.pay.service.share.wx.v3.entity.V3PayShareUnfreezeReq; import com.iformall.service.pay.service.share.wx.v3.entity.V3PayShareUnfreezeReq;
import com.iformall.utils.MapUtil;


import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@@ -72,6 +77,20 @@ public class WxPayV3 {
return new String(content.getBytes("ISO-8859-1"), "UTF-8"); return new String(content.getBytes("ISO-8859-1"), "UTF-8");
} }
//小程序下单支付签名
public static String getMiniAppPayEntry(WxPayService payService,String appId,String timestamp,String noncestr,String prepayId) {
Map<String, String> sighMap = new HashMap();
sighMap.put("appId", appId+"\n");
sighMap.put("timeStamp", timestamp+"\n");
sighMap.put("nonceStr", noncestr+"\n");
sighMap.put("package", "prepay_id=" + prepayId+"\n");
WxPayConfig config = payService.getConfig();
//初始化
config.getVerifier();
String content = JSON.toJSONString(sighMap);
return new PrivateKeySigner(config.getCertSerialNo(), config.getPrivateKey()).signMessage(content.getBytes(StandardCharsets.UTF_8));
}
//敏感信息加密 //敏感信息加密
public static String entry(WxPayService payService,String content) throws IllegalBlockSizeException { public static String entry(WxPayService payService,String content) throws IllegalBlockSizeException {
X509Certificate certificate = payService.getConfig().getVerifier().getValidCertificate(); X509Certificate certificate = payService.getConfig().getVerifier().getValidCertificate();


+ 6
- 11
mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v3/miniApp/appPay/WxMiniAppPayV3AdapterService.java View File

@@ -109,7 +109,7 @@ public class WxMiniAppPayV3AdapterService extends BaseWxPayV3AdapterService impl
return req; return req;
} }
private PayAdapterResult getOrderPResult(String response,WxPayOrder record,WxPayAccount payAccount,WxAppinfo appInfo) {
private PayAdapterResult getOrderPResult(String response,WxPayOrder record,WxPayAccount payAccount,WxAppinfo appInfo,WxPayService payService) {
PayAdapterResult par = new PayAdapterResult(); PayAdapterResult par = new PayAdapterResult();
if (StringUtils.isBlank(response)) { if (StringUtils.isBlank(response)) {
par.setSuccess(false); par.setSuccess(false);
@@ -125,22 +125,16 @@ public class WxMiniAppPayV3AdapterService extends BaseWxPayV3AdapterService impl
par.setMsg("success."); par.setMsg("success.");
record.setPrepayId(prepayId); record.setPrepayId(prepayId);
record.setUpdateTime(new Date()); record.setUpdateTime(new Date());
par.setData(getPayRetMap(appInfo, prepayId, payAccount, record));
par.setData(getPayRetMap(payService,appInfo, prepayId, payAccount, record));
} }
} }
return par; return par;
} }
private Map getPayRetMap(WxAppinfo appInfo,String prepayId,WxPayAccount payAccount,WxPayOrder record) {
private Map getPayRetMap(WxPayService payService,WxAppinfo appInfo,String prepayId,WxPayAccount payAccount,WxPayOrder record) {
String timestamp = String.valueOf(Utility.getCurrentTimeStamp()); String timestamp = String.valueOf(Utility.getCurrentTimeStamp());
String noncestr = Utility.generate32UUID(); String noncestr = Utility.generate32UUID();
Map<String, String> sighMap = MapUtil.getOrderMap();
sighMap.put("appId", appInfo.getAppId());
sighMap.put("timeStamp", timestamp);
sighMap.put("nonceStr", noncestr);
sighMap.put("package", "prepay_id=" + prepayId);
sighMap.put("signType", "RSA");
String signAgent = WxPayment.createSignHMAC(sighMap, payAccount.getApiKey());
String signAgent = WxPayV3.getMiniAppPayEntry(payService, appInfo.getAppId(), timestamp, noncestr, prepayId);
Map returnMap = new HashMap(); Map returnMap = new HashMap();
returnMap.put("appId", appInfo.getAppId()); returnMap.put("appId", appInfo.getAppId());
returnMap.put("timeStamp", timestamp); returnMap.put("timeStamp", timestamp);
@@ -151,6 +145,7 @@ public class WxMiniAppPayV3AdapterService extends BaseWxPayV3AdapterService impl
returnMap.put("payOrderId", String.valueOf(record.getId())); returnMap.put("payOrderId", String.valueOf(record.getId()));
return returnMap; return returnMap;
} }
private V3CombinePayCommonMiniAppReq generateCombinePayReqeust(WxPayAccount payAccount,WxComposeOrder composeOrder,List<WxOrder> childOrders,String productName, private V3CombinePayCommonMiniAppReq generateCombinePayReqeust(WxPayAccount payAccount,WxComposeOrder composeOrder,List<WxOrder> childOrders,String productName,
WxPayOrder record,WxAppinfo appInfo,String openId,String appId,Date currentDate,EnumPayShare isShare) throws Exception { WxPayOrder record,WxAppinfo appInfo,String openId,String appId,Date currentDate,EnumPayShare isShare) throws Exception {
@@ -214,7 +209,7 @@ public class WxMiniAppPayV3AdapterService extends BaseWxPayV3AdapterService impl
V3PayCommonMiniAppReq payReq = generatePayCommonRequest(payAccount,composeOrder,productName,record,openId,appInfo,currentDate); V3PayCommonMiniAppReq payReq = generatePayCommonRequest(payAccount,composeOrder,productName,record,openId,appInfo,currentDate);
try { try {
String response = WxPayV3.payCommonWithMiniApp(payService, payReq); String response = WxPayV3.payCommonWithMiniApp(payService, payReq);
return getOrderPResult(response,record,payAccount,appInfo);
return getOrderPResult(response,record,payAccount,appInfo,payService);
}catch(WxPayException e) { }catch(WxPayException e) {
log.error("wexin pay v3 error",e); log.error("wexin pay v3 error",e);
throw new MallinkException(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(),e.getCustomErrorMsg()); throw new MallinkException(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(),e.getCustomErrorMsg());


Loading…
Cancel
Save