Browse Source

修改证书提现

dev
主管理员 1 month ago
parent
commit
c8f8829b05
16 changed files with 247 additions and 33 deletions
  1. +1
    -1
      admin-hanhai-vue/.env.development
  2. +1
    -1
      admin-hanhai-vue/.env.production
  3. +13
    -13
      admin-hanhai-vue/src/views/hanHaiWater/HanHaiWaterList.vue
  4. +12
    -12
      han-hai-module-pay/src/main/java/org/jeecg/modules/pay/MpWxPayService.java
  5. +3
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/config/shiro/ShiroConfig.java
  6. +56
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hanHaiWater/controller/HanHaiWaterController.java
  7. +32
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hanHaiWater/resp/TransferBatchNotifyResourceResp.java
  8. +51
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hanHaiWater/resp/TransferBatchResourceDataResp.java
  9. +31
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hanHaiWater/resp/TransferBatchesNotifyResp.java
  10. +2
    -2
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/api/noticeapicontroller/InfoApiController.java
  11. +8
    -0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/api/noticeapicontroller/OrderApiController.java
  12. +1
    -1
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/apiservice/InfoApiService.java
  13. +2
    -0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/apiservice/OrderApiService.java
  14. +11
    -1
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/apiservice/impl/InfoApiServiceImpl.java
  15. +21
    -0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/apiservice/impl/OrderApiServiceImpl.java
  16. +2
    -2
      jeecg-boot-module-system/src/main/resources/application-dev.yml

+ 1
- 1
admin-hanhai-vue/.env.development View File

@ -1,5 +1,5 @@
NODE_ENV=development
VUE_APP_API_BASE_URL=http://localhost:8000/a-notice-api/
VUE_APP_API_BASE_URL=https://admin.ytonggao.com/a-notice-api/
VUE_APP_CAS_BASE_URL=http://cas.example.org:8443/cas
VUE_APP_ONLINE_BASE_URL=http://fileview.jeecg.com/onlinePreview


+ 1
- 1
admin-hanhai-vue/.env.production View File

@ -1,4 +1,4 @@
NODE_ENV=production
VUE_APP_API_BASE_URL=http://localhost:8000/a-notice-api/
VUE_APP_API_BASE_URL=https://admin.ytonggao.com/a-notice-api/
VUE_APP_CAS_BASE_URL=http://localhost:8888/cas
VUE_APP_ONLINE_BASE_URL=http://fileview.jeecg.com/onlinePreview

+ 13
- 13
admin-hanhai-vue/src/views/hanHaiWater/HanHaiWaterList.vue View File

@ -26,19 +26,19 @@
<!-- 操作按钮区域 -->
<div class="table-operator">
<a-button @click="handleAdd" type="primary" icon="plus">新增</a-button>
<a-button type="primary" icon="download" @click="handleExportXls('流水信息表')">导出</a-button>
<a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel">
<a-button type="primary" icon="import">导入</a-button>
</a-upload>
<!-- 高级查询区域 -->
<j-super-query :fieldList="superFieldList" ref="superQueryModal" @handleSuperQuery="handleSuperQuery"></j-super-query>
<a-dropdown v-if="selectedRowKeys.length > 0">
<a-menu slot="overlay">
<a-menu-item key="1" @click="batchDel"><a-icon type="delete"/>删除</a-menu-item>
</a-menu>
<a-button style="margin-left: 8px"> 批量操作 <a-icon type="down" /></a-button>
</a-dropdown>
<!-- <a-button @click="handleAdd" type="primary" icon="plus">新增</a-button>-->
<!-- <a-button type="primary" icon="download" @click="handleExportXls('流水信息表')">导出</a-button>-->
<!-- <a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel">-->
<!-- <a-button type="primary" icon="import">导入</a-button>-->
<!-- </a-upload>-->
<!-- &lt;!&ndash; 高级查询区域 &ndash;&gt;-->
<!-- <j-super-query :fieldList="superFieldList" ref="superQueryModal" @handleSuperQuery="handleSuperQuery"></j-super-query>-->
<!-- <a-dropdown v-if="selectedRowKeys.length > 0">-->
<!-- <a-menu slot="overlay">-->
<!-- <a-menu-item key="1" @click="batchDel"><a-icon type="delete"/>删除</a-menu-item>-->
<!-- </a-menu>-->
<!-- <a-button style="margin-left: 8px"> 批量操作 <a-icon type="down" /></a-button>-->
<!-- </a-dropdown>-->
</div>
<!-- table区域-begin -->


