feat: 微信相关支付

pull/2/head
tangqian 2023-05-18 16:35:54 +08:00
parent 1f748070ce
commit cf5c4179a6
9 changed files with 95 additions and 73 deletions

View File

@ -1,6 +1,7 @@
package cn.iocoder.yudao.module.shop.controller.app.buy;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.security.core.annotations.PreAuthenticated;
import cn.iocoder.yudao.module.shop.request.member.OrderContentRequest;
import cn.iocoder.yudao.module.shop.request.member.RefundRequest;
import cn.iocoder.yudao.module.shop.response.member.InitOrderResponse;
@ -9,11 +10,9 @@ import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import javax.annotation.security.PermitAll;
import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid;
@ -32,22 +31,21 @@ public class TopUpOrderController {
@Autowired
private StoreOrderService storeOrderService;
@PreAuthenticated
@Operation(summary = "会员充值")
@RequestMapping(value = "/memberTopUp", method = RequestMethod.POST)
public CommonResult<InitOrderResponse> memberTopUp(@Valid @RequestBody OrderContentRequest request, HttpServletRequest servletRequest) throws Exception {
log.info("initOrder会员充值===>{}", request);
return CommonResult.success(storeOrderService.memberTopUp(request, servletRequest));
}
@PreAuthenticated
@Operation(summary = "退款")
@RequestMapping(value = "/memberRefund", method = RequestMethod.POST)
public CommonResult<Object> memberRefund(@Valid @RequestBody RefundRequest request, HttpServletRequest servletRequest) throws Exception {
log.info("memberRefund会员退款===>{}", request);
return CommonResult.success(storeOrderService.memberRefund(request, servletRequest));
}
@PreAuthenticated
@Operation(summary = "申请退款")
@RequestMapping(value = "/memberApplyRefund", method = RequestMethod.POST)
public CommonResult<Boolean> memberApplyRefund(@Valid @RequestBody RefundRequest request){
@ -55,4 +53,13 @@ public class TopUpOrderController {
return CommonResult.success(storeOrderService.memberApplyRefund(request));
}
@PermitAll
@Operation(summary = "获取openid")
@RequestMapping(value = "/getOpenId", method = RequestMethod.GET)
public CommonResult<String> getOpenId(@RequestParam(value = "code") String code){
log.info("获取openid===>{}", code);
return CommonResult.success(storeOrderService.getOpenId(code));
}
}

View File

@ -403,4 +403,6 @@ public interface StoreOrderService extends IService<StoreOrder> {
Boolean wxPayNotify(WxPayOrderNotifyV3Result.DecryptNotifyResult result);
Boolean memberApplyRefund(RefundRequest request);
String getOpenId(String code);
}

View File

@ -46,7 +46,6 @@ import cn.iocoder.yudao.module.shop.utils.RedisUtil;
import cn.iocoder.yudao.module.shop.vo.order.LogisticsResultVo;
import cn.iocoder.yudao.module.shop.vo.order.StoreDateRangeSqlPram;
import cn.iocoder.yudao.module.shop.vo.order.StoreOrderInfoOldVo;
import cn.iocoder.yudao.module.shop.vo.product.MyRecord;
import com.alipay.api.AlipayApiException;
import com.alipay.api.internal.util.AlipaySignature;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@ -59,6 +58,10 @@ import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.common.bean.oauth2.WxOAuth2AccessToken;
import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.common.service.WxOAuth2Service;
import me.chanjar.weixin.mp.api.WxMpService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
@ -130,12 +133,9 @@ public class StoreOrderServiceImpl extends ServiceImpl<StoreOrderMapper, StoreOr
@Autowired
private ExpressService expressService;
@Autowired
private ApiConfigApi apiConfigApi;
// @Autowired
// private OnePassService onePassService;
private WxMpService wxMpService;
/**
* PC
@ -1310,6 +1310,18 @@ public class StoreOrderServiceImpl extends ServiceImpl<StoreOrderMapper, StoreOr
return rechargeOrderMapper.updateById(orderDO) > 0;
}
@Override
public String getOpenId(String code) {
WxOAuth2AccessToken accessToken = null;
try {
accessToken = wxMpService.getOAuth2Service().getAccessToken(code);
return accessToken.getOpenId();
} catch (WxErrorException e) {
e.printStackTrace();
}
return null;
}
private RechargeOrderDO initializeOrder(OrderContentRequest request, String code, MemberUserRespDTO user) {
RechargeOrderDO orderDO = new RechargeOrderDO();

View File

@ -52,11 +52,11 @@ public class AliPayStrategy implements IPayStrategy {
bizContent.put("total_amount", orderDO.getPayPrice());
//订单标题,不可使用特殊符号
bizContent.put("subject", "会员充值");
bizContent.put("product_code", "FAST_INSTANT_TRADE_PAY");
bizContent.put("product_code", "QUICK_WAP_WAY");
request.setBizContent(bizContent.toString());
AlipayTradeWapPayResponse response = null;
try {
response = alipayClient.pageExecute(request);
response = alipayClient.pageExecute(request,"get");
orderResponse.setBody(response.getBody());
} catch (AlipayApiException e) {
e.printStackTrace();

View File

@ -36,6 +36,7 @@ public class WxPayStrategy implements IPayStrategy{
private WxPayOneAutoConfiguration wxPayOneAutoConfiguration;
@Autowired
private WxPayProperties payProperties;
@Override
public InitOrderResponse pay(RechargeOrderDO orderDO, HttpServletRequest servletRequest,String openid) {
InitOrderResponse response = new InitOrderResponse();

View File

@ -1,25 +1,25 @@
-----BEGIN CERTIFICATE-----
MIIEQDCCAyigAwIBAgIUWP21A/krbA4ljJlAu3JsK/YCLlYwDQYJKoZIhvcNAQEL
MIIEKzCCAxOgAwIBAgIUf3akrcUsoLRAxOVpj4pc0WM6D80wDQYJKoZIhvcNAQEL
BQAwXjELMAkGA1UEBhMCQ04xEzARBgNVBAoTClRlbnBheS5jb20xHTAbBgNVBAsT
FFRlbnBheS5jb20gQ0EgQ2VudGVyMRswGQYDVQQDExJUZW5wYXkuY29tIFJvb3Qg
Q0EwHhcNMjMwNDExMDgwODE3WhcNMjgwNDA5MDgwODE3WjCBmTETMBEGA1UEAwwK
MTY0MTk5MzQxNzEbMBkGA1UECgwS5b6u5L+h5ZWG5oi357O757ufMUUwQwYDVQQL
DDzliJvnm4jkupHnvZHnu5zvvIjph43luobvvInmnInpmZDlhazlj7jmuJ3ljJfn
rKzkuIDliIblhazlj7gxCzAJBgNVBAYMAkNOMREwDwYDVQQHDAhTaGVuWmhlbjCC
ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANWSWLmJaVbrJJq3uhbutKC6
1ly6GbAxbnJgq8O9fP/MRLOljUHDSqUleVat1sVmSNwbsJuk0Hr0e1uowxGSJ3NY
iYMXMWj3S7iPxY+9ShkCJXWfvvPPjSTabk1dg3AUM8ukREQOqvlIFRyJfCUoirlj
2CGXfgMvEjtPYUouFWvB0EU9k+5LzynIyXckpVstx1rWZtlSRF/iviW5BaPf2sZk
0DDEbeMM13BsRSNOHS1NWU8DkV5zb1hNBq/T/OQ7glbs3kHqlD+TXEkcrN64Nr1r
ErohctE6Ep0d1iRUMFYjJXFvBq/1qyi62Vp1wwk1XAqoiyuIfqKGrPhl7Z6Z++cC
AwEAAaOBuTCBtjAJBgNVHRMEAjAAMAsGA1UdDwQEAwID+DCBmwYDVR0fBIGTMIGQ
MIGNoIGKoIGHhoGEaHR0cDovL2V2Y2EuaXRydXMuY29tLmNuL3B1YmxpYy9pdHJ1
c2NybD9DQT0xQkQ0MjIwRTUwREJDMDRCMDZBRDM5NzU0OTg0NkMwMUMzRThFQkQy
JnNnPUhBQ0M0NzFCNjU0MjJFMTJCMjdBOUQzM0E4N0FEMUNERjU5MjZFMTQwMzcx
MA0GCSqGSIb3DQEBCwUAA4IBAQBChfNK0TvOcibwW7vK7ClGwolrNbGwjkAJU1MQ
IQuJUfoGnTrOLb68XKEffUqBL9SaUV9ncnkr/yJPRjltZZilbb6kFQXPqDWw6Dd1
ffPYlxrTSofPcWmZVz6LP0Xx7snslcu/qzbPBOth/Dx/nOsexwCuAJkft72tGBww
OeKvQcfUrc5bS7Nq9GtLRgjhMbDb4LVQ+ivXLhbU4stY6v6MttMSNpN90ngpeCV0
ZpRnKi2+fI/Gljyj5xEm8nMUYkg4vrJcsBK2PZVkRdlyNKiZXdrHn7dYwuujH3NS
1Sf46cO6gTquBGvkkAnO1NWPlz558g2EwzP5zOiPZCfKWk/7
Q0EwHhcNMjMwMzMwMDEzOTIzWhcNMjgwMzI4MDEzOTIzWjCBhDETMBEGA1UEAwwK
MTY0MTA3MzI3MTEbMBkGA1UECgwS5b6u5L+h5ZWG5oi357O757ufMTAwLgYDVQQL
DCfliJvnm4jkupHnvZHnu5zvvIjph43luobvvInmnInpmZDlhazlj7gxCzAJBgNV
BAYMAkNOMREwDwYDVQQHDAhTaGVuWmhlbjCCASIwDQYJKoZIhvcNAQEBBQADggEP
ADCCAQoCggEBAMlJDvT9EhoFN/hW80vrx5IG00JMDhS34n3nbmXd8FkRBk761nxE
Z+TzWdtC76heAf5Sl0XBzzOimae3QJ7Dq7PPfWt9zH/MpK4c5wZHBW4PvRyM2RvO
HLZ00WXS3CAZ16GgHLTuEOXBv7XeF9hoJuQsHM4WmtbNQVRAYzi6QvfN92tLucVL
6njxeXR+N7YyebIWE5IyLkTpyJSMTdSd1+dJqEMqA3hGJSDKS+SBxL3yxmS4JgCT
D0JoHhZv/bP7jI4zT/lR2GYuGLQ4JWe98GmWZiI95EwubXc9YDrlFr9CQ6fV5vmn
CL6wOxe9LEBx1OyYIBjjvw0Wj13vJxC1RPkCAwEAAaOBuTCBtjAJBgNVHRMEAjAA
MAsGA1UdDwQEAwID+DCBmwYDVR0fBIGTMIGQMIGNoIGKoIGHhoGEaHR0cDovL2V2
Y2EuaXRydXMuY29tLmNuL3B1YmxpYy9pdHJ1c2NybD9DQT0xQkQ0MjIwRTUwREJD
MDRCMDZBRDM5NzU0OTg0NkMwMUMzRThFQkQyJnNnPUhBQ0M0NzFCNjU0MjJFMTJC
MjdBOUQzM0E4N0FEMUNERjU5MjZFMTQwMzcxMA0GCSqGSIb3DQEBCwUAA4IBAQAc
qtlunx6/t+aG2f2yr88kR5SQtwxY1cf3vWCowSCpE5B0nlIZxVHkyPve0w+HyuIf
Fz5fL55P/vf53callrZ7UJ8X5nCeQNFVeAkimYXocpyMkoZaxFe3ob+rr0fDvOcd
6MUBBKpJArLYpVmKpvQOyrGKSXMhpbLakGdsHF1++s+6DnUPKdObwVO3VpK8OkVw
cdv+AN1M6YC4UTlw/u+TGCEUJY2xgzdRnFTG9kpx9CvWcMIFP47PK72njY5T5uIj
IQclkz3jGSfr9oTbX8xa5MDm6vDs05zZ1IciyHDjs3VRmacYFlPMBeNVhp7JRoGi
Ynd6pwH68Gku/KXAFr2j
-----END CERTIFICATE-----

View File

@ -1,28 +1,28 @@
-----BEGIN PRIVATE KEY-----
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDVkli5iWlW6ySa
t7oW7rSgutZcuhmwMW5yYKvDvXz/zESzpY1Bw0qlJXlWrdbFZkjcG7CbpNB69Htb
qMMRkidzWImDFzFo90u4j8WPvUoZAiV1n77zz40k2m5NXYNwFDPLpEREDqr5SBUc
iXwlKIq5Y9ghl34DLxI7T2FKLhVrwdBFPZPuS88pyMl3JKVbLcda1mbZUkRf4r4l
uQWj39rGZNAwxG3jDNdwbEUjTh0tTVlPA5Fec29YTQav0/zkO4JW7N5B6pQ/k1xJ
HKzeuDa9axK6IXLROhKdHdYkVDBWIyVxbwav9asoutladcMJNVwKqIsriH6ihqz4
Ze2emfvnAgMBAAECggEBAJk92MvH/P2Q20LocW3i+Vgat5TxM11pGoaXNqfMXtRs
DR+ZujFlnznAGcBIG8KoEb9dXutO5whSQ/EQtmb1J7lr3b9h9OIMDxjukCMC/xfS
om4zoR/v3KaE1IBOiPDyjfegdhsfKy6SuhMv0xQWcvNy4LG5sYE3VS2ZV4WSa2xU
5OVCpGCsm0vxK3SVzbsSUnGFEn1zZZabLCh48L1BALHkszCsy575z9g1Hyh2jfuK
50lTrhIw5r4xyITCq6qA7nXSHREStp8ps39+U0qxYwEa9VDNNLPMkZ5iB7q0aJJR
xGdyRoqwbGKI7/DvXPEbM3VtLkdtgdbaap6gvZWnrIECgYEA9LVCRF6jJ5EDjEqg
CN+WahBeOMhiRhaQD0pCBAUqB0g1mq0FdunsKYzjwKWwGJkguCN6nw9AtSRVs2x/
BuCWnL8yYvVEg04WLpV66GbffifImV9qEzRmWbAR0g6uOFNZJDAxk+CLm6NexBIK
UJgJeTzBs+pr4Gm37C4fXTBVm2MCgYEA321F6CZuZ1qvKUhidCYN7Vc7ntpKenFj
CysM8zbJABMaiaDWw7EQDHkm1VY3BnvS5YYmpwTnVVdIuzrosBWxemrd1JBqyxNI
o9o1kYzQMoRmKa1HEN1dUWLhIJXjGSk7o73Zo0G+mb1WwZvenFY2Of4RJ0c7Zw+g
qrQW2f/KPq0CgYAudfe1+W3qxjqxOT33UVRCoQbyqwEVo5UIgiXUk5JuPYSH8I/Y
CwPew7Q+UHcFxJUUwQ+4AXJcsiBfZ5samCugaSDM7xpp/7pwb8sdMuL+FdmdXSNL
sCg6oRZRFp53bUPAfjH7jKeVDkig23f/403xKdrxKPIAcrIL8pnb3KB0VwKBgEBF
CqrxAykv6NsTO17142O2iCv11x7Jpxf7VkpQJBmlZSjZ322DbX5pC0aq+kEfNVdY
851vx6vA4+cX1v9v/hGc1BrlQBMShP69MlOgEfO2Kj0q3xp20vUqYGAjPaRrPACq
CATyUIWg9WfUEoEeO5MLBpwp3WiUEj+IdlpXPjIxAoGBAJSBr2vITajfFfIMsafv
WnF6fB13FXkS/1+ndCWjwu04YDU7eUgiWLetaMntizDb1L303RjLax9wUZI8lBV3
0etV7avvHZQLZmCqeikXgkYj+kbR4O7BgJI/P5OcKK1QfYSs4K9sYIjz/R4mJu6G
mZcrpcHTH5/k9ucLvJ3m/8ga
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDJSQ70/RIaBTf4
VvNL68eSBtNCTA4Ut+J9525l3fBZEQZO+tZ8RGfk81nbQu+oXgH+UpdFwc8zopmn
t0Cew6uzz31rfcx/zKSuHOcGRwVuD70cjNkbzhy2dNFl0twgGdehoBy07hDlwb+1
3hfYaCbkLBzOFprWzUFUQGM4ukL3zfdrS7nFS+p48Xl0fje2MnmyFhOSMi5E6ciU
jE3UndfnSahDKgN4RiUgykvkgcS98sZkuCYAkw9CaB4Wb/2z+4yOM0/5UdhmLhi0
OCVnvfBplmYiPeRMLm13PWA65Ra/QkOn1eb5pwi+sDsXvSxAcdTsmCAY478NFo9d
7ycQtUT5AgMBAAECggEAdDTlmbLxXGxe39TzKYW59ihSlxfpmTSAYkfWiKEVPZaC
md5fLecgRCHqYpfGXOHJLNbp1rAJu7nIE/fMKty0qF7F/eTmx3GSMaMmDY27KMuV
VoJKZa8dDIlsyuhthWrl/r29VQeMYdj1oT3TbnDS4zBEgQaz5gciDE4P+pQuTXlp
nEQ7dnOoMgO5QMbMnF3i4d6YM02tBT75RG+oYdlpHaLRmTrzOQ1lBzWAf5MmIjCE
a99mW4xAGf7tTpKVssZnOVwfy1c9ldCIbPI+jXOGLte/iG7R/Jnf1D2uRKDk0OP7
fP5iUVG0vTM8ojozmM2KMd8hb9rHl/zqohycgyk+wQKBgQDk4Ipy+ltQ8KrZMQUo
I19iBhPWph1eP4yOQtzImuhmvKhlgvKjSePahbmWmR36b8wdzBK1Bb+BPJgRYqYB
s07H40WtkPNr0n1PCkQdm9o+cUxCMhBEczK83afTfqmemUUtfobwsbGIO42UxsAn
nIzMMWPKTyl9P3/PMGSN1es5ZQKBgQDhI3c0J4hGyS0i8/wtZ2WRn+2Z3/GggOmC
764Umejl5pdOakiqqWna9kEgwk/p4U7bt8Vxcm6wYQaI1eP9wKrcNxIpyUrL3NuW
joToihUW/ALrIRglaccFIlRH8xjYL+OCJAuaneM4QiCbggJrKoEQ2sCWGW4aKZOX
8KbxrUkuBQKBgFXhRzHzbPZHB+RtN2EjPLQcUa9WL2jg8Y2j2xJOxete2NUWOJM6
s4uYZ9XxaEVDU9TOcSqJmJ0Wrny/hkjXDjWEuu1wmVYY6joRQRPXGiIaAyJHhMEa
dKxXg5ShT2YaXtG+S0Xfdx0GM47isNFsNYyc77PG1muPuxZ0MxbhcNzdAoGBAKRL
z2feGZMeqLPDPZqcxABbp3cNeDVbHg2Rf4ZFMzLi7jQpV9JDQ56o6qpPYyYYaAXr
vEin66MHi088V98MRSPjhHu+C7lt+UmLw+43JmDZk/+m7QoQgU572OmQu+a4O9zz
FQzGf9TEXSte2wj9waZdHQHsmO66vJy63/mqLadJAoGAEXHWil7RnDr6qeTQNBxS
5fyMAWhFQiL+2fYCXetOmwDZC8DSLQQ3CccXcisz9xCo7+24dZiPoTp0u5EcWmwc
2TiOhkY5aG+f4sVPIm6aAn7PforQE/G2XaDVVlLsCKzUNCIhnmufD/Y2zaZg+MDY
Iah3B7taDbqapcqhLG99rlU=
-----END PRIVATE KEY-----

View File

@ -162,8 +162,8 @@ debug: false
--- #################### 微信公众号、小程序相关配置 ####################
wx:
mp: # 公众号配置(必填),参见 https://github.com/Wechat-Group/WxJava/blob/develop/spring-boot-starters/wx-java-mp-spring-boot-starter/README.md 文档
app-id: wxb1826c88da21d81e
secret: 1960c9cc785b094040a4fd4b2955c0cb
app-id: wx7e503d9cded34c07
secret: 31883ca14e2cbac8610d30f8f945ee47
# 存储配置,解决 AccessToken 的跨节点的共享
config-storage:
type: RedisTemplate # 采用 RedisTemplate 操作 Redis会自动从 Spring 中获取
@ -179,16 +179,16 @@ wx:
pay:
one:
enabled: true
app-id: wxb1826c88da21d81e
mch-id: 1641993417
app-id: wx7e503d9cded34c07
mch-id: 1641073271
mch-key: qdn2I7Cmx4JeiKOt2CDjiu6UHgLTsOsM
apiv3-key: cyywl666666cyywl888888cyywl66666
apiv3-key: cyywl123456cyywl654321cyywl12345
private-cert-path: classpath:/1/apiclient_cert.pem
private-key-path: classpath:/1/apiclient_key.pem
key-path: classpath:/1/apiclient_cert.p12
cert-serial-no: 58FDB503F92B6C0E258C9940BB726C2BF6022E56
notify-url: http://yuxy.perrymake.com/app-api/pay/wxpay/pay_notify
refund-notify-url: http://yuxy.perrymake.com/app-api/pay/wxpay/refund_notify
notify-url: http://yuxy.perrymake.com/admin-api/notify/wxpay/pay_notify
refund-notify-url: http://yuxy.perrymake.com/admin-api/notify/wxpay/refund_notify
two:
enabled: true
app-id: wxb1826c88da21d81e
@ -205,9 +205,9 @@ wx:
ali:
pay:
one:
appId: 2021003194654312
merchantPrivateKey: MIIEwAIBADANBgkqhkiG9w0BAQEFAASCBKowggSmAgEAAoIBAQC+m33MrrmGiSBCBTQMkBH9AN7ZKi/ECmgpjIbVIzAbUThqfiKvuWe8haVq0/F5nETZVYKb3kqqcdt5NkUbGkCrCNCOPvQ2FI8VWOalXGSQNA6ItA644m1dv84Khs5K3Tpu6RgcrL5uqmfNzid7YpLlGeSxMq8uqu/adZnEbm+coJAvEH423pnMjsdkI93FUibaDkDQ06V7Z0Su6l4ZoVzLavvPeP/u8NCvelyf5h+BY159rU8XjCaSYYF/2u4DzDV1LqQcSC+fQg/aVd+QcpnhEF715fbNmN3TLuh1ysnfUSFdVMsdWDrOsgriJ7g0D32uWwhR4Brz3dAFs0KdWTmFAgMBAAECggEBAKdX2JCVbijhx0JvUw0ch856ryw2T41sHZss10vVAu1Y15EXgNiKjLsFEv/BaCX+vquY2XyDI0aVg7zdmrp6x//hU0kvmDTKw/xX+td/UIMSURhQDQThNmeyd/Dh/cfYhu7NEvBJ8T8zuMMFlcBMAO/HVfMErqzoQoCn8wJ0euUkxU+0yWjddC5QHdhPwPgfpmPvL/DCPfSCudFy80ix7CP3YID7RwgCy5niZg3e7aDK6DgYTmk2DmoC7B8ES/7Crvf04fH4XzGrSCzL9aGKOWql6dZisbDioRdm67DEWUSjQGTggEZ+eCd9Tr0gnndVWegG5HYJhSpB/JoLsc5J/dkCgYEA8Tumn60cfJU440LWaJ+40gJWcNrOlvpPEX69DRXKG3PlTAk62sSvVBos2nstqNjhHPQDG7rFerQhmSPeGyezVcwPCbWLvLC61vpbfau+RyWvMvm33A1hgP+zXlt9C3etb9w6LUfuqh0Lzi61K3ZNKQGo4ERxgGoMlNZWO0X/mBMCgYEAykZ9PH1b3be9M55BsnCnnrzENV5Bbfj7BToRleiUWA0f0Juurxy9ZACr8rU1oa7+UF32TpXAOL1Peri5vhYF7hdSnlSk5f9lyEzQijbtRytBC9Mexagb4BZWMlars9jMhhsdWiXA2O6Pz9ykLacGOr0DHM8/6HaVJRlPydXHywcCgYEAzwIgT1/vVR18jtD5SxjdMiJdaUTrCXZNSbcXplXvdLV0rFYzUi58QlCf8vDHUuCh9QWUcURKWKyhNFgqLeVYqKSOtwc6nbaO7xIyVtp9U3KMMNNIKqa06E0E8FDUMnYFuDslFVxn+0Unr0w3nc9MEYdiEunI+KiImWSA5SaBWk8CgYEAlbwshRS/ZpfXZVinhXJDgwx1qpQFl2USXUIpNnGfLrc4b/JvE44Q3PBqWRavhurFs7R62p2cV+Q767rHNOGUrjVxoWdDUkcHj4jdbxNN/rsUQa6dPvA9AltGn6jtHgtFC5kS12LPKUcgCl1o46qav+yfWzpIMstliLr+B4lLhw0CgYEA7Bpm0s2uoyC1XtYCqeWzbjODciq/hgIpmBjnP4Xs0ELB0VE95m9CVQk47dSngRqbkrEO2G2zdMTYj5Mr5bm5AXQfUpwMv89fxCxSXq1Andqe1/UphigltW/PXOfvpD1JcHNfalEcTOTdzENVYH4lN3HAoPobj04gCsFZFcqWfps=
alipayPublicKey: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAw21teFhHze8ltibg/mBE0Lo1gTvcRUszQpsiTLWLoYvLxfaEVD+5bkpTYrVFczLNqOw93MJxwF0Pj62T3BZU6IXPdXtkKhcflKiZxleSIaTxPFml8mQ8dfdcT25BPidRaeztxv/FCL+0MUTMVh29Ffm9/DHqkjozs4o/Vcf/BoDssw9L7JQffwo/h69B0O688E+s+SivqvXGbiRdARzPrvuQjUMPwUf9vQZ4/ZgGNlwsEhnF90ESCuBZDm8atOoZlqYSNw6g+TZQH5CVS0WCR41TQoW+R8OsX1cv3ERvJXvh/50dEhl8b4CN3nvdaSYcw93o/nkkTZkdZ7BdcNuW2wIDAQAB
appId: 2021003196623046
merchantPrivateKey: MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCAhydIKD244uxHaCAE8N4KA0kfK2UkhXayUwarvc09s/JHC7WkrtwgmeHx+JyFA/QQA1WHQREJ8jyS9HrgasmmA+BaE0vGwbu/c0R4Cde5dLeITZb4w4X1RlH+xjtF34pKLH3oVi29q9jUTRii41eCBeztL/XcbJDsxAnCNnuxcak0gk4cl8j9aoMBP/opIc5sTDSqYFSSTDSMPGh90M6KowFtCHyVZxEszcIRX9cRIuf9KtfGvBzljJMjNGshIMuaHVCFpy72E0s50HmMxC4Kodhp6HEdLV1GUBZy87PYiKTqp9WVn0CndzcfmmdUUXVUvqWPKzRN3YSxExJ0Z5KFAgMBAAECggEABovbulciXaphMnnhN581D/l+3fGN40BQ/WAxNMokDAKAUpIMHGkzmQ19bp+lCTlcUvx4fL0ZqxIFd86v+4I05xnHcY8OCv+PGn86e4q0zCNfvbeF+wGqbwW342whVLvABWsitpS9G64HCzkqChHeQScgHCyXLzTwZL7PaG7x+eWnQ3WyA5KlCpUQWOz6OBPD7flkaflVRbDDZqmhcpEwwSXC9vSQb5+E0BZ118+5nJA65Wi/EPtqCzWX4k6ioiQcN5OeJrScZ4fnQm4h4j+TRLeKqkAKCZFpAZcB7RERxA/4Mzz9mEzHOBzSbrUU+miJ3oSkd4S4ldrOZU4EVkI1AQKBgQDe5t+Qij0hOPQaMpiM2hiQnMAI3TzHRbrYf6JUlMqdzad9oasY2ap+iit60TD9OLwjRGzjy7S9WL2bUgmmU4/sOjR0NMl8z3iUTYun6EubNoMUiu9UhQXBThxBCZv/H2agJ4Uswq2lBjUuGyp383lj9qSkScngGknYgrUd/pUa5QKBgQCTnNzCsIU/1N3fhzpvh1RmUwz8JalcmPNxQqrxE53Je+hVQ4BoeVMCov8U62TjBrxmHFEDVwXqAlRUUOWsWu4ac7V/VvFlwQoqPjkjNteOW6aO+BMDAlb2FVg5GzFy/MvLw4EUtU/Sx8EmWZpyaIzjRV4IUHx4WzJoORKEUIH/IQKBgQCh+9F37p3h6Murxh0KLuwvG1qKlow2nDveXVKQeNiNuQgAyl3WX0gBUVOrmx4oxvQiBPXEzSJ5f2W62/FbR9qNZvb7g+jwpK0RyRC2Yp+fGgxD/3tRRqIaCjOKJ/uPeThRJqcnEgqypEI9UUyZgvwyYuje4yirjS8hAkuwknO06QKBgHH4tnbX5jovuBPDjHnaSm8rBqaUyZxGOAimCehTVgvgULWshbOkoVQy17KmQWIMrGBG0sI6acWRgN0NDRgzqQ3hcyxby8zd7GRLYMBwsqQm3YYbwkobf1tHhbOp7Fc1GoE8dSixCW3cb6SVoGtfkBBWWdEfm8st1tCj6EkjBAwhAoGAShd1PY/QOEJ6Cj9IDXvD25DAh0dKs54PRxENetbIxPgYpH7db6n/smmbwM69U4TXZyFfqme1Bc0JwM2J7D6gs4OV88AhXJvfj091eJQhYC5e80Eo8dySserwLp8/ka6FV/EFUplg/DD4JR/jbVzO2fbOPCLm6I+sZqG3K7mg6IM=
alipayPublicKey: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAgIcnSCg9uOLsR2ggBPDeCgNJHytlJIV2slMGq73NPbPyRwu1pK7cIJnh8fichQP0EANVh0ERCfI8kvR64GrJpgPgWhNLxsG7v3NEeAnXuXS3iE2W+MOF9UZR/sY7Rd+KSix96FYtvavY1E0YouNXggXs7S/13GyQ7MQJwjZ7sXGpNIJOHJfI/WqDAT/6KSHObEw0qmBUkkw0jDxofdDOiqMBbQh8lWcRLM3CEV/XESLn/SrXxrwc5YyTIzRrISDLmh1Qhacu9hNLOdB5jMQuCqHYaehxHS1dRlAWcvOz2Iik6qfVlZ9Ap3c3H5pnVFF1VL6ljys0Td2EsRMSdGeShQIDAQAB
gatewayUrl: https://openapi.alipay.com/gateway.do
notify-url: http://yuxy.perrymake.com/app-api/pay/ali/pay_notify
# 芋道配置项,设置当前项目所有自定义的配置