From b2a8335cef9c9d85aeca808d500e85b92032585d Mon Sep 17 00:00:00 2001
From: Hentua <wangdoubleone@gmail.com>
Date: Fri, 07 Apr 2023 14:55:51 +0800
Subject: [PATCH] 添加微信支付
---
src/main/java/cc/mrbird/febs/pay/service/IAliPayService.java | 16 ++
src/main/java/cc/mrbird/febs/pay/service/impl/WxPayServiceImpl.java | 100 ++++++++++++++++
src/main/java/cc/mrbird/febs/FebsShiroApplication.java | 1
src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java | 27 +---
src/main/java/cc/mrbird/febs/pay/properties/WxPayProperties.java | 32 +++++
src/main/resources/cert/apiclient_cert.p12 | 0
src/main/java/cc/mrbird/febs/pay/service/impl/AliPayServiceImpl.java | 5
src/main/resources/application-prod.yml | 6 +
src/main/java/cc/mrbird/febs/pay/service/IPayService.java | 8 -
src/main/resources/application-test.yml | 10 +
pom.xml | 6 +
src/main/java/cc/mrbird/febs/pay/configure/WxPayConfiguration.java | 42 +++++++
src/main/resources/application-dev.yml | 28 ++--
src/test/java/cc/mrbird/febs/PayTest.java | 36 ++++++
src/main/java/cc/mrbird/febs/pay/controller/PayCallBackController.java | 28 +++
src/main/resources/application.yml | 2
16 files changed, 298 insertions(+), 49 deletions(-)
diff --git a/pom.xml b/pom.xml
index 7c71dbb..d146f33 100644
--- a/pom.xml
+++ b/pom.xml
@@ -330,6 +330,12 @@
<artifactId>poi-ooxml-schemas</artifactId>
<version>3.8</version>
</dependency>
+
+ <dependency>
+ <groupId>com.github.binarywang</groupId>
+ <artifactId>weixin-java-pay</artifactId>
+ <version>4.4.0</version>
+ </dependency>
</dependencies>
<build>
diff --git a/src/main/java/cc/mrbird/febs/FebsShiroApplication.java b/src/main/java/cc/mrbird/febs/FebsShiroApplication.java
index 3f01173..e8de38a 100644
--- a/src/main/java/cc/mrbird/febs/FebsShiroApplication.java
+++ b/src/main/java/cc/mrbird/febs/FebsShiroApplication.java
@@ -4,6 +4,7 @@
import org.springframework.boot.WebApplicationType;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.transaction.annotation.EnableTransactionManagement;
diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java
index aea0a76..c1fcfda 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java
@@ -18,6 +18,7 @@
import cc.mrbird.febs.pay.model.AgreementPayDto;
import cc.mrbird.febs.pay.model.AgreementSignDto;
import cc.mrbird.febs.pay.model.UnipayDto;
+import cc.mrbird.febs.pay.service.IAliPayService;
import cc.mrbird.febs.pay.service.IPayService;
import cc.mrbird.febs.pay.service.UnipayService;
import cc.mrbird.febs.rabbit.producter.AgentProducer;
@@ -68,9 +69,10 @@
private final RedisUtils redisUtils;
private final AgentProducer agentProducer;
- private final IPayService payService;
+ private final IAliPayService payService;
private final IMallAchieveService mallAchieveService;
private final UnipayService unipayService;
+ private final IPayService wechatPayService;
private final MallMemberBankSignMapper mallMemberBankSignMapper;
private final MallMemberBankMapper mallMemberBankMapper;
@@ -277,30 +279,15 @@
String rcResult = "";
switch (payOrderDto.getType()) {
case "1":
- UnipayDto unipayDtoWx = new UnipayDto();
-// unipayDto.setAmount(new BigDecimal("0.01"));
- unipayDtoWx.setAmount(orderInfo.getAmount());
- unipayDtoWx.setFrpCode("WEIXIN_APP3");
- unipayDtoWx.setTradeMerchantNo("777180800385820");
- unipayDtoWx.setOrderNo(orderInfo.getOrderNo());
List<MallOrderItem> itemsWx = orderInfo.getItems();
if(CollUtil.isEmpty(itemsWx)){
- unipayDtoWx.setProductName("商品");
+ orderInfo.setName("商品");
}else{
- unipayDtoWx.setProductName(itemsWx.get(0).getGoodsName());
+ orderInfo.setName(itemsWx.get(0).getGoodsName());
}
- String unipayStrWx = unipayService.unipay(unipayDtoWx);
- if("fail" == unipayStrWx){
- throw new FebsException("支付失败");
- }else{
-// JSONUtil.parseObj(unipayStr);
- JSONObject jsonObject = JSONUtil.parseObj(unipayStrWx);
- payResultStr = (String) jsonObject.get("r7_TrxNo");
- rcResult = (String) jsonObject.get("rc_Result");
- }
+
+ payResultStr = wechatPayService.pay(orderInfo);
orderInfo.setPayOrderNo(payResultStr);
-// orderInfo.setPayOrderNo(payOrderDto.getPayOrderNo());
-// orderInfo.setPayImage(payOrderDto.getPayImage());
orderInfo.setPayMethod("微信支付");
break;
case "2":
diff --git a/src/main/java/cc/mrbird/febs/pay/configure/WxPayConfiguration.java b/src/main/java/cc/mrbird/febs/pay/configure/WxPayConfiguration.java
new file mode 100644
index 0000000..30cd9ce
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/pay/configure/WxPayConfiguration.java
@@ -0,0 +1,42 @@
+package cc.mrbird.febs.pay.configure;
+
+import cc.mrbird.febs.pay.properties.WxPayProperties;
+import cn.hutool.core.util.StrUtil;
+import com.github.binarywang.wxpay.config.WxPayConfig;
+import com.github.binarywang.wxpay.service.WxPayService;
+import com.github.binarywang.wxpay.service.impl.WxPayServiceImpl;
+import lombok.AllArgsConstructor;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * @author wzy
+ * @date 2023-04-07
+ **/
+@Configuration
+@ConditionalOnClass(WxPayService.class)
+@EnableConfigurationProperties(WxPayProperties.class)
+@AllArgsConstructor
+public class WxPayConfiguration {
+ private WxPayProperties properties;
+
+ @Bean
+ @ConditionalOnMissingBean
+ public WxPayService wxService() {
+ WxPayConfig payConfig = new WxPayConfig();
+ payConfig.setAppId(StrUtil.trim(this.properties.getAppId()));
+ payConfig.setMchId(StrUtil.trim(this.properties.getMchId()));
+ payConfig.setMchKey(StrUtil.trim(this.properties.getMchKey()));
+ payConfig.setKeyPath(StrUtil.trim(this.properties.getKeyPath()));
+
+ // 可以指定是否使用沙箱环境
+ payConfig.setUseSandboxEnv(false);
+
+ WxPayService wxPayService = new WxPayServiceImpl();
+ wxPayService.setConfig(payConfig);
+ return wxPayService;
+ }
+}
diff --git a/src/main/java/cc/mrbird/febs/pay/controller/PayCallBackController.java b/src/main/java/cc/mrbird/febs/pay/controller/PayCallBackController.java
index 6616618..57abbe5 100644
--- a/src/main/java/cc/mrbird/febs/pay/controller/PayCallBackController.java
+++ b/src/main/java/cc/mrbird/febs/pay/controller/PayCallBackController.java
@@ -2,17 +2,20 @@
import cc.mrbird.febs.common.entity.FebsResponse;
import cc.mrbird.febs.pay.properties.AliPayProperties;
+import cc.mrbird.febs.pay.service.IAliPayService;
import cc.mrbird.febs.pay.service.IPayService;
import com.alibaba.fastjson.JSONObject;
import com.alipay.api.AlipayApiException;
import com.alipay.api.internal.util.AlipaySignature;
+import com.github.binarywang.wxpay.bean.notify.WxPayNotifyResponse;
+import com.github.binarywang.wxpay.bean.notify.WxPayOrderNotifyResult;
+import com.github.binarywang.wxpay.exception.WxPayException;
+import com.github.binarywang.wxpay.service.WxPayService;
import com.ijpay.alipay.AliPayApi;
import lombok.extern.slf4j.Slf4j;
+import me.chanjar.weixin.common.service.WxService;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
@@ -28,10 +31,16 @@
public class PayCallBackController {
@Autowired
- private IPayService payService;
+ private IAliPayService payService;
+
+ @Autowired
+ private IPayService wechatPayService;
@Resource
private AliPayProperties aliPayProperties;
+
+ @Autowired
+ private WxPayService wxPayService;
@RequestMapping("/aliCallBack")
public String aliPayCallBack(HttpServletRequest request){
@@ -59,4 +68,13 @@
return "failure";
}
}
+
+ @PostMapping(value = "/wxPayCallBack")
+ public String wxPayCallBack(@RequestBody String xmlData) throws WxPayException {
+ log.info("=======微信回调:{}========", xmlData);
+ WxPayOrderNotifyResult notifyResult = this.wxPayService.parseOrderNotifyResult(xmlData);
+
+ wechatPayService.payCallback(notifyResult.toMap());
+ return WxPayNotifyResponse.success("成功");
+ }
}
diff --git a/src/main/java/cc/mrbird/febs/pay/properties/WxPayProperties.java b/src/main/java/cc/mrbird/febs/pay/properties/WxPayProperties.java
new file mode 100644
index 0000000..cb12763
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/pay/properties/WxPayProperties.java
@@ -0,0 +1,32 @@
+package cc.mrbird.febs.pay.properties;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+
+/**
+ * @author wzy
+ * @date 2023-04-07
+ **/
+@Data
+@ConfigurationProperties(prefix = "pay.wx")
+public class WxPayProperties {
+
+ /**
+ * 设置微信公众号或者小程序等的appid
+ */
+ private String appId;
+
+ /**
+ * 微信支付商户号
+ */
+ private String mchId;
+
+ /**
+ * 微信支付商户密钥
+ */
+ private String mchKey;
+
+ private String keyPath;
+
+ private String noticeUrl;
+}
diff --git a/src/main/java/cc/mrbird/febs/pay/service/IAliPayService.java b/src/main/java/cc/mrbird/febs/pay/service/IAliPayService.java
new file mode 100644
index 0000000..c5035c4
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/pay/service/IAliPayService.java
@@ -0,0 +1,16 @@
+package cc.mrbird.febs.pay.service;
+
+import cc.mrbird.febs.mall.entity.MallOrderInfo;
+
+import java.util.Map;
+
+/**
+ * @author wzy
+ * @date 2021-09-27
+ **/
+public interface IAliPayService {
+
+ String aliPay(MallOrderInfo orderInfo);
+
+ void aliCallback(Map<String, String> params);
+}
diff --git a/src/main/java/cc/mrbird/febs/pay/service/IPayService.java b/src/main/java/cc/mrbird/febs/pay/service/IPayService.java
index 155cfb7..ce5f928 100644
--- a/src/main/java/cc/mrbird/febs/pay/service/IPayService.java
+++ b/src/main/java/cc/mrbird/febs/pay/service/IPayService.java
@@ -4,13 +4,9 @@
import java.util.Map;
-/**
- * @author wzy
- * @date 2021-09-27
- **/
public interface IPayService {
- String aliPay(MallOrderInfo orderInfo);
+ String pay(MallOrderInfo orderInfo);
- void aliCallback(Map<String, String> params);
+ void payCallback(Map<String, String> params);
}
diff --git a/src/main/java/cc/mrbird/febs/pay/service/impl/PayServiceImpl.java b/src/main/java/cc/mrbird/febs/pay/service/impl/AliPayServiceImpl.java
similarity index 96%
rename from src/main/java/cc/mrbird/febs/pay/service/impl/PayServiceImpl.java
rename to src/main/java/cc/mrbird/febs/pay/service/impl/AliPayServiceImpl.java
index 7bf8804..fe9f294 100644
--- a/src/main/java/cc/mrbird/febs/pay/service/impl/PayServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/pay/service/impl/AliPayServiceImpl.java
@@ -12,7 +12,8 @@
import cc.mrbird.febs.mall.service.IApiMallOrderInfoService;
import cc.mrbird.febs.pay.model.AliPayPassbackModel;
import cc.mrbird.febs.pay.properties.AliPayProperties;
-import cc.mrbird.febs.pay.service.IPayService;
+import cc.mrbird.febs.pay.service.IAliPayService;
+import cc.mrbird.febs.pay.service.IAliPayService;
import cc.mrbird.febs.rabbit.producter.AgentProducer;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONObject;
@@ -36,7 +37,7 @@
**/
@Slf4j
@Service
-public class PayServiceImpl implements IPayService {
+public class AliPayServiceImpl implements IAliPayService {
@Resource
private AliPayProperties aliPayProperties;
diff --git a/src/main/java/cc/mrbird/febs/pay/service/impl/WxPayServiceImpl.java b/src/main/java/cc/mrbird/febs/pay/service/impl/WxPayServiceImpl.java
new file mode 100644
index 0000000..9af7d05
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/pay/service/impl/WxPayServiceImpl.java
@@ -0,0 +1,100 @@
+package cc.mrbird.febs.pay.service.impl;
+
+import cc.mrbird.febs.common.enumerates.AgentLevelEnum;
+import cc.mrbird.febs.common.enumerates.OrderStatusEnum;
+import cc.mrbird.febs.common.exception.FebsException;
+import cc.mrbird.febs.mall.entity.MallMember;
+import cc.mrbird.febs.mall.entity.MallOrderInfo;
+import cc.mrbird.febs.mall.mapper.MallOrderInfoMapper;
+import cc.mrbird.febs.mall.service.IApiMallMemberService;
+import cc.mrbird.febs.pay.properties.WxPayProperties;
+import cc.mrbird.febs.pay.service.IPayService;
+import cn.hutool.core.date.DateField;
+import cn.hutool.core.date.DatePattern;
+import cn.hutool.core.date.DateUnit;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.RandomUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.github.binarywang.wxpay.bean.order.WxPayAppOrderResult;
+import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderRequest;
+import com.github.binarywang.wxpay.exception.WxPayException;
+import com.github.binarywang.wxpay.service.WxPayService;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.Map;
+
+/**
+ * @author wzy
+ * @date 2023-04-07
+ **/
+@Slf4j
+@Service("wechatPayService")
+@RequiredArgsConstructor
+public class WxPayServiceImpl implements IPayService {
+
+ @Autowired
+ private IApiMallMemberService memberService;
+ @Autowired
+ private MallOrderInfoMapper orderInfoMapper;
+
+ @Autowired
+ private WxPayService wxPayService;
+
+ @Autowired
+ private WxPayProperties wxPayProperties;
+
+ @Value("${spring.profiles.active}")
+ private String active;
+
+ @Override
+ public String pay(MallOrderInfo orderInfo) {
+ WxPayUnifiedOrderRequest request = new WxPayUnifiedOrderRequest();
+ request.setAppid(wxPayProperties.getAppId());
+ request.setMchId(wxPayProperties.getMchId());
+ request.setNotifyUrl(wxPayProperties.getNoticeUrl());
+ request.setBody(orderInfo.getName());
+ request.setOutTradeNo(orderInfo.getOrderNo());
+ request.setTimeExpire(DateUtil.format(DateUtil.offset(new Date(), DateField.MINUTE, 15), DatePattern.PURE_DATETIME_PATTERN));
+ request.setSpbillCreateIp("127.0.0.1");
+ request.setTradeType("APP");
+
+ if ("dev".equals(active) || "test".equals(active)) {
+ request.setTotalFee(1);
+ } else {
+ request.setTotalFee(orderInfo.getAmount().multiply(new BigDecimal(100)).intValue());
+ }
+
+ try {
+ WxPayAppOrderResult result = wxPayService.createOrder(request);
+ return JSONObject.toJSONString(result);
+ } catch (WxPayException e) {
+ e.printStackTrace();
+ throw new FebsException("支付异常, 请检查");
+ }
+ }
+
+ @Override
+ public void payCallback(Map<String, String> params) {
+ String orderNo = params.get("outTradeNo");
+
+ LambdaQueryWrapper<MallOrderInfo> query = new LambdaQueryWrapper<>();
+ query.eq(MallOrderInfo::getOrderNo, orderNo);
+ MallOrderInfo orderInfo = this.orderInfoMapper.selectOne(query);
+ if ("1".equals(orderInfo.getPayResult())) {
+ return;
+ }
+
+ orderInfo.setStatus(OrderStatusEnum.WAIT_SHIPPING.getValue());
+ orderInfo.setPayResult("1");
+ orderInfo.setPayTime(new Date());
+ orderInfo.setPayTradeNo(params.get("transaction_id"));
+ orderInfoMapper.updateById(orderInfo);
+ }
+}
diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml
index 2d0cf1a..593e7df 100644
--- a/src/main/resources/application-dev.yml
+++ b/src/main/resources/application-dev.yml
@@ -15,24 +15,20 @@
datasource:
# 数据源-1,名称为 base
base:
- username: db_mall_hongloumeng
- password: hongloumeng123!@#123
+ username: ct_test
+ password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
- url: jdbc:mysql://47.111.90.145:3306/db_mall_hongloumeng?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2b8&rewriteBatchedStatements=true&allowMultiQueries=true
-# username: db_mall
-# password: mall!@#123
-# driver-class-name: com.mysql.cj.jdbc.Driver
-# url: jdbc:mysql://47.111.90.145:3306/db_mall?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2b8
+ url: jdbc:mysql://120.27.238.55:3406/db_hongloumeng?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2b8
redis:
# Redis数据库索引(默认为 0)
- database: 8
+ database: 3
# Redis服务器地址
- host: 121.37.162.173
+ host: 120.27.238.55
# Redis服务器连接端口
port: 6379
# Redis 密码
- password: d32ncxe@i3#!dV
+ password: xcong123
lettuce:
pool:
# 连接池中的最小空闲连接
@@ -46,10 +42,10 @@
# 连接超时时间(毫秒)
timeout: 5000
rabbitmq:
- host: 47.111.90.145
+ host: 120.27.238.55
port: 5672
- username: zj_mall
- password: zj_mall123
+ username: ct_rabbit
+ password: 123456
publisher-confirm-type: correlated
pay:
@@ -62,3 +58,9 @@
# 回调地址
noticeUrl: http://120.27.238.55:8801/api/pay/aliCallBack
domain: https://openapi.alipaydev.com/gateway.do
+ wx:
+ appId: wx051693799db39540
+ mchId: 1641389321
+ mchKey: wqri51aCfiG31o4IcdX3dW12qnX3u4hp
+ keyPath: classpath:cert/apiclient_cert.p12
+ noticeUrl: http://120.27.238.55:8185/api/pay/wxPayCallBack
\ No newline at end of file
diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml
index 68099e2..bcfc251 100644
--- a/src/main/resources/application-prod.yml
+++ b/src/main/resources/application-prod.yml
@@ -58,3 +58,9 @@
# 回调地址
noticeUrl: http://120.27.238.55:8801/api/pay/aliCallBack
domain: https://openapi.alipay.com/gateway.do
+ wx:
+ appId: wx051693799db39540
+ mchId: 1641389321
+ mchKey: wqri51aCfiG31o4IcdX3dW12qnX3u4hp
+ keyPath: classpath:cert/apiclient_cert.p12
+ noticeUrl: http://localhost
diff --git a/src/main/resources/application-test.yml b/src/main/resources/application-test.yml
index 1177d0f..593e7df 100644
--- a/src/main/resources/application-test.yml
+++ b/src/main/resources/application-test.yml
@@ -18,7 +18,7 @@
username: ct_test
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
- url: jdbc:mysql://120.27.238.55:3306/db_amz?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2b8
+ url: jdbc:mysql://120.27.238.55:3406/db_hongloumeng?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2b8
redis:
# Redis数据库索引(默认为 0)
@@ -57,4 +57,10 @@
privateKey: MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDOhu+hD2kuMh5s7IQuKjexeC4DmXxrAr/bu10rNB304NaIRUNAkGPI9tep7ZRBZqa/Tjrfom8LeeBnbA1n+SgxROSREEXDA1E3/XJY+vYivehVTD2TuA2GEnEtLXUgxQJVfz/CNIOa3rCc1nj9n4/kv03Sx/yqiKnLd6h9dRvdaY9k7DwnWPu1FT5T3bpTiU+oKaUODkcfUPpMH8aQaolzKY07M0cqZFn75Z0KFAoM6p/TDoF7JKpwdzGO5xuJe8YT4xx2OcLY++d/dzSoQvvsKh8r1yE37Z5B9FxHSHe1GuR2wOQxhgXUyaj7gden/pAVspzbjZTDdQppjzNavnzdAgMBAAECggEAKAJL+c+aeLCM5F0NXkQfdenqQBhD2hc2Q8MQUYZPJ1lHNi700FUof44SSYEU73aLZxQoo5o8GOULa/2quzGxb5oBDXkxio3h9g7LUCGN/Tz8/Uk/xJYrSIXaFv5vamHACgAUwfKabC4n2LpTxg5bOd01nlfPwtmmyxvrMCK3uzSWzxDLag0jVh9DGA97D00UOkL9QpEJ26dpBuF7pf9Nt0BtfyJMFrCbJXY2F3j65VNN4f2rOG7/DTGm434Sektj9Bc31ept9MfPw9VyRbV7EMvG5be9iDqBvLbRGhQVtBjv3N/E7p3uUI5HyxM8GOjQhSwSOJQ0gQS8vNdNN90qoQKBgQDqxoTFOsPM3+LoQj1r7CjoXhooEfpikyHpK2l8mzM4+La9ajzUJzTWT8nc0k2Qha8AvBZzJ2+kSKAjtwc/VNTu0IeEn480V9zVyBFkcC294d3A1keN5ch9wP1it5fWsVh+62T9xGXlQQIpuYeQm1BXj7kltd7vE8t6fLrmnhVkpwKBgQDhMqgZoRQGmcgrVc8F//lBO7g6ku/+GfNJnve64sRi5ZifwSiNSULVqDWmdHJiVWyYXoTvt1o3bqQorawe0c+wEzknn8ZipNDnN9tybxhKqD6pzCbRv6yWmU+9X9ZhSxYJeumn3sqxyZB7rnqJQ7/vpsoNZRvp0LS85iJVJFXO2wKBgB7O3i1jgL4pwwTnbFf1LYkQkC4h7dFxrUmDwNvxIc+gE5rXjhPo8S4OWlb34eXNJSHbjLafvi64uQr2waS15RtRkfb9WTVtMjV7g4zCi74XHZpohAtC1ARshtOlc+9gZlSBX0dNtnFXDombJwb62pgi7BDexNpqppD0PTJ2HCiRAoGAREmZIdRvfyToxwNJOLeLPNXAIrrl3Xa/CGcVFe2nwZl/s4neIyHBC4rrYeNTwC/JM1cOFqbRy5dYXiFz3RCgWvMpVLOlc8oossSEXeoEQrdL8S8/4kCuNCifPnyuRGiBcTR9X/M2Ib1Oe8LH05HgxOodwPwU/8zS0akzZgATqRsCgYA5TDAX996ThMjHr+qjLh5gdIJ+85jxP0+tqVk5Vwl3niS3qJGoLIofIgHYee9U6c1wLJU+lUTaxYpuaJPwQFbdMGGGB8i3c2XczVBShCUEedelTghl7Izwh/DILmlAQCvYsC+wWMcFdU3LhYvFGXmTx9ToRBLdtd6v45+7MXcHQw==
# 回调地址
noticeUrl: http://120.27.238.55:8801/api/pay/aliCallBack
- domain: https://openapi.alipaydev.com/gateway.do
\ No newline at end of file
+ domain: https://openapi.alipaydev.com/gateway.do
+ wx:
+ appId: wx051693799db39540
+ mchId: 1641389321
+ mchKey: wqri51aCfiG31o4IcdX3dW12qnX3u4hp
+ keyPath: classpath:cert/apiclient_cert.p12
+ noticeUrl: http://120.27.238.55:8185/api/pay/wxPayCallBack
\ No newline at end of file
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index 7ec8387..035171c 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -39,4 +39,4 @@
mybatisplus:
core:
metadata:
- TableInfoHelper: error
+ TableInfoHelper: error
\ No newline at end of file
diff --git a/src/main/resources/cert/apiclient_cert.p12 b/src/main/resources/cert/apiclient_cert.p12
new file mode 100644
index 0000000..3bc1879
--- /dev/null
+++ b/src/main/resources/cert/apiclient_cert.p12
Binary files differ
diff --git a/src/test/java/cc/mrbird/febs/PayTest.java b/src/test/java/cc/mrbird/febs/PayTest.java
index ede5efa..cf9d61e 100644
--- a/src/test/java/cc/mrbird/febs/PayTest.java
+++ b/src/test/java/cc/mrbird/febs/PayTest.java
@@ -1,12 +1,22 @@
package cc.mrbird.febs;
+import cc.mrbird.febs.pay.properties.WxPayProperties;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.lang.UUID;
+import cn.hutool.core.util.RandomUtil;
import com.alibaba.fastjson.JSONObject;
import com.alipay.api.AlipayApiException;
import com.alipay.api.domain.AlipayTradeAppPayModel;
import com.alipay.api.response.AlipayTradeAppPayResponse;
+import com.github.binarywang.wxpay.bean.order.WxPayAppOrderResult;
+import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderRequest;
+import com.github.binarywang.wxpay.bean.result.WxPayUnifiedOrderResult;
+import com.github.binarywang.wxpay.exception.WxPayException;
+import com.github.binarywang.wxpay.service.WxPayService;
import com.ijpay.alipay.AliPayApi;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
/**
@@ -30,4 +40,30 @@
AlipayTradeAppPayResponse resp = AliPayApi.appPayToResponse(model, "");
log.info("=====>>>{}", JSONObject.toJSONString(resp));
}
+
+ @Autowired
+ private WxPayService wxPayService;
+
+ @Autowired
+ private WxPayProperties wxPayProperties;
+
+ @Test
+ public void wxPayTest() {
+ WxPayUnifiedOrderRequest request = new WxPayUnifiedOrderRequest();
+ request.setAppid(wxPayProperties.getAppId());
+ request.setMchId(wxPayProperties.getMchId());
+ request.setNotifyUrl(wxPayProperties.getNoticeUrl());
+ request.setBody("这是body");
+ request.setOutTradeNo(RandomUtil.randomString(32));
+ request.setTimeExpire("20230407114500");
+ request.setSpbillCreateIp("127.0.0.1");
+ request.setTradeType("APP");
+ request.setTotalFee(1);
+ try {
+ WxPayAppOrderResult result = wxPayService.createOrder(request);
+ System.out.println(1111);
+ } catch (WxPayException e) {
+ e.printStackTrace();
+ }
+ }
}
--
Gitblit v1.9.1