diff --git a/.m2/settings.xml b/.m2/settings.xml index 615216734..027ac8221 100644 --- a/.m2/settings.xml +++ b/.m2/settings.xml @@ -10,6 +10,12 @@ + + alimaven + aliyun maven + http://maven.aliyun.com/nexus/content/groups/public/ + central + nexus collcollege diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/wx/PreOrderDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/wx/PreOrderDTO.java new file mode 100644 index 000000000..befe8863b --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/wx/PreOrderDTO.java @@ -0,0 +1,40 @@ +package com.cool.store.dto.wx; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 动态下单参数 + */ +@Data +@ApiModel +public class PreOrderDTO { + /** + * 订单号(业务) + */ + @ApiModelProperty("订单号") + private String outTradeNo; + /** + * 用户openId + */ + @ApiModelProperty("用户openId") + private String wxOpenId; + /** + * 订单描述 + */ + @ApiModelProperty("订单描述") + private String description; + /** + * 订单总金额,单位为分 + */ + @ApiModelProperty("订单总金额") + private int total; + + public PreOrderDTO(String outTradeNo, String wxOpenId, String description, int total) { + this.outTradeNo = outTradeNo; + this.wxOpenId = wxOpenId; + this.description = description; + this.total = total; + } +} \ No newline at end of file diff --git a/coolstore-partner-service/pom.xml b/coolstore-partner-service/pom.xml index 5d776a6e1..a2ea00507 100644 --- a/coolstore-partner-service/pom.xml +++ b/coolstore-partner-service/pom.xml @@ -109,6 +109,10 @@ junit-jupiter test + + com.github.wechatpay-apiv3 + wechatpay-java + \ No newline at end of file diff --git a/coolstore-partner-service/src/main/java/com/cool/store/config/weixin/WxPayAutoCertificateConfig.java b/coolstore-partner-service/src/main/java/com/cool/store/config/weixin/WxPayAutoCertificateConfig.java new file mode 100644 index 000000000..0fede3391 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/config/weixin/WxPayAutoCertificateConfig.java @@ -0,0 +1,34 @@ +package com.cool.store.config.weixin; + +import com.wechat.pay.java.core.RSAAutoCertificateConfig; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import javax.annotation.Resource; + +/** + * @description 微信支付证书自动更新配置 + * @date 2024-03-13 14:28 + */ +@Configuration +public class WxPayAutoCertificateConfig { + + @Resource + private WxPayConfig wxPayConfig; + /** + * 初始化商户配置 + * 使用自动更新平台证书的RSA配置 + * 一个商户号只能初始化一个配置,否则会因为重复的下载任务报错 + * @return + */ + @Bean + public RSAAutoCertificateConfig rsaAutoCertificateConfig() { + RSAAutoCertificateConfig config = new RSAAutoCertificateConfig.Builder() + .merchantId(wxPayConfig.getMerchantId()) + .privateKeyFromPath(wxPayConfig.getPrivateKeyPath()) + .merchantSerialNumber(wxPayConfig.getMerchantSerialNumber()) + .apiV3Key(wxPayConfig.getApiV3Key()) + .build(); + return config; + } +} \ No newline at end of file diff --git a/coolstore-partner-service/src/main/java/com/cool/store/config/weixin/WxPayConfig.java b/coolstore-partner-service/src/main/java/com/cool/store/config/weixin/WxPayConfig.java new file mode 100644 index 000000000..fa5175958 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/config/weixin/WxPayConfig.java @@ -0,0 +1,29 @@ +package com.cool.store.config.weixin; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * @description 微信支付配置类 + * @date 2024-03-13 14:28 + */ +@Data +@Component +@ConfigurationProperties(prefix = "wx.pay") +public class WxPayConfig { + + //mchid + private String merchantId; + /** 商户API私钥路径 */ + private String privateKeyPath; + //商户证书序列号 + private String merchantSerialNumber; + //商户APIv3密钥 + private String apiV3Key; + //支付通知地址 + private String payNotifyUrl; + //退款回调地址 + private String backNotifyUrl; + +} \ No newline at end of file diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/WxPayService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/WxPayService.java new file mode 100644 index 000000000..1926bb966 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/WxPayService.java @@ -0,0 +1,70 @@ +package com.cool.store.service; + +import com.cool.store.dto.wx.PreOrderDTO; +import com.wechat.pay.java.service.payments.jsapi.model.PrepayWithRequestPaymentResponse; +import com.wechat.pay.java.service.payments.model.Transaction; +import com.wechat.pay.java.service.refund.model.Refund; +import org.springframework.http.ResponseEntity; + +import javax.servlet.http.HttpServletRequest; +import java.io.IOException; +import java.math.BigDecimal; + +/** + * 微信支付V3 + */ +public interface WxPayService { + /** + * JSAPI下单 + * + * @return + */ + PrepayWithRequestPaymentResponse jsApiOrder(PreOrderDTO preOrderDTO); + /** + * 支付回调 + * + * @param request + * @return + * @throws IOException + */ + ResponseEntity payNotify(HttpServletRequest request) throws IOException; + /** + * 根据商户订单号查询订单 + * + * @param outTradeNo + * @return + */ + Transaction queryOrderByOutTradeNo(String outTradeNo); + + /** + * 根据支付订单号查询订单 + * + * @param paymentNo + * @return + */ + Transaction queryOrderByPaymentNo(String paymentNo); + + /** + * 申请退款 + * @param orderID + * @param outRefundNo + * @param backAmount + */ + void applyRefund(String orderID, String outRefundNo, BigDecimal backAmount); + + ResponseEntity refundNotify(HttpServletRequest request) throws IOException; + + /** + * 获取订单退款结果信息 + * @param outRefundNo + * @return + */ + Refund getRefundOrderInfo(String outRefundNo); + /** + * 关闭订单 + * + * @return + */ + void closePay(String outTradeNo); + +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/WxPayServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/WxPayServiceImpl.java new file mode 100644 index 000000000..8a63df9d0 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/WxPayServiceImpl.java @@ -0,0 +1,273 @@ +package com.cool.store.service.impl; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.cool.store.config.weixin.WxPayConfig; +import com.cool.store.dto.wx.PreOrderDTO; +import com.cool.store.service.WxPayService; +import com.cool.store.utils.HttpServletUtils; +import com.wechat.pay.java.core.RSAAutoCertificateConfig; +import com.wechat.pay.java.core.exception.HttpException; +import com.wechat.pay.java.core.exception.MalformedMessageException; +import com.wechat.pay.java.core.exception.ServiceException; +import com.wechat.pay.java.core.exception.ValidationException; +import com.wechat.pay.java.core.notification.NotificationParser; +import com.wechat.pay.java.core.notification.RequestParam; +import com.wechat.pay.java.service.payments.jsapi.JsapiServiceExtension; +import com.wechat.pay.java.service.payments.jsapi.model.*; +import com.wechat.pay.java.service.payments.jsapi.model.Amount; +import com.wechat.pay.java.service.payments.model.Transaction; +import com.wechat.pay.java.service.refund.RefundService; +import com.wechat.pay.java.service.refund.model.*; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.io.IOException; +import java.math.BigDecimal; + +/** + * 微信支付相关 + * @author + * @date 2024-03-13 14:28 + */ +@Slf4j +@Service +public class WxPayServiceImpl implements WxPayService { + + @Resource + private RSAAutoCertificateConfig rsaAutoCertificateConfig; + + @Resource + private WxPayConfig wxPayConfig; + + @Value("${weixin.appId}") + private String wxAppId; + + /** + * 微信支付 + */ + @Override + @Transactional + public PrepayWithRequestPaymentResponse jsApiOrder(PreOrderDTO order) { + log.info("微信预支付下单:{}", JSONObject.toJSONString(order)); + //请求微信支付相关配置 + PrepayWithRequestPaymentResponse response = new PrepayWithRequestPaymentResponse(); + try { + PrepayRequest request = new PrepayRequest(); + request.setAppid(wxAppId); + request.setMchid(wxPayConfig.getMerchantId()); + request.setDescription(order.getDescription()); + request.setOutTradeNo(order.getOutTradeNo()); + request.setNotifyUrl(wxPayConfig.getPayNotifyUrl()); + Amount amount = new Amount(); + amount.setTotal(order.getTotal()); + amount.setCurrency("CNY"); + request.setAmount(amount); + Payer payer = new Payer(); + payer.setOpenid(order.getWxOpenId()); + request.setPayer(payer); + log.info("请求预支付下单,请求参数:{}", JSONObject.toJSONString(request)); + // 调用预下单接口 + response = getJsapiService().prepayWithRequestPayment(request); + log.info("订单【{}】发起预支付成功,返回信息:{}", order.getOutTradeNo(), response); + } catch (HttpException e) { + // 发送HTTP请求失败 + log.error("微信下单发送HTTP请求失败,错误信息:{}", e.getHttpRequest()); + } catch (ServiceException e) { + // 服务返回状态小于200或大于等于300,例如500 + log.error("微信下单服务状态错误,错误信息:{}", e.getErrorMessage()); + } catch (MalformedMessageException e) { + // 服务返回成功,返回体类型不合法,或者解析返回体失败 + log.error("服务返回成功,返回体类型不合法,或者解析返回体失败,错误信息:{}", e.getMessage()); + } + return response; + } + + /** + * 微信回调 + * + * @param request + * @return + * @throws IOException + */ + @Transactional + @Override + public ResponseEntity payNotify(HttpServletRequest request) throws IOException { + log.info("------收到支付通知------"); + RequestParam requestParam = new RequestParam.Builder() + .serialNumber(request.getHeader("Wechatpay-Serial")) + .nonce(request.getHeader("Wechatpay-Nonce")) + .signature(request.getHeader("Wechatpay-Signature")) + .timestamp(request.getHeader("Wechatpay-Timestamp")) + .signType(request.getHeader("Wechatpay-Signature-Type")) + .body(HttpServletUtils.getRequestBody(request)) + .build(); + // 初始化 NotificationParser + NotificationParser parser = new NotificationParser(rsaAutoCertificateConfig); + // 以支付通知回调为例,验签、解密并转换成 Transaction + log.info("验签参数:{}", requestParam); + try { + // 验签、解密并转换成 Transaction(返回参数对象) + Transaction transaction = parser.parse(requestParam, Transaction.class); + log.info("验签成功!-支付回调结果:{}", JSON.toJSONString(transaction)); + // TODO 处理你的业务逻辑 + //修改订单前,建议主动请求微信查询订单是否支付成功,防止恶意post + + //修改订单信息 + // 处理成功,返回 200 OK 状态码 + return ResponseEntity.status(HttpStatus.OK).build(); + } catch (ValidationException e) { + log.error("sign verification failed", e); + log.error("微信支付回调v3java失败=" + e.getMessage(), e); + } + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build(); + } + + @Override + public Transaction queryOrderByOutTradeNo(String outTradeNo) { + QueryOrderByOutTradeNoRequest request = new QueryOrderByOutTradeNoRequest(); + request.setMchid(wxPayConfig.getMerchantId()); + request.setOutTradeNo(outTradeNo); + Transaction result = getJsapiService().queryOrderByOutTradeNo(request); + if (Transaction.TradeStateEnum.SUCCESS != result.getTradeState()) { + log.info("内部订单号【{}】,微信支付订单号【{}】支付未成功", result.getOutTradeNo(), result.getTransactionId()); + } + // TODO 处理业务逻辑 + return result; + } + + @Override + public Transaction queryOrderByPaymentNo(String paymentNo) { + QueryOrderByIdRequest queryRequest = new QueryOrderByIdRequest(); + queryRequest.setMchid(wxPayConfig.getMerchantId()); + queryRequest.setTransactionId(paymentNo); + Transaction result = getJsapiService().queryOrderById(queryRequest); + if (Transaction.TradeStateEnum.SUCCESS != result.getTradeState()) { + log.info("内部订单号【{}】,微信支付订单号【{}】支付未成功", result.getOutTradeNo(), result.getTransactionId()); + } + // TODO 处理业务逻辑 + return result; + } + + /** + * 申请退款 + * @param orderID + * @param outRefundNo + * @param backAmount + */ + @Override + public void applyRefund(String orderID, String outRefundNo, BigDecimal backAmount) { + Transaction transaction = queryOrderByOutTradeNo(orderID); + CreateRequest request = new CreateRequest(); + request.setTransactionId(transaction.getTransactionId()); + request.setNotifyUrl(wxPayConfig.getBackNotifyUrl()); + request.setOutTradeNo(transaction.getOutTradeNo()); + request.setOutRefundNo(outRefundNo); + request.setReason("测试退款"); + AmountReq amountReq = new AmountReq(); + amountReq.setCurrency(transaction.getAmount().getCurrency()); + amountReq.setTotal(Long.parseLong((transaction.getAmount().getTotal().toString()))); + amountReq.setRefund((backAmount.multiply(new BigDecimal(100))).longValue()); + request.setAmount(amountReq); + getRefundService().create(request); + } + + @Override + public ResponseEntity refundNotify(HttpServletRequest request) throws IOException { + log.info("------收到退款回调通知------"); + RequestParam requestParam = new RequestParam.Builder() + .serialNumber(request.getHeader("Wechatpay-Serial")) + .nonce(request.getHeader("Wechatpay-Nonce")) + .signature(request.getHeader("Wechatpay-Signature")) + .timestamp(request.getHeader("Wechatpay-Timestamp")) + .signType(request.getHeader("Wechatpay-Signature-Type")) + .body(HttpServletUtils.getRequestBody(request)) + .build(); + // 如果已经初始化了 RSAAutoCertificateConfig,可以直接使用 config + // 初始化 NotificationParser + NotificationParser parser = new NotificationParser(rsaAutoCertificateConfig); + log.info("验签参数:{}", requestParam); + try { + // 验签、解密并转换成 Refund + Refund refund = parser.parse(requestParam, Refund.class); + log.info("验签成功!-退款回调结果:{}", JSON.toJSONString(refund)); + //记录日志信息 + Status state = refund.getStatus(); + String orderID = refund.getOutTradeNo(); + String backID = refund.getOutRefundNo(); + System.out.println("订单ID:" + orderID); + System.out.println("退款ID:" + backID); + if (state == Status.PROCESSING) { + //TODO------ + //根据自己的需求处理相应的业务逻辑,异步 + + //通知微信回调成功 + return ResponseEntity.status(HttpStatus.OK).build(); + } else if (state == Status.SUCCESS) { + //TODO------ + //根据自己的需求处理相应的业务逻辑,异步 + + //通知微信回调成功 + return ResponseEntity.status(HttpStatus.OK).build(); + } else { + System.out.println("微信回调失败,JsapiPayController.Refund:" + state.toString()); + //通知微信回调失败 + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build(); + } + } catch (ValidationException e) { + log.error("sign verification failed", e); + log.error("微信支付回调v3java失败=" + e.getMessage(), e); + } + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build(); + } + + /** + * 获取订单退款结果信息 + * @param outRefundNo + * @return + */ + @Override + public Refund getRefundOrderInfo(String outRefundNo) { + QueryByOutRefundNoRequest request = new QueryByOutRefundNoRequest(); + request.setOutRefundNo(outRefundNo); + // 调用request.setXxx(val)设置所需参数,具体参数可见Request定义 + // 调用接口 + return getRefundService().queryByOutRefundNo(request); + } + + /** + * 关闭微信支付 + */ + @Override + public void closePay(String outTradeNo) { + CloseOrderRequest closeRequest = new CloseOrderRequest(); + closeRequest.setMchid(wxPayConfig.getMerchantId()); + closeRequest.setOutTradeNo(outTradeNo); + getJsapiService().closeOrder(closeRequest); + } + /** + * 创建小程序支付服务 + * @return + */ + protected JsapiServiceExtension getJsapiService() { + JsapiServiceExtension jsapiServiceExtension = + new JsapiServiceExtension.Builder() + .config(rsaAutoCertificateConfig) + .signType("RSA") // 不填默认为RSA + .build(); + return jsapiServiceExtension; + } + + protected RefundService getRefundService() { + RefundService refundService = new RefundService.Builder() + .config(rsaAutoCertificateConfig) + .build(); + return refundService; + } +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/utils/HttpServletUtils.java b/coolstore-partner-service/src/main/java/com/cool/store/utils/HttpServletUtils.java new file mode 100644 index 000000000..36cc3d7d6 --- /dev/null +++ b/coolstore-partner-service/src/main/java/com/cool/store/utils/HttpServletUtils.java @@ -0,0 +1,40 @@ +package com.cool.store.utils; + +import javax.servlet.ServletInputStream; +import javax.servlet.http.HttpServletRequest; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; + +/** + * @author + * @date 2023/07/26 上午9:17 + **/ +public class HttpServletUtils { + /** + * 获取请求体 + * + * @param request + * @return + * @throws IOException + */ + public static String getRequestBody(HttpServletRequest request) throws IOException { + ServletInputStream stream = null; + BufferedReader reader = null; + StringBuffer sb = new StringBuffer(); + try { + stream = request.getInputStream(); + // 获取响应 + reader = new BufferedReader(new InputStreamReader(stream)); + String line; + while ((line = reader.readLine()) != null) { + sb.append(line); + } + } catch (IOException e) { + throw new IOException("读取返回支付接口数据流出现异常!"); + } finally { + reader.close(); + } + return sb.toString(); + } +} \ No newline at end of file diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniProgramAppController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniProgramAppController.java index 9fca35c88..acb2596c3 100644 --- a/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniProgramAppController.java +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/MiniProgramAppController.java @@ -14,7 +14,6 @@ import javax.annotation.Resource; import javax.validation.Valid; /** - * @author zhangchenbiao * @FileName: MiniProgramAppController * @Description: * @date 2023-05-29 14:28 @@ -22,7 +21,7 @@ import javax.validation.Valid; @Api(tags = "微信小程序app接口") @RestController -@RequestMapping({"/v1/partnerManage/miniProgram" }) +@RequestMapping({"/mini/miniProgram" }) public class MiniProgramAppController { @Resource diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/WechatPayController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/WechatPayController.java new file mode 100644 index 000000000..659f9c214 --- /dev/null +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webc/WechatPayController.java @@ -0,0 +1,90 @@ +package com.cool.store.controller.webc; + +import com.cool.store.dto.wx.PreOrderDTO; +import com.cool.store.response.ResponseResult; +import com.cool.store.service.WxPayService; +import com.wechat.pay.java.service.payments.jsapi.model.PrepayWithRequestPaymentResponse; +import com.wechat.pay.java.service.payments.model.Transaction; +import com.wechat.pay.java.service.refund.model.Refund; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.math.BigDecimal; +import java.util.Map; + +/** + * @FileName: WechatPayController + * @Description: + * @date 2024-03-13 14:28 + */ + +@Slf4j +@Api(tags = "微信小程序支付接口") +@RestController +@RequestMapping({"/mini/wechatPay"}) +public class WechatPayController { + + @Resource + private WxPayService wxPayService; + + @ApiOperation(value = "预支付订单", notes = "预支付订单") + @PostMapping("/create") + public ResponseResult createOrder(@Validated @RequestBody PreOrderDTO preOrderDTO) { + //创建初始化订单 + PrepayWithRequestPaymentResponse response = wxPayService.jsApiOrder(preOrderDTO); + //更新订单状态 + return ResponseResult.success(response); + } + + @ApiOperation("根据商户订单号查询订单") + @GetMapping("/queryOrderByOutTradeNo") + public ResponseResult queryOrderByOutTradeNo(@RequestParam(value = "outTradeNo",required = true)String outTradeNo) { + return ResponseResult.success(wxPayService.queryOrderByOutTradeNo(outTradeNo)); + } + + @ApiOperation("根据支付订单号查询订单") + @GetMapping("/queryOrderByOutTradeNo") + public ResponseResult queryOrderByPaymentNo(@RequestParam(value = "paymentNo",required = true)String paymentNo) { + return ResponseResult.success(wxPayService.queryOrderByPaymentNo(paymentNo)); + } + + @ApiOperation(value = "预支付-回调") + @PostMapping("/payNotify") + public ResponseEntity payNotify(HttpServletRequest request) throws IOException { + ResponseEntity responseEntity = wxPayService.payNotify(request); + return responseEntity; + } + + @ApiOperation(value = "退款申请") + @PostMapping("/applyRefund") + public ResponseResult applyRefund(@RequestBody Map params){ + String orderID = String.valueOf(params.get("orderID")); + String backID = String.valueOf(params.get("backID")); + BigDecimal backAmount = new BigDecimal(String.valueOf(params.get("backAmount"))); + wxPayService.applyRefund(orderID, backID, backAmount); + return ResponseResult.success(true); + } + + @ApiOperation(value = "退款回调") + @PostMapping("/refundNotify") + public ResponseEntity refundNotify(HttpServletRequest request, HttpServletResponse response) throws IOException { + ResponseEntity responseEntity = wxPayService.refundNotify(request); + return responseEntity; + } + + @GetMapping("/getRefundOrderInfo") + @ApiOperation("退款查询") + public ResponseResult getRefundOrderInfo(@RequestParam(value = "outRefundNo",required = true)String outRefundNo){ + Refund refund = wxPayService.getRefundOrderInfo(outRefundNo); + return ResponseResult.success(refund); + } + +} diff --git a/coolstore-partner-web/src/main/resources/application.properties b/coolstore-partner-web/src/main/resources/application.properties index 80c20bb1b..54c608cf4 100644 --- a/coolstore-partner-web/src/main/resources/application.properties +++ b/coolstore-partner-web/src/main/resources/application.properties @@ -50,4 +50,11 @@ server.connection-timeout=18000000 server.tomcat.basedir=/tmp/tomcat/partner-b log4j2.formatMsgNoLookups=true -mybatis.configuration.variables.enterpriseId=e17cd2dc350541df8a8b0af9bd27f77d \ No newline at end of file +mybatis.configuration.variables.enterpriseId=e17cd2dc350541df8a8b0af9bd27f77d + +wx.pay.merchantId=1670560201 +wx.pay.privateKeyPath=/home/admin/apiclient/apiclient_key.pem +wx.pay.merchantSerialNumber=66B8E966AFE796BA06006664FCBFBC3F0E2F5A1B +wx.pay.apiV3Key=wxpayzhenghu123JKJHkjafWXCertUt1 +wx.pay.payNotifyUrl=https://abstore-api.coolstore.cn/xfsg/mini/wechatPay/payNotify +wx.pay.backNotifyUrl=https://abstore-api.coolstore.cn/xfsg/mini/wechatPay/backNotify \ No newline at end of file diff --git a/pom.xml b/pom.xml index e9cb25fd1..b704344be 100644 --- a/pom.xml +++ b/pom.xml @@ -221,6 +221,13 @@ logback-kafka-appender 0.2.0-RC2 + + + com.github.wechatpay-apiv3 + wechatpay-java + 0.2.11 + +