+ 12
- 12
han-hai-module-pay/src/main/java/org/jeecg/modules/pay/MpWxPayService.java View File

@ -99,13 +99,13 @@ public class MpWxPayService {
request.setTotalFee(price); //总金额|分计
request.setSpbillCreateIp(clientIp); //终端IP
// request.setNotifyUrl(wxPay.notifyUrl);//设置回调路径
request.setNotifyUrl("https://admin.anqi.shop/a-notice-api/api/order/notify");//设置回调路径
request.setNotifyUrl("https://admin.ytonggao.com/a-notice-api/api/order/notify");//设置回调路径
request.setProductId(productId); //商品id
request.setOpenid(openId); //JSAPI OPENID
if (dev){
request.setTotalFee(price);
// request.setNotifyUrl(wxPay.notifyUrlDev);
request.setNotifyUrl("https://admin.anqi.shop/a-notice-api/api/order/notify");//设置回调路径
request.setNotifyUrl("https://admin.ytonggao.com/a-notice-api/api/order/notify");//设置回调路径
}
try {
Object order = wxPayService.createOrder(request);
@ -140,13 +140,13 @@ public class MpWxPayService {
request.setTotalFee(price); //总金额|分计
request.setSpbillCreateIp(clientIp); //终端IP
// request.setNotifyUrl(wxPay.notifyUrl);//设置回调路径
request.setNotifyUrl("http://test-lzx.natapp1.cc/a-notice-api/api/order/notify2");//设置回调路径
request.setNotifyUrl("https://admin.ytonggao.com/a-notice-api/api/order/notify2");//设置回调路径
request.setProductId(productId); //商品id
request.setOpenid(openId); //JSAPI OPENID
if (dev){
request.setTotalFee(price);
// request.setNotifyUrl(wxPay.notifyUrlDev);
request.setNotifyUrl("http://test-lzx.natapp1.cc/a-notice-api/api/order/notify2");//设置回调路径
request.setNotifyUrl("https://admin.ytonggao.com/a-notice-api/api/order/notify2");//设置回调路径
}
try {
Object order = wxPayService.createOrder(request);
@ -182,13 +182,13 @@ public class MpWxPayService {
request.setTotalFee(price); //总金额|分计
request.setSpbillCreateIp(clientIp); //终端IP
// request.setNotifyUrl(wxPay.notifyUrl);//设置回调路径
request.setNotifyUrl("https://admin.anqi.shop/a-notice-api/api/order/notify3");//设置回调路径
request.setNotifyUrl("https://admin.ytonggao.com/a-notice-api/api/order/notify3");//设置回调路径
request.setProductId(productId); //商品id
request.setOpenid(openId); //JSAPI OPENID
if (dev){
request.setTotalFee(price);
// request.setNotifyUrl(wxPay.notifyUrlDev);
request.setNotifyUrl("https://admin.anqi.shop/a-notice-api/api/order/notify3");//设置回调路径
request.setNotifyUrl("https://admin.ytonggao.com/a-notice-api/api/order/notify3");//设置回调路径
}
try {
Object order = wxPayService.createOrder(request);
@ -226,13 +226,13 @@ public class MpWxPayService {
request.setTotalFee(price); //总金额|分计
request.setSpbillCreateIp(clientIp); //终端IP
// request.setNotifyUrl(wxPay.notifyUrl);//设置回调路径
request.setNotifyUrl("http://h5.xzaiyp.top/a-notice-api/pay-api/info/notify");//设置回调路径
request.setNotifyUrl("https://admin.ytonggao.com/a-notice-api/pay-api/info/notify");//设置回调路径
request.setProductId(productId); //商品id
request.setOpenid(openId); //JSAPI OPENID
if (dev){
request.setTotalFee(price);
// request.setNotifyUrl(wxPay.notifyUrlDev);
request.setNotifyUrl("http://h5.xzaiyp.top/a-notice-api/pay-api/info/notify");//设置回调路径
request.setNotifyUrl("https://admin.ytonggao.com/a-notice-api/pay-api/info/notify");//设置回调路径
}
try {
Object order = wxPayService.createOrder(request);
@ -268,13 +268,13 @@ public class MpWxPayService {
request.setTotalFee(price); //总金额|分计
request.setSpbillCreateIp(clientIp); //终端IP
// request.setNotifyUrl(wxPay.notifyUrl);//设置回调路径
request.setNotifyUrl("http://h5.xzaiyp.top/a-notice-api/pay-api/info/notify");//设置回调路径
request.setNotifyUrl("https://admin.ytonggao.com/a-notice-api/pay-api/info/notify");//设置回调路径
request.setProductId(productId); //商品id
request.setOpenid(openId); //JSAPI OPENID
if (dev){
request.setTotalFee(price);
// request.setNotifyUrl(wxPay.notifyUrlDev);
request.setNotifyUrl("http://h5.xzaiyp.top/a-notice-api/pay-api/info/notify");//设置回调路径
request.setNotifyUrl("https://admin.ytonggao.com/a-notice-api/pay-api/info/notify");//设置回调路径
}
try {
Object order = wxPayService.createOrder(request);
@ -318,13 +318,13 @@ public class MpWxPayService {
request.setTotalFee(price); //总金额|分计
request.setSpbillCreateIp(clientIp); //终端IP
// request.setNotifyUrl(wxPay.notifyUrl);//设置回调路径
request.setNotifyUrl("https://admin.csnaicheng.com/h5-api/api/notify");//设置回调路径
request.setNotifyUrl("https://admin.ytonggao.com/a-notice-api/api/notify");//设置回调路径
request.setProductId(productId); //商品id
request.setOpenid(openId); //JSAPI OPENID
if (dev){
request.setTotalFee(price);
// request.setNotifyUrl(wxPay.notifyUrlDev);
request.setNotifyUrl("https://admin.csnaicheng.com/h5-api/api/notify");//设置回调路径
request.setNotifyUrl("https://admin.ytonggao.com/a-notice-api/api/notify");//设置回调路径
}
try {
Object order = wxPayService.createOrder(request);


+ 3
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/config/shiro/ShiroConfig.java View File

@ -79,6 +79,9 @@ public class ShiroConfig {
filterChainDefinitionMap.put("/api/order/**", "anon");
filterChainDefinitionMap.put("/api/info/**", "anon");
filterChainDefinitionMap.put("/hanHaiWater/hanHaiWater/withdrawal/notify", "anon");
filterChainDefinitionMap.put("/hanHaiWater/hanHaiWater/**", "anon");


+ 56
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hanHaiWater/controller/HanHaiWaterController.java View File

@ -1,5 +1,7 @@
package org.jeecg.modules.hanHaiWater.controller;
import java.nio.charset.StandardCharsets;
import java.security.GeneralSecurityException;
import java.util.*;
import java.util.stream.Collectors;
import java.io.IOException;
@ -12,6 +14,7 @@ import java.security.cert.X509Certificate;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import com.wechat.pay.contrib.apache.httpclient.util.AesUtil;
import com.wechat.pay.contrib.apache.httpclient.util.RsaCryptoUtil;
import org.apache.commons.lang3.StringUtils;
import org.jeecg.common.api.vo.Result;
@ -27,6 +30,8 @@ import org.jeecg.modules.hanHaiMember.service.IHanHaiMemberService;
import org.jeecg.modules.hanHaiWater.entity.HanHaiWater;
import org.jeecg.modules.hanHaiWater.req.TransferBatchesDetailsRequest;
import org.jeecg.modules.hanHaiWater.req.TransferBatchesRequest;
import org.jeecg.modules.hanHaiWater.resp.TransferBatchResourceDataResp;
import org.jeecg.modules.hanHaiWater.resp.TransferBatchesNotifyResp;
import org.jeecg.modules.hanHaiWater.resp.TransferBatchesResp;
import org.jeecg.modules.hanHaiWater.service.IHanHaiWaterService;
@ -81,6 +86,8 @@ public class HanHaiWaterController extends JeecgController<HanHaiWater, IHanHaiW
private String mchId;
@Value("${wxpay.serialNo}")
private String wxsSerialNo;
@Value("${wxpay.apiV3Key}")
private String apiV3Key;
/**
* 分页列表查询
@ -148,6 +155,7 @@ public class HanHaiWaterController extends JeecgController<HanHaiWater, IHanHaiW
transferBatchesRequest.setTransferRemark("商家提现");
transferBatchesRequest.setOpenid(hanHaiMember.getAppletOpenid());
transferBatchesRequest.setTransferSceneId("1005");
transferBatchesRequest.setNotifyUrl(transferBatchUrl);
String serialNo = null;
//加密真实姓名
try {
@ -335,4 +343,52 @@ public class HanHaiWaterController extends JeecgController<HanHaiWater, IHanHaiW
}
@PostMapping("/withdrawal/notify")
public Object withdrawalNotify(@RequestBody TransferBatchesNotifyResp transferBatchesNotifyResp) throws GeneralSecurityException, IOException {
log.info("回调内容:"+transferBatchesNotifyResp.toString());
String associatedData = "mch_payment";
String decryptToString = new AesUtil(apiV3Key.getBytes(StandardCharsets.UTF_8)).decryptToString(associatedData.getBytes(StandardCharsets.UTF_8), transferBatchesNotifyResp.getResource().getNonce().getBytes(StandardCharsets.UTF_8), transferBatchesNotifyResp.getResource().getCiphertext());
log.info("解密内容:"+decryptToString);
TransferBatchResourceDataResp transferBatchResourceDataResp = JSON.parseObject(decryptToString, TransferBatchResourceDataResp.class);
log.info("解密内容转换:"+transferBatchResourceDataResp.toString());
HanHaiWater hotelBalanceLog = hanHaiWaterService.lambdaQuery().eq(HanHaiWater::getPackageInfo, transferBatchResourceDataResp.getOutBillNo()).one();
Map<String, Object> map = new HashMap<>();
if(hotelBalanceLog == null){
log.error("失败,未查找到数据");
map.put("code","FAIL");
map.put("message","未查找到数据");
return map;
}
HanHaiWater hotelBalanceLog1 = new HanHaiWater();
hotelBalanceLog1.setId(hotelBalanceLog.getId());
hotelBalanceLog1.setState(2);
hanHaiWaterService.updateById(hotelBalanceLog1);
map.put("code","SUCCESS");
map.put("message","SUCCESS");
return map;
}
}

+ 32
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hanHaiWater/resp/TransferBatchNotifyResourceResp.java View File

@ -0,0 +1,32 @@
package org.jeecg.modules.hanHaiWater.resp;
import com.alibaba.fastjson.annotation.JSONField;
import lombok.Data;
@Data
public class TransferBatchNotifyResourceResp {
/**
* 加密算法类型
* 对开启结果数据进行加密的加密算法目前只支持AEAD_AES_256_GCM
*/
@JSONField(name = "algorithm")
private String algorithm;
/**
* 数据密文
* Base64编码后的商家转账结果数据密文
*/
@JSONField(name = "ciphertext")
private String ciphertext;
/**附加数据*/
@JSONField(name = "associated_data")
private String associatedData;
/**原始回调类型,为mch_payment*/
@JSONField(name = "original_type")
private String originalType;
/**加密使用的随机串*/
@JSONField(name = "nonce")
private String nonce;
}

+ 51
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hanHaiWater/resp/TransferBatchResourceDataResp.java View File

@ -0,0 +1,51 @@
package org.jeecg.modules.hanHaiWater.resp;
import com.alibaba.fastjson.annotation.JSONField;
import lombok.Data;
@Data
public class TransferBatchResourceDataResp {
/**微信批次单号*/
@JSONField(name = "out_bill_no")
private String outBillNo;
/**商家批次单号*/
@JSONField(name = "transfer_bill_no")
private String transferBillNo;
/**
* 商家转账订单状态
* ACCEPTED: 转账已受理
*
* PROCESSING: 转账处理中转账结果尚未明确如一直处于此状态建议检查账户余额是否足够
*
* WAIT_USER_CONFIRM: 待收款用户确认可拉起微信收款确认页面进行收款确认
*
* TRANSFERING: 转账结果尚未明确可拉起微信收款确认页面再次重试确认收款
*
* SUCCESS: 转账成功
*
* FAIL: 转账失败
*
* CANCELING: 商户撤销请求受理成功该笔转账正在撤销中
*
* CANCELLED: 转账撤销完成
* */
@JSONField(name = "state")
private String state;
/**失败原因*/
@JSONField(name = "fail_reason")
private String failReason;
/**商户号*/
@JSONField(name = "mch_id")
private String mchId;
/**转账总金额,单位为“分”*/
@JSONField(name = "transfer_amount")
private Integer transferAmount;
@JSONField(name = "openid")
private String openid;
@JSONField(name = "create_time")
private String createTime;
@JSONField(name = "update_time")
private String updateTime;
}

+ 31
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/hanHaiWater/resp/TransferBatchesNotifyResp.java View File

@ -0,0 +1,31 @@
package org.jeecg.modules.hanHaiWater.resp;
import com.alibaba.fastjson.annotation.JSONField;
import lombok.Data;
@Data
public class TransferBatchesNotifyResp {
private String id;
@JSONField(name = "create_time")
private String createTime;
/**
* 通知类型
* 通知的类型商家转账通知的类型为MCHTRANSFER.BILL.FINISHED
* */
@JSONField(name = "event_type")
private String eventType;
/**
* 通知类型
* 通知的资源数据类型商家转账通知为encrypt-resource
* */
@JSONField(name = "resource_type")
private String resourceType;
/**通知数据*/
@JSONField(name = "resource")
private TransferBatchNotifyResourceResp resource;
/**回调摘要*/
@JSONField(name = "summary")
private String summary;
}

+ 2
- 2
jeecg-boot-module-system/src/main/java/org/jeecg/modules/api/noticeapicontroller/InfoApiController.java View File

@ -233,9 +233,9 @@ public class InfoApiController {
//提现
@ApiOperation(value="小程序-提现", notes="小程序-提现")
@GetMapping("/withdraw")
public Result<?> withdraw(@RequestHeader("X-Access-Token") String token, BigDecimal money)
public Result<?> withdraw(@RequestHeader("X-Access-Token") String token, BigDecimal money,String name)
{
return infoApiService.withdraw(token,money);
return infoApiService.withdraw(token,money,name);
}


+ 8
- 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/api/noticeapicontroller/OrderApiController.java View File

@ -61,6 +61,14 @@ public class OrderApiController {
return orderApiService.createNotify3(requestBody);
}
//提现回调
@PostMapping("/notify4")
public Object createNotify4(@RequestBody String requestBody){
return orderApiService.createNotify4(requestBody);
}


+ 1
- 1
jeecg-boot-module-system/src/main/java/org/jeecg/modules/apiservice/InfoApiService.java View File

@ -62,7 +62,7 @@ public interface InfoApiService {
Result<?> getIncomePage(String token,HanHaiWaterBean bean);
//用户提现
Result<?> withdraw(String token, BigDecimal price);
Result<?> withdraw(String token, BigDecimal price,String name);
//发布动态
Result<?> releaseTrends(String token, AtTrends atTrends);


+ 2
- 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/apiservice/OrderApiService.java View File

@ -17,4 +17,6 @@ public interface OrderApiService {
Object createNotify2(String requestBody);
Object createNotify3(String requestBody);
Object createNotify4(String requestBody);
}

+ 11
- 1
jeecg-boot-module-system/src/main/java/org/jeecg/modules/apiservice/impl/InfoApiServiceImpl.java View File

@ -321,6 +321,7 @@ public class InfoApiServiceImpl implements InfoApiService {
.lambdaQuery()
.eq(HanHaiWater::getUserId,hanHaiMember.getId())
.orderByDesc(HanHaiWater::getCreateTime)
.eq(HanHaiWater::getType, 0)
.page(page);
return Result.OK("收益记录",pageList);
}
@ -333,6 +334,7 @@ public class InfoApiServiceImpl implements InfoApiService {
Page<HanHaiWater> pageList = hanHaiWaterService
.lambdaQuery()
.eq(HanHaiWater::getUserId,hanHaiMember.getId())
.eq(HanHaiWater::getType, 1)
.orderByDesc(HanHaiWater::getCreateTime)
.page(page);
return Result.OK("提现记录",pageList);
@ -662,8 +664,11 @@ public class InfoApiServiceImpl implements InfoApiService {
//用户提现
@Override
public Result<?> withdraw(String token, BigDecimal price){
public Result<?> withdraw(String token, BigDecimal price,String name){
HanHaiMember hanHaiMember = shiroRealm.checkUserTokenIsEffectHanHaiOpenId(token);
//金额不能为空
if(price == null){
return Result.error("参数错误!提现金额不能为空");
@ -671,9 +676,14 @@ public class InfoApiServiceImpl implements InfoApiService {
if(hanHaiMember.getPrice().compareTo(price) < 0){
return Result.error("参数错误!提现金额不能大于用户余额");
}
//必须填写名字
if(StringUtils.isBlank(name)){
return Result.error("参数错误!名字不能为空");
}
hanHaiMember.setPrice(hanHaiMember.getPrice().subtract(price));
hanHaiMemberService.updateById(hanHaiMember);
HanHaiWater hanHaiWater = new HanHaiWater();
hanHaiWater.setName(name);
hanHaiWater.setUserId(hanHaiMember.getId());
hanHaiWater.setPrice(price);
hanHaiWater.setType(1);


+ 21
- 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/apiservice/impl/OrderApiServiceImpl.java View File

@ -283,4 +283,25 @@ public class OrderApiServiceImpl implements OrderApiService {
return null;
}
//支付回调
@Override
public Object createNotify4(String requestBody){
WxPayOrderNotifyResult notify = mpWxPayService.notify(requestBody);
String outTradeNo = notify.getOutTradeNo();
HanHaiWater byId = hanHaiWaterService.getById(outTradeNo);
System.out.println("进入了支付回调");
//如果不为空则修改支付状态
if(byId!=null){
if (byId.getState() == 1){
byId.setState(2);
hanHaiWaterService.updateById(byId);
}
}
return null;
}
}

+ 2
- 2
jeecg-boot-module-system/src/main/resources/application-dev.yml View File

@ -367,9 +367,9 @@ wxpay:
# 微信支付V3-url前缀
baseUrl: https://api.mch.weixin.qq.com/v3
# 支付通知回调, pjm6m9.natappfree.cc 为内网穿透地址
notifyUrl: http://pjm6m9.natappfree.cc/pay/payNotify
notifyUrl: https://admin.ytonggao.com/a-notice-api/hanHaiWater/hanHaiWater/withdrawal/notify
# 退款通知回调, pjm6m9.natappfree.cc 为内网穿透地址
refundNotifyUrl: http://pjm6m9.natappfree.cc/pay/refundNotify
refundNotifyUrl: https://admin.ytonggao.com/a-notice-api/hanHaiWater/hanHaiWater/withdrawal/notify
# 密钥路径,resources根目录下
keyPemPath: apiclient_key.pem
#商户证书序列号


Loading…
Cancel
Save