From 887c92cca478cac8d86bb841361cb5e2e6ebc9f7 Mon Sep 17 00:00:00 2001 From: zhengfangyuan Date: Wed, 24 Aug 2022 17:39:17 +0800 Subject: [PATCH] fix pay v3 --- .../main/java/com/iformall/pay/WxPayV3.java | 19 +++++++++++++++++++ .../appPay/WxMiniAppPayV3AdapterService.java | 17 ++++++----------- 2 files changed, 25 insertions(+), 11 deletions(-) diff --git a/mallinkService/src/main/java/com/iformall/pay/WxPayV3.java b/mallinkService/src/main/java/com/iformall/pay/WxPayV3.java index 7423689bc..573bb35fe 100644 --- a/mallinkService/src/main/java/com/iformall/pay/WxPayV3.java +++ b/mallinkService/src/main/java/com/iformall/pay/WxPayV3.java @@ -2,6 +2,7 @@ package com.iformall.pay; import java.io.IOException; import java.io.UnsupportedEncodingException; +import java.nio.charset.StandardCharsets; import java.security.GeneralSecurityException; import java.security.cert.X509Certificate; import java.util.HashMap; @@ -11,8 +12,11 @@ import java.util.Map; import javax.crypto.IllegalBlockSizeException; import com.alibaba.fastjson.JSON; 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.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.RsaCryptoUtil; 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.V3PayShareReq; import com.iformall.service.pay.service.share.wx.v3.entity.V3PayShareUnfreezeReq; +import com.iformall.utils.MapUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -72,6 +77,20 @@ public class WxPayV3 { 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 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 { X509Certificate certificate = payService.getConfig().getVerifier().getValidCertificate(); diff --git a/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v3/miniApp/appPay/WxMiniAppPayV3AdapterService.java b/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v3/miniApp/appPay/WxMiniAppPayV3AdapterService.java index 0aa914eda..e15a4d601 100644 --- a/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v3/miniApp/appPay/WxMiniAppPayV3AdapterService.java +++ b/mallinkService/src/main/java/com/iformall/service/pay/service/pay/wx/v3/miniApp/appPay/WxMiniAppPayV3AdapterService.java @@ -109,7 +109,7 @@ public class WxMiniAppPayV3AdapterService extends BaseWxPayV3AdapterService impl 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(); if (StringUtils.isBlank(response)) { par.setSuccess(false); @@ -125,22 +125,16 @@ public class WxMiniAppPayV3AdapterService extends BaseWxPayV3AdapterService impl par.setMsg("success."); record.setPrepayId(prepayId); record.setUpdateTime(new Date()); - par.setData(getPayRetMap(appInfo, prepayId, payAccount, record)); + par.setData(getPayRetMap(payService,appInfo, prepayId, payAccount, record)); } } 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 noncestr = Utility.generate32UUID(); - Map 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(); returnMap.put("appId", appInfo.getAppId()); returnMap.put("timeStamp", timestamp); @@ -151,6 +145,7 @@ public class WxMiniAppPayV3AdapterService extends BaseWxPayV3AdapterService impl returnMap.put("payOrderId", String.valueOf(record.getId())); return returnMap; } + private V3CombinePayCommonMiniAppReq generateCombinePayReqeust(WxPayAccount payAccount,WxComposeOrder composeOrder,List childOrders,String productName, 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); try { String response = WxPayV3.payCommonWithMiniApp(payService, payReq); - return getOrderPResult(response,record,payAccount,appInfo); + return getOrderPResult(response,record,payAccount,appInfo,payService); }catch(WxPayException e) { log.error("wexin pay v3 error",e); throw new MallinkException(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(),e.getCustomErrorMsg());