refactor(微信支付): 将微信支付配置从常量类迁移至配置文件

重构微信支付相关配置,将原本硬编码在常量类中的appid、secret、支付网关等配置迁移至application-dev.yml配置文件,并通过WxshopConfig类进行统一管理
This commit is contained in:
dzq 2025-09-19 12:38:08 +08:00
parent 31adc0adc2
commit 8eb671ec58
14 changed files with 86 additions and 27 deletions

View File

@ -103,3 +103,13 @@ agileboot:
# 前端url请求转发前缀 # 前端url请求转发前缀
api-prefix: /dev-api api-prefix: /dev-api
demo-enabled: false demo-enabled: false
wxshop:
appid: wx9922dfbb0d4cd7bb
secret: 7c7ef0dbb90b6be2abc8c269357f980a
pay:
biz_id: wxshop
old_biz_id: wxshop_old
appkey: wxshop202503081132
pay_url: http://222.218.10.217:7890/open/trade/wx/jsapi/precreate
refund_url: http://222.218.10.217:7890/open/trade/refund

View File

@ -43,4 +43,3 @@ springdoc:
- group: '内置系统API' - group: '内置系统API'
packages-to-scan: com.agileboot.admin.controller.system packages-to-scan: com.agileboot.admin.controller.system

View File

@ -1,7 +1,8 @@
package com.agileboot.api.controller; package com.agileboot.api.controller;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import com.agileboot.common.constant.PayApiConstants; import com.agileboot.common.config.WxshopConfig;
import org.springframework.beans.factory.annotation.Autowired;
import com.agileboot.common.core.base.BaseController; import com.agileboot.common.core.base.BaseController;
import com.agileboot.common.exception.ApiException; import com.agileboot.common.exception.ApiException;
import com.agileboot.common.exception.error.ErrorCode; import com.agileboot.common.exception.error.ErrorCode;
@ -40,6 +41,8 @@ public class OrderController extends BaseController {
private final OrderApplicationService orderApplicationService; private final OrderApplicationService orderApplicationService;
private final PaymentApplicationService paymentApplicationService; private final PaymentApplicationService paymentApplicationService;
private final PaymentOperationLogApplicationService paymentOperationLogApplicationService; private final PaymentOperationLogApplicationService paymentOperationLogApplicationService;
@Autowired
private WxshopConfig wxshopConfig;
/** /**
* 提交订单接口 * 提交订单接口
@ -128,7 +131,7 @@ public class OrderController extends BaseController {
throw new IllegalArgumentException("退款金额不能超过订单总额"); throw new IllegalArgumentException("退款金额不能超过订单总额");
} }
RefundVO refundVO = paymentApplicationService.refund(PayApiConstants.biz_id, PayApiConstants.appkey, orderModel.getBizOrderId(), orderModel.getUcid(), "退还", money); RefundVO refundVO = paymentApplicationService.refund(wxshopConfig.getPay().getBizId(), wxshopConfig.getPay().getAppkey(), orderModel.getBizOrderId(), orderModel.getUcid(), "退还", money);
log.info("退款结果:{}", refundVO); log.info("退款结果:{}", refundVO);
return ResponseDTO.ok(refundVO); return ResponseDTO.ok(refundVO);
} catch (Exception e) { } catch (Exception e) {

View File

@ -4,6 +4,7 @@ import cn.hutool.core.net.URLDecoder;
import cn.hutool.http.HttpUtil; import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import com.agileboot.api.response.GetBalanceResponse; import com.agileboot.api.response.GetBalanceResponse;
import com.agileboot.common.config.WxshopConfig;
import com.agileboot.common.constant.WeixinConstants; import com.agileboot.common.constant.WeixinConstants;
import com.agileboot.common.core.dto.ResponseDTO; import com.agileboot.common.core.dto.ResponseDTO;
import com.agileboot.common.exception.ApiException; import com.agileboot.common.exception.ApiException;
@ -71,6 +72,7 @@ public class PaymentController {
private final PaymentApplicationService paymentApplicationService; private final PaymentApplicationService paymentApplicationService;
private final PaymentOperationLogApplicationService paymentOperationLogApplicationService; private final PaymentOperationLogApplicationService paymentOperationLogApplicationService;
private final Ab98UserApplicationService ab98UserApplicationService; private final Ab98UserApplicationService ab98UserApplicationService;
private final WxshopConfig wxshopConfig;
// 新增回调接口 // 新增回调接口
/** /**
@ -149,7 +151,7 @@ public class PaymentController {
try { try {
String url = String.format( String url = String.format(
"https://api.weixin.qq.com/sns/oauth2/access_token?appid=%s&secret=%s&code=%s&grant_type=authorization_code", "https://api.weixin.qq.com/sns/oauth2/access_token?appid=%s&secret=%s&code=%s&grant_type=authorization_code",
WeixinConstants.appid, WeixinConstants.secret, code); wxshopConfig.getAppid(), wxshopConfig.getSecret(), code);
String response = HttpUtil.get(url); String response = HttpUtil.get(url);
log.info("微信https://api.weixin.qq.com/sns/oauth2/access_token接口返回: {}", response); log.info("微信https://api.weixin.qq.com/sns/oauth2/access_token接口返回: {}", response);

View File

@ -4,6 +4,7 @@ import cn.hutool.core.util.URLUtil;
import cn.hutool.http.useragent.UserAgentUtil; import cn.hutool.http.useragent.UserAgentUtil;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import com.agileboot.api.response.ShopGoodsResponse; import com.agileboot.api.response.ShopGoodsResponse;
import com.agileboot.common.config.WxshopConfig;
import com.agileboot.common.constant.WeixinConstants; import com.agileboot.common.constant.WeixinConstants;
import com.agileboot.common.constant.UrlConstants; import com.agileboot.common.constant.UrlConstants;
import com.agileboot.common.core.dto.ResponseDTO; import com.agileboot.common.core.dto.ResponseDTO;
@ -45,6 +46,7 @@ public class ShopController {
private final GoodsApplicationService goodsApplicationService; private final GoodsApplicationService goodsApplicationService;
private final CategoryApplicationService categoryApplicationService; private final CategoryApplicationService categoryApplicationService;
private final CacheCenter cacheCenter; private final CacheCenter cacheCenter;
private final WxshopConfig wxshopConfig;
@GetMapping("/list") @GetMapping("/list")
public ResponseDTO<List<ShopEntity>> getShopList(@RequestParam(required = false) String corpid, public ResponseDTO<List<ShopEntity>> getShopList(@RequestParam(required = false) String corpid,
@ -138,7 +140,7 @@ public class ShopController {
} }
// 构造微信网页授权URL // 构造微信网页授权URL
String authUrl = "https://open.weixin.qq.com/connect/oauth2/authorize" String authUrl = "https://open.weixin.qq.com/connect/oauth2/authorize"
+ "?appid=" + WeixinConstants.appid + "?appid=" + wxshopConfig.getAppid()
+ "&redirect_uri=" + redirect_uri + "&redirect_uri=" + redirect_uri
+ "&response_type=code" + "&response_type=code"
+ "&scope=snsapi_base" + "&scope=snsapi_base"

View File

@ -103,3 +103,13 @@ agileboot:
# 前端url请求转发前缀 # 前端url请求转发前缀
api-prefix: /dev-api api-prefix: /dev-api
demo-enabled: false demo-enabled: false
wxshop:
appid: wx9922dfbb0d4cd7bb
secret: 7c7ef0dbb90b6be2abc8c269357f980a
pay:
biz_id: wxshop
old_biz_id: wxshop_old
appkey: wxshop202503081132
pay_url: http://222.218.10.217:7890/open/trade/wx/jsapi/precreate
refund_url: http://222.218.10.217:7890/open/trade/refund

View File

@ -25,4 +25,3 @@ spring:

View File

@ -0,0 +1,23 @@
package com.agileboot.common.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component
@ConfigurationProperties(prefix = "wxshop")
@Data
public class WxshopConfig {
private String appid;
private String secret;
private Pay pay;
@Data
public static class Pay {
private String bizId;
private String oldBizId;
private String appkey;
private String payUrl;
private String refundUrl;
}
}

View File

@ -1,9 +1,9 @@
package com.agileboot.common.constant; package com.agileboot.common.constant;
public class PayApiConstants { public class PayApiConstants {
public static final String biz_id = "wxshop"; // public static final String biz_id = "wxshop";
public static final String old_biz_id = "wxshop_old"; // public static final String old_biz_id = "wxshop_old";
public static final String appkey = "wxshop202503081132"; // public static final String appkey = "wxshop202503081132";
public static final String pay_url = "http://222.218.10.217:7890/open/trade/wx/jsapi/precreate"; // public static final String pay_url = "http://222.218.10.217:7890/open/trade/wx/jsapi/precreate";
public static final String refund_url = "http://222.218.10.217:7890/open/trade/refund"; // public static final String refund_url = "http://222.218.10.217:7890/open/trade/refund";
} }

View File

@ -1,10 +1,8 @@
package com.agileboot.common.constant; package com.agileboot.common.constant;
public class WeixinConstants { public class WeixinConstants {
// public static String appid = "wx04e357a5a0900f24"; // public static String appid = "wx9922dfbb0d4cd7bb";
// public static String secret = "2a5a8b6ad3654a05f9fdd36524279a50"; // public static String secret = "7c7ef0dbb90b6be2abc8c269357f980a";
public static String appid = "wx9922dfbb0d4cd7bb";
public static String secret = "7c7ef0dbb90b6be2abc8c269357f980a";
public static String agentid = "1000231"; public static String agentid = "1000231";
public static String corpid = "wpZ1ZrEgAA2QTxIRcB4cMtY7hQbTcPAw"; public static String corpid = "wpZ1ZrEgAA2QTxIRcB4cMtY7hQbTcPAw";
} }

View File

@ -11,7 +11,8 @@ import java.util.Map;
import java.util.Objects; import java.util.Objects;
import java.util.TreeMap; import java.util.TreeMap;
import com.agileboot.common.constant.PayApiConstants; import com.agileboot.common.config.WxshopConfig;
import org.springframework.beans.factory.annotation.Autowired;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.digest.Md5Crypt; import org.apache.commons.codec.digest.Md5Crypt;
import org.apache.commons.collections4.MapUtils; import org.apache.commons.collections4.MapUtils;
@ -21,6 +22,9 @@ import static cn.hutool.crypto.SecureUtil.md5;
@Slf4j @Slf4j
public class OpenSignUtil { public class OpenSignUtil {
@Autowired
private static WxshopConfig wxshopConfig;
/** /**
* @param appKey 支付网关提供的业务秘钥与biz_id是配对一起提供的 * @param appKey 支付网关提供的业务秘钥与biz_id是配对一起提供的
* @param sign 支付网关回调参数里的sign字段值 * @param sign 支付网关回调参数里的sign字段值
@ -84,7 +88,7 @@ public class OpenSignUtil {
+ "2448492%22%2C%22trade_id%22%3A%221063669415%22%2C%22total_amount%22%3A1%2C%22extra%22%3A%22%22%2C%22trade_pay_time%22%3A%222025-03-20+17%3A20%3A55%22%2C%22trade_status%22%3A%22SUCCESS%22%2C%22pay_type%22%3A%22116%22%2C%22callback_content%22%3A%22%3Cxml%3E%3Cappid%3E%3C%21%5BCDATA%5Bwx9922dfbb0d4cd7bb%5D%5D%3E%3C%2Fappid%3E%5Cn%3Cattach%3E%3C%21%5BCDATA%5B%257B%2522biz_id%2522%253A%2522wxshop%2522%252C%2522trade_id%2522%253A%25221063669415%2522%257D%5D%5D%3E%3C%2Fattach%3E%5Cn%3Cbank_type%3E%3C%21%5BCDATA%5BOTHERS%5D%5D%3E%3C%2Fbank_type%3E%5Cn%3Ccash_fee%3E%3C%21%5BCDATA%5B1%5D%5D%3E%3C%2Fcash_fee%3E%5Cn%3Cfee_type%3E%3C%21%5BCDATA%5BCNY%5D%5D%3E%3C%2Ffee_type%3E%5Cn%3Cis_subscribe%3E%3C%21%5BCDATA%5BN%5D%5D%3E%3C%2Fis_subscribe%3E%5Cn%3Cmch_id%3E%3C%21%5BCDATA%5B1625101806%5D%5D%3E%3C%2Fmch_id%3E%5Cn%3Cnonce_str%3E%3C%21%5BCDATA%5B24NffiTHxNYm0ppw3QE9WezmzJQDnJQV%5D%5D%3E%3C%2Fnonce_str%3E%5Cn%3Copenid%3E%3C%21%5BCDATA%5BoMRxw6Eum0DB1IjI_pEX_yrawBHw%5D%5D%3E%3C%2Fopenid%3E%5Cn%3Cout_trade_no%3E%3C%21%5BCDATA" + "2448492%22%2C%22trade_id%22%3A%221063669415%22%2C%22total_amount%22%3A1%2C%22extra%22%3A%22%22%2C%22trade_pay_time%22%3A%222025-03-20+17%3A20%3A55%22%2C%22trade_status%22%3A%22SUCCESS%22%2C%22pay_type%22%3A%22116%22%2C%22callback_content%22%3A%22%3Cxml%3E%3Cappid%3E%3C%21%5BCDATA%5Bwx9922dfbb0d4cd7bb%5D%5D%3E%3C%2Fappid%3E%5Cn%3Cattach%3E%3C%21%5BCDATA%5B%257B%2522biz_id%2522%253A%2522wxshop%2522%252C%2522trade_id%2522%253A%25221063669415%2522%257D%5D%5D%3E%3C%2Fattach%3E%5Cn%3Cbank_type%3E%3C%21%5BCDATA%5BOTHERS%5D%5D%3E%3C%2Fbank_type%3E%5Cn%3Ccash_fee%3E%3C%21%5BCDATA%5B1%5D%5D%3E%3C%2Fcash_fee%3E%5Cn%3Cfee_type%3E%3C%21%5BCDATA%5BCNY%5D%5D%3E%3C%2Ffee_type%3E%5Cn%3Cis_subscribe%3E%3C%21%5BCDATA%5BN%5D%5D%3E%3C%2Fis_subscribe%3E%5Cn%3Cmch_id%3E%3C%21%5BCDATA%5B1625101806%5D%5D%3E%3C%2Fmch_id%3E%5Cn%3Cnonce_str%3E%3C%21%5BCDATA%5B24NffiTHxNYm0ppw3QE9WezmzJQDnJQV%5D%5D%3E%3C%2Fnonce_str%3E%5Cn%3Copenid%3E%3C%21%5BCDATA%5BoMRxw6Eum0DB1IjI_pEX_yrawBHw%5D%5D%3E%3C%2Fopenid%3E%5Cn%3Cout_trade_no%3E%3C%21%5BCDATA"
+ "%5Bwxshop-10-1742462448212%5D%5D%3E%3C%2Fout_trade_no%3E%5Cn%3Cresult_code%3E%3C%21%5BCDATA%5BSUCCESS%5D%5D%3E%3C%2Fresult_code%3E%5Cn%3Creturn_code%3E%3C%21%5BCDATA%5BSUCCESS%5D%5D%3E%3C%2Freturn_code%3E%5Cn%3Csign%3E%3C%21%5BCDATA%5B9CE8A123437E591166DDAF92A750C122%5D%5D%3E%3C%2Fsign%3E%5Cn%3Ctime_end%3E%3C%21%5BCDATA%5B20250320172055%5D%5D%3E%3C%2Ftime_end%3E%5Cn%3Ctotal_fee%3E1%3C%2Ftotal_fee%3E%5Cn%3Ctrade_type%3E%3C%21%5BCDATA%5BJSAPI%5D%5D%3E%3C%2Ftrade_type%3E%5Cn%3Ctransaction_id%3E%3C%21%5BCDATA%5B4200002695202503209706830758%5D%5D%3E%3C%2Ftransaction_id%3E%5Cn%3C%2Fxml%3E%22%2C%22title%22%3A%22%E5%95%86%E5%93%81%E8%AE%A2%E5%8D%95%E6%94%AF%E4%BB%98%22%2C%22biz_order_id%22%3A%22wxshop-10-1742462448212%22%7D&nonce_str=6d80bd6b542a499994adf4ee4c1e89c4&sign=f1ffc9cfc61cf60d8a1acbac0399cd0b&biz_id=wxshop&sign_type=MD5&version=1.0×tamp=1742462460390"; + "%5Bwxshop-10-1742462448212%5D%5D%3E%3C%2Fout_trade_no%3E%5Cn%3Cresult_code%3E%3C%21%5BCDATA%5BSUCCESS%5D%5D%3E%3C%2Fresult_code%3E%5Cn%3Creturn_code%3E%3C%21%5BCDATA%5BSUCCESS%5D%5D%3E%3C%2Freturn_code%3E%5Cn%3Csign%3E%3C%21%5BCDATA%5B9CE8A123437E591166DDAF92A750C122%5D%5D%3E%3C%2Fsign%3E%5Cn%3Ctime_end%3E%3C%21%5BCDATA%5B20250320172055%5D%5D%3E%3C%2Ftime_end%3E%5Cn%3Ctotal_fee%3E1%3C%2Ftotal_fee%3E%5Cn%3Ctrade_type%3E%3C%21%5BCDATA%5BJSAPI%5D%5D%3E%3C%2Ftrade_type%3E%5Cn%3Ctransaction_id%3E%3C%21%5BCDATA%5B4200002695202503209706830758%5D%5D%3E%3C%2Ftransaction_id%3E%5Cn%3C%2Fxml%3E%22%2C%22title%22%3A%22%E5%95%86%E5%93%81%E8%AE%A2%E5%8D%95%E6%94%AF%E4%BB%98%22%2C%22biz_order_id%22%3A%22wxshop-10-1742462448212%22%7D&nonce_str=6d80bd6b542a499994adf4ee4c1e89c4&sign=f1ffc9cfc61cf60d8a1acbac0399cd0b&biz_id=wxshop&sign_type=MD5&version=1.0×tamp=1742462460390";
Boolean res = checkOpenSign(PayApiConstants.appkey, "f1ffc9cfc61cf60d8a1acbac0399cd0b", body); Boolean res = checkOpenSign(wxshopConfig.getPay().getAppkey(), "f1ffc9cfc61cf60d8a1acbac0399cd0b", body);
log.info("res:{}", res); log.info("res:{}", res);
} }
} }

View File

@ -2,7 +2,8 @@ package com.agileboot.domain.shop.approval;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import com.agileboot.common.constant.PayApiConstants; import com.agileboot.common.config.WxshopConfig;
import org.springframework.beans.factory.annotation.Autowired;
import com.agileboot.common.constant.UrlConstants; import com.agileboot.common.constant.UrlConstants;
import com.agileboot.common.constant.WeixinConstants; import com.agileboot.common.constant.WeixinConstants;
import com.agileboot.common.enums.common.ConfigKeyEnum; import com.agileboot.common.enums.common.ConfigKeyEnum;
@ -111,6 +112,8 @@ public class ReturnApprovalApplicationService {
private final CabinetMainboardService cabinetMainboardService; private final CabinetMainboardService cabinetMainboardService;
private final CabinetCellOperationModelFactory cabinetCellOperationModelFactory; private final CabinetCellOperationModelFactory cabinetCellOperationModelFactory;
private final MqttService mqttService; private final MqttService mqttService;
@Autowired
private WxshopConfig wxshopConfig;
/** /**
* 获取退货审批列表 * 获取退货审批列表
@ -206,13 +209,13 @@ public class ReturnApprovalApplicationService {
Date cutoffDate = DateUtil.parse("2025-06-10 11:05:00", "yyyy-MM-dd HH:mm:ss"); Date cutoffDate = DateUtil.parse("2025-06-10 11:05:00", "yyyy-MM-dd HH:mm:ss");
if (orderModel.getCreateTime().after(cutoffDate)) { if (orderModel.getCreateTime().after(cutoffDate)) {
refundVO = paymentApplicationService.refund( refundVO = paymentApplicationService.refund(
PayApiConstants.biz_id, PayApiConstants.appkey, wxshopConfig.getPay().getBizId(), wxshopConfig.getPay().getAppkey(),
orderModel.getBizOrderId(), orderModel.getUcid(), orderModel.getBizOrderId(), orderModel.getUcid(),
"退还", returnAmount.intValue()); "退还", returnAmount.intValue());
} else { } else {
try { try {
refundVO = paymentApplicationService.refund( refundVO = paymentApplicationService.refund(
PayApiConstants.old_biz_id, PayApiConstants.appkey, wxshopConfig.getPay().getOldBizId(), wxshopConfig.getPay().getAppkey(),
orderModel.getBizOrderId(), orderModel.getUcid(), orderModel.getBizOrderId(), orderModel.getUcid(),
"退还", returnAmount.intValue()); "退还", returnAmount.intValue());
} catch (Exception e) { } catch (Exception e) {
@ -226,7 +229,7 @@ public class ReturnApprovalApplicationService {
// 若还是失败使用新订单收款商户进行退款 // 若还是失败使用新订单收款商户进行退款
refundVO = paymentApplicationService.refund( refundVO = paymentApplicationService.refund(
PayApiConstants.biz_id, PayApiConstants.appkey, wxshopConfig.getPay().getBizId(), wxshopConfig.getPay().getAppkey(),
orderModel.getBizOrderId(), orderModel.getUcid(), orderModel.getBizOrderId(), orderModel.getUcid(),
"退还", returnAmount.intValue()); "退还", returnAmount.intValue());
} }

View File

@ -2,7 +2,8 @@ package com.agileboot.domain.shop.order;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import com.agileboot.common.constant.PayApiConstants; import com.agileboot.common.config.WxshopConfig;
import org.springframework.beans.factory.annotation.Autowired;
import com.agileboot.common.core.page.PageDTO; import com.agileboot.common.core.page.PageDTO;
import com.agileboot.common.exception.ApiException; import com.agileboot.common.exception.ApiException;
import com.agileboot.common.exception.error.ErrorCode; import com.agileboot.common.exception.error.ErrorCode;
@ -92,6 +93,8 @@ public class OrderApplicationService {
private final AccessTokenApplicationService accessTokenApplicationService; private final AccessTokenApplicationService accessTokenApplicationService;
private final QyUserService qyUserService; private final QyUserService qyUserService;
private final Ab98UserService ab98UserService; private final Ab98UserService ab98UserService;
@Autowired
private WxshopConfig wxshopConfig;
public PageDTO<OrderWithGoodsDTO> getOrderList(SearchShopOrderQuery<OrderWithGoodsDTO> query) { public PageDTO<OrderWithGoodsDTO> getOrderList(SearchShopOrderQuery<OrderWithGoodsDTO> query) {
Page<OrderWithGoodsDTO> page = orderService.getOrderList(query); Page<OrderWithGoodsDTO> page = orderService.getOrderList(query);
@ -309,7 +312,7 @@ public class OrderApplicationService {
request.setTitle("商品订单支付"); request.setTitle("商品订单支付");
String serverHost = CacheCenter.configCache.get(ConfigKeyEnum.SERVER_HOST.getValue()); String serverHost = CacheCenter.configCache.get(ConfigKeyEnum.SERVER_HOST.getValue());
request.setNotify_url(serverHost + UrlConstants.PAY_CALLBACK_URL); request.setNotify_url(serverHost + UrlConstants.PAY_CALLBACK_URL);
request.setBiz_id(PayApiConstants.biz_id); request.setBiz_id(wxshopConfig.getPay().getBizId());
request.setUcid(orderModel.getUcid()); request.setUcid(orderModel.getUcid());
request.setExtra(""); request.setExtra("");
return request; return request;

View File

@ -10,7 +10,8 @@ import cn.hutool.http.HttpStatus;
import cn.hutool.http.HttpUtil; import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONObject; import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import com.agileboot.common.constant.PayApiConstants; import com.agileboot.common.config.WxshopConfig;
import org.springframework.beans.factory.annotation.Autowired;
import com.agileboot.common.utils.OpenSignUtil; import com.agileboot.common.utils.OpenSignUtil;
import com.agileboot.domain.shop.order.model.OrderModel; import com.agileboot.domain.shop.order.model.OrderModel;
import com.agileboot.domain.shop.order.model.OrderModelFactory; import com.agileboot.domain.shop.order.model.OrderModelFactory;
@ -37,9 +38,11 @@ public class PaymentApplicationService {
private final OrderModelFactory orderModelFactory; private final OrderModelFactory orderModelFactory;
private final PaymentOperationLogApplicationService paymentOperationLogApplicationService; private final PaymentOperationLogApplicationService paymentOperationLogApplicationService;
private static final Object LOCKER = new Object(); private static final Object LOCKER = new Object();
@Autowired
private WxshopConfig wxshopConfig;
public WxJsApiPreCreateResponse callJsApiPreCreate(WxJsApiPreCreateRequest request) { public WxJsApiPreCreateResponse callJsApiPreCreate(WxJsApiPreCreateRequest request) {
String gatewayUrl = PayApiConstants.pay_url; String gatewayUrl = wxshopConfig.getPay().getPayUrl();
String result = ""; String result = "";
String jsonBody = ""; String jsonBody = "";
@ -129,7 +132,7 @@ public class PaymentApplicationService {
* @param money 退款金额单位 * @param money 退款金额单位
*/ */
public RefundVO refund(String bizId, String appKey, String orderId, String uid, String reason, int money) throws Exception { public RefundVO refund(String bizId, String appKey, String orderId, String uid, String reason, int money) throws Exception {
String url = PayApiConstants.refund_url; String url = wxshopConfig.getPay().getRefundUrl();
JSONObject bizContent = new JSONObject(); JSONObject bizContent = new JSONObject();
bizContent.set("userId", uid); bizContent.set("userId", uid);
bizContent.set("bizId", bizId); bizContent.set("bizId", bizId);
@ -183,7 +186,7 @@ public class PaymentApplicationService {
// 需要实现的方法根据业务需求补充 // 需要实现的方法根据业务需求补充
private String getAppKeyByBizId(String bizId) { private String getAppKeyByBizId(String bizId) {
// 根据biz_id从数据库或配置获取对应的appKey // 根据biz_id从数据库或配置获取对应的appKey
return PayApiConstants.appkey; return wxshopConfig.getPay().getAppkey();
} }
private void handlePaymentSuccess(String bizOrderId, Integer amount, String tradeId, String tradePayTime) { private void handlePaymentSuccess(String bizOrderId, Integer amount, String tradeId, String tradePayTime) {