feat:支付宝支付
This commit is contained in:
1 parent
4d3376067c
commit
a16f5de2df
26 files changed
+439
-274
No files matched your search
@@ -1,4 +1,7 @@
|
||||
MYSQL_HOST=123.157.250.162
|
||||
MYSQL_PORT=28815
|
||||
MYSQL_USER=root@sys
|
||||
MYSQL_PWD=bsd.1799
|
||||
MYSQL_PWD=bsd.1799
|
||||
|
||||
SERVICE_MYSQL_USER=jhkjx
|
||||
SERVICE_MYSQL_PWD=LrM8Sza8DF77cESJ
|
||||
+1
-1
@@ -13,7 +13,7 @@ import java.util.Arrays;
|
||||
@Getter
|
||||
public enum AppPlusPlatformTypeEnum {
|
||||
|
||||
WECHAT("10", "微信小程序"),
|
||||
WECHAT("10", "微信"),
|
||||
ALI_PAY("20", "支付宝"),
|
||||
;
|
||||
|
||||
|
||||
+2
@@ -9,6 +9,8 @@ import lombok.Data;
|
||||
@Data
|
||||
public class ThirdAppPlusPayDto {
|
||||
|
||||
private Long mchId;
|
||||
|
||||
/**
|
||||
* 子商户id
|
||||
*/
|
||||
|
||||
-21
@@ -1,21 +0,0 @@
|
||||
package com.bsd.pjcloud.thirdparty.dto.appplus.pay.wechat;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 查询订单入参
|
||||
*/
|
||||
@Data
|
||||
public class ThirdMiniWechatQueryDto {
|
||||
|
||||
/**
|
||||
* 微信订单号
|
||||
*/
|
||||
private String wechantOrderId;
|
||||
|
||||
/**
|
||||
* 商户订单号
|
||||
*/
|
||||
private String orderId;
|
||||
|
||||
}
|
||||
-16
@@ -1,16 +0,0 @@
|
||||
package com.bsd.pjcloud.thirdparty.dto.appplus.pay.wechat;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 微信退款查询入参
|
||||
*/
|
||||
@Data
|
||||
public class ThirdMiniWechatRefundQueryDto {
|
||||
|
||||
/**
|
||||
* 退款id
|
||||
*/
|
||||
private String refundId;
|
||||
|
||||
}
|
||||
+12
@@ -54,6 +54,18 @@ public class ThirdPayOrderEntity extends Model<ThirdPayOrderEntity> {
|
||||
@Schema(description = "用户id")
|
||||
private Long userId;
|
||||
|
||||
/**
|
||||
* 支付到账商户id
|
||||
*/
|
||||
@Schema(description = "支付到账商户id")
|
||||
private Long mchId;
|
||||
|
||||
/**
|
||||
* 商户支付配置
|
||||
*/
|
||||
@Schema(description = "商户支付配置")
|
||||
private String mchPaySettingJson;
|
||||
|
||||
/**
|
||||
* 用户code
|
||||
*/
|
||||
|
||||
+4
-1
@@ -3,10 +3,13 @@ package com.bsd.pjcloud.thirdparty.vo.appplus.pay;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
@Data
|
||||
public class ThirdMiniAppPayVo {
|
||||
|
||||
private HashMap<String, Object> appPlusPayParams;
|
||||
private String payNo;
|
||||
|
||||
private Map<String, Object> appPlusPayParams;
|
||||
|
||||
}
|
||||
+2
@@ -13,6 +13,8 @@ import java.time.LocalDateTime;
|
||||
@Data
|
||||
public class ThirdALiPayCallbackVo {
|
||||
|
||||
private String msg_method;
|
||||
|
||||
/**
|
||||
* 通知时间。通知的发送时间。格式为 yyyy-MM-dd HH:mm:ss。
|
||||
*/
|
||||
|
||||
+1
-1
@@ -39,7 +39,7 @@ public class ThirdMiniJsapiPayVo {
|
||||
|
||||
private String code_url;
|
||||
|
||||
private HashMap<String, Object> miniAppPayParams;
|
||||
private HashMap<String, Object> appPayParams;
|
||||
|
||||
public boolean isHttpSucess() {
|
||||
return ObjectUtil.equals(ThirdMiniWechatQueryVo.SUCCESS, return_code);
|
||||
|
||||
-140
@@ -1,140 +0,0 @@
|
||||
package com.bsd.pjcloud.thirdparty.vo.appplus.pay.wechat;
|
||||
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 查询订单返回
|
||||
*/
|
||||
@Data
|
||||
public class ThirdMiniWechatQueryVo {
|
||||
public static final String SUCCESS = "SUCCESS";
|
||||
|
||||
private String return_code;
|
||||
|
||||
private String return_msg;
|
||||
|
||||
private String appid;
|
||||
|
||||
private String mch_id;
|
||||
|
||||
private String nonce_str;
|
||||
|
||||
private String sign;
|
||||
|
||||
private String result_code;
|
||||
|
||||
private String err_code;
|
||||
|
||||
private String err_code_des;
|
||||
|
||||
private String device_info;
|
||||
|
||||
/**
|
||||
* 用户标识
|
||||
*/
|
||||
private String openid;
|
||||
|
||||
/**
|
||||
* 是否关注公众账号
|
||||
*/
|
||||
private String is_subscribe;
|
||||
|
||||
/**
|
||||
* 交易类型
|
||||
*/
|
||||
private String trade_type;
|
||||
|
||||
/**
|
||||
* 交易状态
|
||||
*/
|
||||
private String trade_state;
|
||||
|
||||
/**
|
||||
* 付款银行
|
||||
*/
|
||||
private String bank_type;
|
||||
|
||||
/**
|
||||
* 标价金额
|
||||
*/
|
||||
private String total_fee;
|
||||
|
||||
/**
|
||||
* 应结订单金额
|
||||
*/
|
||||
private String settlement_total_fee;
|
||||
|
||||
/**
|
||||
* 标价币种
|
||||
*/
|
||||
private String fee_type;
|
||||
|
||||
/**
|
||||
* 现金支付金额
|
||||
*/
|
||||
private String cash_fee;
|
||||
|
||||
/**
|
||||
* 现金支付币种
|
||||
*/
|
||||
private String cash_fee_type;
|
||||
|
||||
/**
|
||||
* 代金券金额
|
||||
*/
|
||||
private String coupon_fee;
|
||||
|
||||
/**
|
||||
* 代金券使用数量
|
||||
*/
|
||||
private String coupon_count;
|
||||
|
||||
/**
|
||||
* 微信支付订单号
|
||||
*/
|
||||
private String transaction_id;
|
||||
|
||||
/**
|
||||
* 商户订单号
|
||||
*/
|
||||
private String out_trade_no;
|
||||
|
||||
/**
|
||||
* 附加数据
|
||||
*/
|
||||
private String attach;
|
||||
|
||||
/**
|
||||
* 支付完成时间
|
||||
*/
|
||||
private String time_end;
|
||||
|
||||
/**
|
||||
* 交易状态描述
|
||||
*/
|
||||
private String trade_state_desc;
|
||||
|
||||
public boolean isHttpSucess() {
|
||||
return ObjectUtil.equals(ThirdMiniWechatQueryVo.SUCCESS, return_code);
|
||||
}
|
||||
|
||||
public boolean isPaySucess() {
|
||||
return ObjectUtil.equals(ThirdMiniWechatQueryVo.SUCCESS, result_code);
|
||||
}
|
||||
|
||||
public static String wechantError() {
|
||||
return "<xml>" +
|
||||
"<return_code><![CDATA[FAIL]]></return_code>" +
|
||||
"<return_msg><![CDATA[FAIL]]></return_msg>" +
|
||||
"</xml>";
|
||||
}
|
||||
|
||||
public static String wechantSuccess() {
|
||||
return "<xml>" +
|
||||
" <return_code><![CDATA[SUCCESS]]></return_code>" +
|
||||
" <return_msg><![CDATA[OK]]></return_msg>\n" +
|
||||
"</xml>";
|
||||
}
|
||||
|
||||
}
|
||||
+2
@@ -6,6 +6,8 @@ import lombok.Data;
|
||||
@Data
|
||||
public class ThirdPayOrderVo extends ThirdPayOrderEntity {
|
||||
|
||||
private String mchName;
|
||||
|
||||
private String username;
|
||||
|
||||
private String userPhone;
|
||||
|
||||
+5
@@ -61,6 +61,11 @@ public class AppPlusPayConfig {
|
||||
*/
|
||||
private String merchantSerialNumber;
|
||||
|
||||
/**
|
||||
* 回调基础地址
|
||||
*/
|
||||
private String baseCallbackUrl;
|
||||
|
||||
/**
|
||||
* 支付成功的回调
|
||||
*/
|
||||
|
||||
+28
@@ -8,10 +8,14 @@ import com.bsd.pjcloud.thirdparty.config.AppPlusPayConfig;
|
||||
import com.wechat.pay.java.core.Config;
|
||||
import com.wechat.pay.java.core.RSAAutoCertificateConfig;
|
||||
import com.wechat.pay.java.core.RSAPublicKeyConfig;
|
||||
import com.wechat.pay.java.core.notification.NotificationConfig;
|
||||
import com.wechat.pay.java.core.notification.NotificationParser;
|
||||
import com.wechat.pay.java.core.notification.RSAPublicKeyNotificationConfig;
|
||||
import com.wechat.pay.java.service.partnerpayments.app.AppService;
|
||||
import com.wechat.pay.java.service.partnerpayments.app.AppServiceExtension;
|
||||
import com.wechat.pay.java.service.partnerpayments.jsapi.JsapiServiceExtension;
|
||||
import com.wechat.pay.java.service.partnerpayments.nativepay.NativePayService;
|
||||
import com.wechat.pay.java.service.refund.RefundService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
@@ -55,4 +59,28 @@ public class WechatConfiguration {
|
||||
return new AppServiceExtension.Builder().config(config).build();
|
||||
}
|
||||
|
||||
@Bean
|
||||
public NotificationParser notificationParser() {
|
||||
AppPlusPayConfig.WechatConfig wechatConfig = properties.getWechatConfig();
|
||||
NotificationConfig config = new RSAAutoCertificateConfig.Builder()
|
||||
.merchantId(wechatConfig.getMerchantId())
|
||||
.privateKeyFromPath(wechatConfig.getMchPrivatePath())
|
||||
.merchantSerialNumber(wechatConfig.getMerchantSerialNumber())
|
||||
.apiV3Key(wechatConfig.getApiV3Key())
|
||||
.build();
|
||||
return new NotificationParser(config);
|
||||
}
|
||||
|
||||
@Bean
|
||||
public RefundService refundService() {
|
||||
AppPlusPayConfig.WechatConfig wechatConfig = properties.getWechatConfig();
|
||||
Config config = new RSAAutoCertificateConfig.Builder()
|
||||
.merchantId(wechatConfig.getMerchantId())
|
||||
.privateKeyFromPath(wechatConfig.getMchPrivatePath())
|
||||
.merchantSerialNumber(wechatConfig.getMerchantSerialNumber())
|
||||
.apiV3Key(wechatConfig.getApiV3Key())
|
||||
.build();
|
||||
return new RefundService.Builder().config(config).build();
|
||||
}
|
||||
|
||||
}
|
||||
+8
@@ -8,6 +8,7 @@ import com.bsd.pjcloud.thirdparty.dto.appplus.ThirdMiniAppPayDto;
|
||||
import com.bsd.pjcloud.thirdparty.dto.appplus.pay.wechat.ThirdMiniWechatRefundDto;
|
||||
import com.bsd.pjcloud.thirdparty.service.ThirdAppPlusService;
|
||||
import com.bsd.pjcloud.thirdparty.vo.appplus.pay.ThirdMiniAppPayVo;
|
||||
import com.bsd.pjcloud.thirdparty.vo.pay.ThirdPayOrderVo;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.security.SecurityRequirement;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
@@ -40,6 +41,13 @@ public class ThirdMinAppPayCotroller {
|
||||
|
||||
/* ************************************* start app start ************************************* */
|
||||
|
||||
@Operation(summary = "查询支付订单")
|
||||
@GetMapping("/app/get-by-pay-no")
|
||||
public R<ThirdPayOrderVo> getByPayNo(@RequestParam String payNo) {
|
||||
PjcloudUser user = SecurityUtils.getUser();
|
||||
return R.ok(thirdMiniAppService.getByPayNo(user.getId(), payNo));
|
||||
}
|
||||
|
||||
@Operation(summary = "支付")
|
||||
@PostMapping("/app/pay")
|
||||
public R<ThirdMiniAppPayVo> miniPay(@Validated @RequestBody ThirdMiniAppPayDto dto) {
|
||||
|
||||
+14
-1
@@ -1,18 +1,26 @@
|
||||
package com.bsd.pjcloud.thirdparty.service;
|
||||
|
||||
|
||||
import com.alipay.api.response.AlipayTradeQueryResponse;
|
||||
import com.bsd.pjcloud.thirdparty.dto.appplus.pay.wechat.ThirdAppPlusPayDto;
|
||||
import com.bsd.pjcloud.thirdparty.dto.appplus.pay.wechat.ThirdMiniWechatRefundDto;
|
||||
import com.bsd.pjcloud.thirdparty.entity.pay.ThirdPayOrderEntity;
|
||||
import com.bsd.pjcloud.thirdparty.vo.appplus.pay.alipay.ThirdALiPayCallbackVo;
|
||||
import com.bsd.pjcloud.wallet.api.vo.mch.MchPaySettingVo;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
public interface ThirdAppPlusAliPayService {
|
||||
|
||||
/**
|
||||
* 查询订单
|
||||
*/
|
||||
AlipayTradeQueryResponse query(String payNo, String settingJson);
|
||||
|
||||
/**
|
||||
* app支付
|
||||
*/
|
||||
String appPay(ThirdAppPlusPayDto dto);
|
||||
String appPay(ThirdAppPlusPayDto dto, MchPaySettingVo paySetting);
|
||||
|
||||
/**
|
||||
* 退款
|
||||
@@ -28,4 +36,9 @@ public interface ThirdAppPlusAliPayService {
|
||||
* 退款回调
|
||||
*/
|
||||
ThirdPayOrderEntity refundCallback(Map<String, String> params, String body, Map<String, String> headers);
|
||||
|
||||
/**
|
||||
* 支付消息订阅
|
||||
*/
|
||||
ThirdALiPayCallbackVo miniSubscribeCallback(Map<String, String> params, String body, Map<String, String> headers);
|
||||
}
|
||||
+6
@@ -6,6 +6,7 @@ import com.bsd.pjcloud.thirdparty.dto.appplus.ThirdMiniAppPayDto;
|
||||
import com.bsd.pjcloud.thirdparty.dto.appplus.pay.wechat.ThirdMiniWechatRefundDto;
|
||||
import com.bsd.pjcloud.thirdparty.vo.appplus.ThirdMinAppOAth2LoginVo;
|
||||
import com.bsd.pjcloud.thirdparty.vo.appplus.pay.ThirdMiniAppPayVo;
|
||||
import com.bsd.pjcloud.thirdparty.vo.pay.ThirdPayOrderVo;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
@@ -21,6 +22,11 @@ public interface ThirdAppPlusService {
|
||||
*/
|
||||
String getUniqueCode(ThirdMiniAppGetUniqueDto dto);
|
||||
|
||||
/**
|
||||
* 查询支付订单
|
||||
*/
|
||||
ThirdPayOrderVo getByPayNo(Long userId, String payNo);
|
||||
|
||||
/**
|
||||
* 小程序支付
|
||||
*/
|
||||
|
||||
+16
-4
@@ -5,6 +5,9 @@ import cn.binarywang.wx.miniapp.bean.WxMaPhoneNumberInfo;
|
||||
import com.bsd.pjcloud.thirdparty.dto.appplus.pay.wechat.*;
|
||||
import com.bsd.pjcloud.thirdparty.entity.pay.ThirdPayOrderEntity;
|
||||
import com.bsd.pjcloud.thirdparty.vo.appplus.pay.wechat.*;
|
||||
import com.bsd.pjcloud.wallet.api.vo.mch.MchPaySettingVo;
|
||||
import com.wechat.pay.java.service.partnerpayments.app.model.Transaction;
|
||||
import com.wechat.pay.java.service.refund.model.RefundNotification;
|
||||
import org.springframework.web.bind.annotation.RequestHeader;
|
||||
|
||||
import java.util.Map;
|
||||
@@ -14,7 +17,7 @@ public interface ThirdAppPlusWechatService {
|
||||
/**
|
||||
* APP支付
|
||||
*/
|
||||
ThirdMiniJsapiPayVo appPay(ThirdAppPlusPayDto dto);
|
||||
Map<String, Object> appPay(ThirdAppPlusPayDto dto, MchPaySettingVo setting);
|
||||
|
||||
/**
|
||||
* 获取openId
|
||||
@@ -29,7 +32,7 @@ public interface ThirdAppPlusWechatService {
|
||||
/**
|
||||
* 查询订单
|
||||
*/
|
||||
ThirdMiniWechatQueryVo query(ThirdMiniWechatQueryDto dto);
|
||||
Transaction query(String payNo, String settingJson);
|
||||
|
||||
/**
|
||||
* 撤销订单
|
||||
@@ -39,21 +42,30 @@ public interface ThirdAppPlusWechatService {
|
||||
/**
|
||||
* 申请退款
|
||||
*/
|
||||
ThirdMiniWechatRefundVo refund(ThirdPayOrderEntity thirdPayOrder, ThirdMiniWechatRefundDto dto);
|
||||
ThirdPayOrderEntity refund(ThirdPayOrderEntity thirdPayOrder, ThirdMiniWechatRefundDto dto);
|
||||
|
||||
/**
|
||||
* 查询退款
|
||||
*/
|
||||
ThirdMiniWechatRefundQueryVo refundQuery(ThirdMiniWechatRefundQueryDto dto);
|
||||
ThirdMiniWechatRefundQueryVo refundQuery(String payNo);
|
||||
|
||||
/**
|
||||
* 支付的回调通知
|
||||
*/
|
||||
ThirdPayOrderEntity payCallback(String body, @RequestHeader Map<String, String> headers);
|
||||
|
||||
/**
|
||||
* 解析支付的回调
|
||||
*/
|
||||
Transaction pasePayCallback(String body, Map<String, String> headers);
|
||||
|
||||
/**
|
||||
* 退款回调
|
||||
*/
|
||||
ThirdPayOrderEntity refundCallback(String body, @RequestHeader Map<String, String> headers);
|
||||
|
||||
/**
|
||||
* 解析退款的回调
|
||||
*/
|
||||
RefundNotification paseRefundCallback(String body, Map<String, String> headers);
|
||||
}
|
||||
+62
-7
@@ -1,5 +1,6 @@
|
||||
package com.bsd.pjcloud.thirdparty.service.impl.appplus;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.date.DatePattern;
|
||||
import cn.hutool.core.date.LocalDateTimeUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
@@ -9,11 +10,15 @@ import com.alipay.api.AlipayClient;
|
||||
import com.alipay.api.AlipayConfig;
|
||||
import com.alipay.api.DefaultAlipayClient;
|
||||
import com.alipay.api.domain.AlipayTradeAppPayModel;
|
||||
import com.alipay.api.domain.AlipayTradeQueryModel;
|
||||
import com.alipay.api.domain.AlipayTradeRefundModel;
|
||||
import com.alipay.api.domain.ExtendParams;
|
||||
import com.alipay.api.internal.util.AlipaySignature;
|
||||
import com.alipay.api.request.AlipayTradeAppPayRequest;
|
||||
import com.alipay.api.request.AlipayTradeQueryRequest;
|
||||
import com.alipay.api.request.AlipayTradeRefundRequest;
|
||||
import com.alipay.api.response.AlipayTradeAppPayResponse;
|
||||
import com.alipay.api.response.AlipayTradeQueryResponse;
|
||||
import com.alipay.api.response.AlipayTradeRefundResponse;
|
||||
import com.bsd.pjcloud.thirdparty.config.AppPlusPayConfig;
|
||||
import com.bsd.pjcloud.thirdparty.constant.miniplatform.AppPlusPlatformTypeEnum;
|
||||
@@ -24,6 +29,8 @@ import com.bsd.pjcloud.thirdparty.entity.pay.ThirdPayOrderEntity;
|
||||
import com.bsd.pjcloud.thirdparty.service.ThirdAppPlusAliPayService;
|
||||
import com.bsd.pjcloud.thirdparty.service.ThirdPayOrderService;
|
||||
import com.bsd.pjcloud.thirdparty.vo.appplus.pay.alipay.ThirdALiPayCallbackVo;
|
||||
import com.bsd.pjcloud.wallet.api.entity.mch.MchPaySettingEntity;
|
||||
import com.bsd.pjcloud.wallet.api.vo.mch.MchPaySettingVo;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
@@ -32,6 +39,7 @@ import org.springframework.validation.annotation.Validated;
|
||||
import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
@@ -83,14 +91,37 @@ public class ThirdAppPlusAliPayServiceImpl implements ThirdAppPlusAliPayService
|
||||
return fen.divide(new BigDecimal(100), 2, RoundingMode.HALF_UP).toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询订单
|
||||
*/
|
||||
@Override
|
||||
public AlipayTradeQueryResponse query(String payNo, String settingJson) {
|
||||
MchPaySettingEntity mchPaySettingEntity = JSONUtil.toBean(settingJson, MchPaySettingEntity.class);
|
||||
MchPaySettingEntity.AliPaySetting aliPaySetting = JSONUtil.toBean(mchPaySettingEntity.getSettingJson(), MchPaySettingEntity.AliPaySetting.class);
|
||||
|
||||
AlipayTradeQueryRequest request = new AlipayTradeQueryRequest();
|
||||
AlipayTradeQueryModel model = new AlipayTradeQueryModel();
|
||||
model.setOutTradeNo(payNo);
|
||||
request.setBizModel(model);
|
||||
request.putOtherTextParam("app_auth_token", aliPaySetting.getAppAuthToken());
|
||||
try {
|
||||
return getAlipayClient().execute(request);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
log.error("|{}|查询订单失败error:{}", TAG, e.getMessage());
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* app支付
|
||||
*/
|
||||
public String appPay(ThirdAppPlusPayDto dto) {
|
||||
public String appPay(ThirdAppPlusPayDto dto, MchPaySettingVo setting) {
|
||||
AppPlusPayConfig.AliPayConfig aliPayConfig = appPlusPayConfig.getAliPayConfig();
|
||||
LocalDateTime now = LocalDateTime.now();
|
||||
|
||||
MchPaySettingEntity.AliPaySetting aliPaySetting = JSONUtil.toBean(setting.getSettingJson(), MchPaySettingEntity.AliPaySetting.class);
|
||||
|
||||
ThirdPayOrderEntity payOrder = new ThirdPayOrderEntity();
|
||||
payOrder.setPayPlatformType(AppPlusPlatformTypeEnum.ALI_PAY.getType());
|
||||
payOrder.setBizId(dto.getBizId());
|
||||
@@ -100,6 +131,8 @@ public class ThirdAppPlusAliPayServiceImpl implements ThirdAppPlusAliPayService
|
||||
payOrder.setPrice(dto.getAmount());
|
||||
payOrder.setStatus(ThirdPayOrderStatusEnum.PAY_UNPAID.getType());
|
||||
payOrder.setPayNo(dto.getOutTradeNo());
|
||||
payOrder.setMchId(dto.getMchId());
|
||||
payOrder.setMchPaySettingJson(JSONUtil.toJsonStr(setting));
|
||||
|
||||
AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();
|
||||
request.setNotifyUrl(aliPayConfig.getBaseCallbackUrl() + aliPayConfig.getPayCallbackUrl());
|
||||
@@ -110,13 +143,11 @@ public class ThirdAppPlusAliPayServiceImpl implements ThirdAppPlusAliPayService
|
||||
model.setSubject("资安信");
|
||||
// 超时时间15分钟
|
||||
model.setTimeExpire(LocalDateTimeUtil.format(now.plusMinutes(15), DatePattern.NORM_DATETIME_PATTERN));
|
||||
// 设置子商户号
|
||||
ExtendParams extendParams = new ExtendParams();
|
||||
extendParams.setSysServiceProviderId(dto.getSubMchid());
|
||||
model.setExtendParams(extendParams);
|
||||
|
||||
payOrder.setPayRep(JSONUtil.toJsonStr(model));
|
||||
request.setBizModel(model);
|
||||
request.putOtherTextParam("app_auth_token", aliPaySetting.getAppAuthToken());
|
||||
request.setNotifyUrl(aliPayConfig.getBaseCallbackUrl() + aliPayConfig.getPayCallbackUrl());
|
||||
try {
|
||||
AlipayTradeAppPayResponse response = getAlipayClient().sdkExecute(request);
|
||||
String orderStr = response.getBody();
|
||||
@@ -141,6 +172,9 @@ public class ThirdAppPlusAliPayServiceImpl implements ThirdAppPlusAliPayService
|
||||
AppPlusPayConfig.AliPayConfig aliPayConfig = appPlusPayConfig.getAliPayConfig();
|
||||
String refundNo = "refund_" + thirdPayOrder.getPayNo();
|
||||
|
||||
MchPaySettingEntity mchPaySettingEntity = JSONUtil.toBean(thirdPayOrder.getMchPaySettingJson(), MchPaySettingEntity.class);
|
||||
MchPaySettingEntity.AliPaySetting aliPaySetting = JSONUtil.toBean(mchPaySettingEntity.getSettingJson(), MchPaySettingEntity.AliPaySetting.class);
|
||||
|
||||
Integer refundFee = dto.getRefundPrice();
|
||||
if (ObjectUtil.isEmpty(refundFee)) {
|
||||
refundFee = thirdPayOrder.getPrice();
|
||||
@@ -158,9 +192,12 @@ public class ThirdAppPlusAliPayServiceImpl implements ThirdAppPlusAliPayService
|
||||
model.setRefundAmount(fenToYuan(BigDecimal.valueOf(refundFee)));
|
||||
model.setRefundReason("饭卡充值退款");
|
||||
model.setOutRequestNo(refundNo);
|
||||
model.setQueryOptions(List.of("deposit_back_info"));
|
||||
|
||||
updateObj.setRefundRep(JSONUtil.toJsonStr(model));
|
||||
request.setBizModel(model);
|
||||
request.putOtherTextParam("app_auth_token", aliPaySetting.getAppAuthToken());
|
||||
request.setNotifyUrl(aliPayConfig.getBaseCallbackUrl() + aliPayConfig.getRefundCallbackUrl());
|
||||
try {
|
||||
AlipayTradeRefundResponse response = getAlipayClient().execute(request);
|
||||
boolean success = response.isSuccess();
|
||||
@@ -232,12 +269,12 @@ public class ThirdAppPlusAliPayServiceImpl implements ThirdAppPlusAliPayService
|
||||
// 查询订单
|
||||
ThirdPayOrderEntity payOrderEntity = thirdPayOrderService.getByPayNo(vo.getOut_trade_no());
|
||||
if (ObjectUtil.isEmpty(payOrderEntity)) {
|
||||
log.error("|{}|refundCallback,意外的错误,订单不存在,微信返回json|{}|", TAG, JSONUtil.toJsonStr(vo));
|
||||
log.error("|{}|refundCallback,意外的错误,订单不存在,支付宝返回json|{}|", TAG, JSONUtil.toJsonStr(vo));
|
||||
return null;
|
||||
}
|
||||
// 重复的回调
|
||||
if (ObjectUtil.notEqual(payOrderEntity.getStatus(), ThirdPayOrderStatusEnum.REFUNDING.getType())) {
|
||||
log.error("|{}|refundCallback,意外的错误,重复的回调,微信返回json|{}|", TAG, JSONUtil.toJsonStr(vo));
|
||||
log.error("|{}|refundCallback,意外的错误,重复的回调,支付宝返回json|{}|", TAG, JSONUtil.toJsonStr(vo));
|
||||
return null;
|
||||
}
|
||||
// 更新订单状态
|
||||
@@ -249,6 +286,24 @@ public class ThirdAppPlusAliPayServiceImpl implements ThirdAppPlusAliPayService
|
||||
return thirdPayOrderService.getById(payOrderEntity.getId());
|
||||
}
|
||||
|
||||
/**
|
||||
* 支付消息订阅
|
||||
*/
|
||||
@Override
|
||||
public ThirdALiPayCallbackVo miniSubscribeCallback(Map<String, String> params, String body, Map<String, String> headers) {
|
||||
try {
|
||||
boolean flag = AlipaySignature.rsaCheckV1(params, appPlusPayConfig.getAliPayConfig().getAlipayPublicKey(), "UTF-8", "RSA2");
|
||||
if (!flag) return null;
|
||||
String bizContent = params.get("biz_content");
|
||||
String msgMethod = params.get("msg_method");
|
||||
ThirdALiPayCallbackVo vo = BeanUtil.toBean(bizContent, ThirdALiPayCallbackVo.class);
|
||||
vo.setMsg_method(msgMethod);
|
||||
} catch (Exception e) {
|
||||
return null;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private String getTradeNo(ThirdPayOrderEntity payOrder) {
|
||||
if (ObjectUtil.isEmpty(payOrder)) {
|
||||
return null;
|
||||
|
||||
+108
-30
@@ -1,11 +1,13 @@
|
||||
package com.bsd.pjcloud.thirdparty.service.impl.appplus;
|
||||
|
||||
import cn.binarywang.wx.miniapp.bean.WxMaPhoneNumberInfo;
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.core.util.RandomUtil;
|
||||
import cn.hutool.core.util.XmlUtil;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import com.alipay.api.internal.util.AlipaySignature;
|
||||
import com.alipay.api.response.AlipayTradeQueryResponse;
|
||||
import com.bsd.pjcloud.admin.api.dto.UserInfo;
|
||||
import com.bsd.pjcloud.admin.api.dto.UserTokenDTO;
|
||||
import com.bsd.pjcloud.admin.api.feign.RemoteTokenService;
|
||||
@@ -32,6 +34,7 @@ import com.bsd.pjcloud.thirdparty.vo.appplus.ThirdMinAppOAth2LoginVo;
|
||||
import com.bsd.pjcloud.thirdparty.vo.appplus.pay.ThirdMiniAppPayVo;
|
||||
import com.bsd.pjcloud.thirdparty.vo.appplus.pay.alipay.ThirdALiPayCallbackVo;
|
||||
import com.bsd.pjcloud.thirdparty.vo.appplus.pay.wechat.*;
|
||||
import com.bsd.pjcloud.thirdparty.vo.pay.ThirdPayOrderVo;
|
||||
import com.bsd.pjcloud.wallet.api.dto.recharge.WalletRechargePaySuccess;
|
||||
import com.bsd.pjcloud.wallet.api.dto.recharge.WalletRechargeRefundSuccess;
|
||||
import com.bsd.pjcloud.wallet.api.entity.mch.MchPaySettingEntity;
|
||||
@@ -40,6 +43,8 @@ import com.bsd.pjcloud.wallet.api.feign.RemoteMchService;
|
||||
import com.bsd.pjcloud.wallet.api.feign.RemoteWalletRechargePackageService;
|
||||
import com.bsd.pjcloud.wallet.api.vo.MchManageVo;
|
||||
import com.bsd.pjcloud.wallet.api.vo.mch.MchPaySettingVo;
|
||||
import com.wechat.pay.java.service.partnerpayments.app.model.Transaction;
|
||||
import com.wechat.pay.java.service.refund.model.RefundNotification;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
@@ -144,6 +149,85 @@ public class ThirdAppPlusServiceImpl implements ThirdAppPlusService {
|
||||
return uniqueCode;
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询支付订单
|
||||
*/
|
||||
@Override
|
||||
public ThirdPayOrderVo getByPayNo(Long userId, String payNo) {
|
||||
ThirdPayOrderEntity detail = thirdPayOrderService.getByPayNo(payNo);
|
||||
if (ObjectUtil.isEmpty(detail)) return null;
|
||||
if (ObjectUtil.notEqual(detail.getUserId(), userId)) return null;
|
||||
|
||||
boolean isPaySuccessAfter = manualQueyPayResult(detail);
|
||||
|
||||
detail = thirdPayOrderService.getByPayNo(payNo);
|
||||
ThirdPayOrderVo vo = BeanUtil.toBean(detail, ThirdPayOrderVo.class);
|
||||
// 查询商户
|
||||
if (ObjectUtil.isNotEmpty(vo.getMchId())) {
|
||||
MchManageVo mch = remoteMchService.getById(vo.getMchId()).getData();
|
||||
if (ObjectUtil.isNotEmpty(mch)) {
|
||||
vo.setMchName(mch.getName());
|
||||
}
|
||||
}
|
||||
return vo;
|
||||
}
|
||||
|
||||
public boolean manualQueyPayResult(ThirdPayOrderEntity payOrder) {
|
||||
ThirdPayOrderEntity update = new ThirdPayOrderEntity();
|
||||
update.setId(payOrder.getId());
|
||||
|
||||
// 判断是否为支付中,如果是则查询支付
|
||||
if (ObjectUtil.equals(payOrder.getStatus(), ThirdPayOrderStatusEnum.PAY_UNPAID.getType()) || ObjectUtil.equals(payOrder.getStatus(), ThirdPayOrderStatusEnum.REFUNDING.getType())) {
|
||||
// 微信
|
||||
if (ObjectUtil.equals(payOrder.getPayPlatformType(), AppPlusPlatformTypeEnum.WECHAT.getType())) {
|
||||
Transaction query = thirdMiniAppWechatService.query(payOrder.getPayNo(), payOrder.getMchPaySettingJson());
|
||||
Transaction.TradeStateEnum tradeState = query.getTradeState();
|
||||
// 支付成功
|
||||
if (ObjectUtil.equals(tradeState, Transaction.TradeStateEnum.SUCCESS)) {
|
||||
update.setPayTime(LocalDateTime.now());
|
||||
update.setPayRes(JSONUtil.toJsonStr(query));
|
||||
update.setStatus(ThirdPayOrderStatusEnum.PAY_SUCCESS.getType());
|
||||
// thirdPayOrderService.updateById(update);
|
||||
return true;
|
||||
}
|
||||
// 退款成功
|
||||
else if (ObjectUtil.equals(tradeState, Transaction.TradeStateEnum.REFUND)) {
|
||||
update.setRefundTime(LocalDateTime.now());
|
||||
update.setRefundRes(JSONUtil.toJsonStr(query));
|
||||
update.setStatus(ThirdPayOrderStatusEnum.PAY_SUCCESS.getType());
|
||||
// thirdPayOrderService.updateById(update);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
// 支付宝
|
||||
else if (ObjectUtil.equals(payOrder.getPayPlatformType(), AppPlusPlatformTypeEnum.ALI_PAY.getType())) {
|
||||
AlipayTradeQueryResponse query = thirdMiniAppAliPayService.query(payOrder.getPayNo(), payOrder.getMchPaySettingJson());
|
||||
String tradeStatus = query.getTradeStatus();
|
||||
// 支付成功
|
||||
if (ObjectUtil.equals("TRADE_SUCCESS", tradeStatus)) {
|
||||
update.setPayTime(LocalDateTime.now());
|
||||
update.setPayRes(JSONUtil.toJsonStr(query));
|
||||
update.setStatus(ThirdPayOrderStatusEnum.PAY_SUCCESS.getType());
|
||||
thirdPayOrderService.updateById(update);
|
||||
return true;
|
||||
}
|
||||
// 退款成功
|
||||
else if (ObjectUtil.equals("TRADE_CLOSED", tradeStatus)) {
|
||||
update.setRefundTime(LocalDateTime.now());
|
||||
update.setRefundRes(JSONUtil.toJsonStr(query));
|
||||
update.setStatus(ThirdPayOrderStatusEnum.PAY_SUCCESS.getType());
|
||||
thirdPayOrderService.updateById(update);
|
||||
return true;
|
||||
}
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* 小程序支付
|
||||
*/
|
||||
@@ -199,6 +283,10 @@ public class ThirdAppPlusServiceImpl implements ThirdAppPlusService {
|
||||
appPlusPayDto.setUserId(userId);
|
||||
appPlusPayDto.setOpenid(dto.getOpenId());
|
||||
appPlusPayDto.setAmount(dto.getAmount());
|
||||
appPlusPayDto.setMchId(mchManage.getId());
|
||||
|
||||
result.setPayNo(outTradeNo);
|
||||
|
||||
// 微信小程序
|
||||
if (ObjectUtil.equals(dto.getMiniPlatformType().getType(), AppPlusPlatformTypeEnum.WECHAT.getType())) {
|
||||
MchPaySettingVo paySetting = paySettingList.stream().filter(item -> ObjectUtil.equals(item.getPlatformType(), AppPlusPlatformPayType.WECHAT.getType())).findFirst().orElse(null);
|
||||
@@ -208,11 +296,11 @@ public class ThirdAppPlusServiceImpl implements ThirdAppPlusService {
|
||||
MchPaySettingEntity.WechatPaySetting wechatPaySetting = JSONUtil.toBean(paySetting.getSettingJson(), MchPaySettingEntity.WechatPaySetting.class);
|
||||
appPlusPayDto.setSubMchid(wechatPaySetting.getSubMchid());
|
||||
|
||||
ThirdMiniJsapiPayVo thirdMiniJsapiPayVo = thirdMiniAppWechatService.appPay(appPlusPayDto);
|
||||
if (ObjectUtil.isEmpty(thirdMiniJsapiPayVo)) {
|
||||
Map<String, Object> appPlusPayParams = thirdMiniAppWechatService.appPay(appPlusPayDto, paySetting);
|
||||
if (ObjectUtil.isEmpty(appPlusPayParams)) {
|
||||
throw new RuntimeException("创建微信支付错误");
|
||||
}
|
||||
result.setAppPlusPayParams(thirdMiniJsapiPayVo.getMiniAppPayParams());
|
||||
result.setAppPlusPayParams(appPlusPayParams);
|
||||
}
|
||||
// 支付宝
|
||||
else if (ObjectUtil.equals(dto.getMiniPlatformType().getType(), AppPlusPlatformTypeEnum.ALI_PAY.getType())) {
|
||||
@@ -223,7 +311,7 @@ public class ThirdAppPlusServiceImpl implements ThirdAppPlusService {
|
||||
MchPaySettingEntity.AliPaySetting wechatPaySetting = JSONUtil.toBean(paySetting.getSettingJson(), MchPaySettingEntity.AliPaySetting.class);
|
||||
appPlusPayDto.setSubMchid(wechatPaySetting.getSubMchid());
|
||||
|
||||
String orderStr = thirdMiniAppAliPayService.appPay(appPlusPayDto);
|
||||
String orderStr = thirdMiniAppAliPayService.appPay(appPlusPayDto, paySetting);
|
||||
if (ObjectUtil.isEmpty(orderStr)) {
|
||||
throw new RuntimeException("创建支付宝支付错误");
|
||||
}
|
||||
@@ -277,16 +365,16 @@ public class ThirdAppPlusServiceImpl implements ThirdAppPlusService {
|
||||
*/
|
||||
@Override
|
||||
public String miniPayCallback(Map<String, String> params, String body, Map<String, String> headers) {
|
||||
AppPlusPlatformTypeEnum platformType = checkMiniPlatformType(params, body);
|
||||
AppPlusPlatformTypeEnum platformType = checkMiniPlatformType(params, body, headers);
|
||||
// 微信小程序
|
||||
if (ObjectUtil.equals(platformType, AppPlusPlatformTypeEnum.WECHAT)) {
|
||||
ThirdPayOrderEntity thirdPayOrder = thirdMiniAppWechatService.payCallback(body, headers);
|
||||
if (ObjectUtil.isEmpty(thirdPayOrder)) {
|
||||
return ThirdMiniWechatQueryVo.wechantError();
|
||||
return "fail";
|
||||
}
|
||||
// 根据订单bizType来处理
|
||||
boolean isSuccess = disposePaySuccessAfter(thirdPayOrder);
|
||||
return isSuccess ? ThirdMiniWechatQueryVo.wechantSuccess() : ThirdMiniWechatQueryVo.wechantError();
|
||||
return isSuccess ? "success" : "fail";
|
||||
}
|
||||
// 支付宝
|
||||
else if (ObjectUtil.equals(platformType, AppPlusPlatformTypeEnum.ALI_PAY)) {
|
||||
@@ -309,7 +397,7 @@ public class ThirdAppPlusServiceImpl implements ThirdAppPlusService {
|
||||
*/
|
||||
@Override
|
||||
public String miniRefundCallback(Map<String, String> params, String body, Map<String, String> headers) {
|
||||
AppPlusPlatformTypeEnum platformType = checkRefundMiniPlatformType(params, body);
|
||||
AppPlusPlatformTypeEnum platformType = checkRefundMiniPlatformType(params, body, headers);
|
||||
// 微信小程序
|
||||
if (ObjectUtil.equals(platformType, AppPlusPlatformTypeEnum.WECHAT)) {
|
||||
ThirdPayOrderEntity thirdPayOrder = thirdMiniAppWechatService.refundCallback(body, headers);
|
||||
@@ -318,7 +406,7 @@ public class ThirdAppPlusServiceImpl implements ThirdAppPlusService {
|
||||
}
|
||||
// 根据订单bizType来处理
|
||||
boolean isSuccess = disposeRefundSuccessAfter(thirdPayOrder);
|
||||
return isSuccess ? ThirdMiniWechatQueryVo.wechantSuccess() : ThirdMiniWechatQueryVo.wechantError();
|
||||
return isSuccess ? "success" : "fail";
|
||||
}
|
||||
// 支付宝
|
||||
else if (ObjectUtil.equals(platformType, AppPlusPlatformTypeEnum.ALI_PAY)) {
|
||||
@@ -341,21 +429,18 @@ public class ThirdAppPlusServiceImpl implements ThirdAppPlusService {
|
||||
*/
|
||||
@Override
|
||||
public String miniSubscribeCallback(Map<String, String> params, String body, Map<String, String> headers) {
|
||||
return "";
|
||||
ThirdALiPayCallbackVo vo = thirdMiniAppAliPayService.miniSubscribeCallback(params, body, headers);
|
||||
if (ObjectUtil.equals(vo.getMsg_method(), "")) {
|
||||
|
||||
}
|
||||
return "success";
|
||||
}
|
||||
|
||||
// 判断支付回调
|
||||
private AppPlusPlatformTypeEnum checkMiniPlatformType(Map<String, String> params, String body) {
|
||||
ThirdMiniWechatRefundQueryVo vo = null;
|
||||
try {
|
||||
vo = JSONUtil.toBean(JSONUtil.toJsonStr(XmlUtil.xmlToMap(body)), ThirdMiniWechatRefundQueryVo.class);
|
||||
} catch (Exception e) {
|
||||
log.error("|{}|判断支付回调wx xml解析错误,body:|{}|", TAG, body);
|
||||
}
|
||||
private AppPlusPlatformTypeEnum checkMiniPlatformType(Map<String, String> params, String body, Map<String, String> headers) {
|
||||
Transaction transaction = thirdMiniAppWechatService.pasePayCallback(body, headers);
|
||||
// 微信
|
||||
if (ObjectUtil.isNotEmpty(vo) && ObjectUtil.isNotEmpty(vo.getTransaction_id())) {
|
||||
return AppPlusPlatformTypeEnum.WECHAT;
|
||||
}
|
||||
if (ObjectUtil.isNotEmpty(transaction)) return AppPlusPlatformTypeEnum.WECHAT;
|
||||
// 支付宝
|
||||
if (ObjectUtil.isNotEmpty(params)) {
|
||||
try {
|
||||
@@ -373,17 +458,10 @@ public class ThirdAppPlusServiceImpl implements ThirdAppPlusService {
|
||||
/**
|
||||
* 判断退款回调
|
||||
*/
|
||||
private AppPlusPlatformTypeEnum checkRefundMiniPlatformType(Map<String, String> params, String body) {
|
||||
ThirdMiniWechantRefunCallbackSoureVo vo = null;
|
||||
try {
|
||||
vo = JSONUtil.toBean(JSONUtil.toJsonStr(XmlUtil.xmlToMap(body)), ThirdMiniWechantRefunCallbackSoureVo.class);
|
||||
} catch (Exception e) {
|
||||
log.error("|{}|判断退款回调wx xml解析错误,body:|{}|", TAG, body);
|
||||
}
|
||||
private AppPlusPlatformTypeEnum checkRefundMiniPlatformType(Map<String, String> params, String body, Map<String, String> headers) {
|
||||
RefundNotification refundNotification = thirdMiniAppWechatService.paseRefundCallback(body, headers);
|
||||
// 微信
|
||||
if (ObjectUtil.isNotEmpty(vo) && ObjectUtil.isNotEmpty(vo.getAppid()) && ObjectUtil.isNotEmpty(vo.getMch_id()) && ObjectUtil.isNotEmpty(vo.getNonce_str()) && ObjectUtil.isNotEmpty(vo.getReq_info())) {
|
||||
return AppPlusPlatformTypeEnum.WECHAT;
|
||||
}
|
||||
if (ObjectUtil.isNotEmpty(refundNotification)) return AppPlusPlatformTypeEnum.WECHAT;
|
||||
// 支付宝
|
||||
if (ObjectUtil.isNotEmpty(params)) {
|
||||
try {
|
||||
|
||||
+149
-44
@@ -3,6 +3,7 @@ package com.bsd.pjcloud.thirdparty.service.impl.appplus;
|
||||
import cn.binarywang.wx.miniapp.api.WxMaService;
|
||||
import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
|
||||
import cn.binarywang.wx.miniapp.bean.WxMaPhoneNumberInfo;
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.codec.Base64;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.core.util.RandomUtil;
|
||||
@@ -17,11 +18,15 @@ import com.bsd.pjcloud.thirdparty.service.ThirdAppPlusWechatService;
|
||||
import com.bsd.pjcloud.thirdparty.service.ThirdPayOrderService;
|
||||
import com.bsd.pjcloud.thirdparty.utils.pay.wechat.ThirdAppPlusWechantPayConstant;
|
||||
import com.bsd.pjcloud.thirdparty.vo.appplus.pay.wechat.*;
|
||||
import com.bsd.pjcloud.wallet.api.entity.mch.MchPaySettingEntity;
|
||||
import com.bsd.pjcloud.wallet.api.vo.mch.MchPaySettingVo;
|
||||
import com.wechat.pay.java.core.notification.NotificationParser;
|
||||
import com.wechat.pay.java.core.notification.RequestParam;
|
||||
import com.wechat.pay.java.service.partnerpayments.app.AppServiceExtension;
|
||||
import com.wechat.pay.java.service.partnerpayments.app.model.*;
|
||||
import com.wechat.pay.java.service.partnerpayments.app.model.Amount;
|
||||
import com.wechat.pay.java.service.partnerpayments.app.model.PrepayRequest;
|
||||
import com.wechat.pay.java.service.partnerpayments.app.model.PrepayWithRequestPaymentResponse;
|
||||
import com.wechat.pay.java.service.partnerpayments.app.model.SettleInfo;
|
||||
import com.wechat.pay.java.service.refund.RefundService;
|
||||
import com.wechat.pay.java.service.refund.model.*;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.codec.digest.DigestUtils;
|
||||
@@ -31,16 +36,11 @@ import org.springframework.validation.annotation.Validated;
|
||||
import javax.crypto.Cipher;
|
||||
import javax.crypto.spec.SecretKeySpec;
|
||||
import javax.net.ssl.*;
|
||||
import java.io.FileInputStream;
|
||||
import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.security.KeyStore;
|
||||
import java.security.SecureRandom;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.TreeMap;
|
||||
|
||||
/**
|
||||
* 微信小程序(app版本)
|
||||
@@ -59,13 +59,15 @@ public class ThirdAppPlusWechatServiceImpl implements ThirdAppPlusWechatService
|
||||
private final ThirdPayOrderService thirdPayOrderService;
|
||||
|
||||
private final AppServiceExtension appServiceExtension;
|
||||
private final RefundService refundService;
|
||||
private final NotificationParser notificationParser;
|
||||
|
||||
|
||||
/**
|
||||
* APP支付
|
||||
*/
|
||||
@Override
|
||||
public ThirdMiniJsapiPayVo appPay(ThirdAppPlusPayDto dto) {
|
||||
public Map<String, Object> appPay(ThirdAppPlusPayDto dto, MchPaySettingVo setting) {
|
||||
AppPlusPayConfig.WechatConfig wechatConfig = appPlusPayConfig.getWechatConfig();
|
||||
|
||||
ThirdPayOrderEntity payOrder = new ThirdPayOrderEntity();
|
||||
@@ -77,6 +79,8 @@ public class ThirdAppPlusWechatServiceImpl implements ThirdAppPlusWechatService
|
||||
payOrder.setPrice(dto.getAmount());
|
||||
payOrder.setStatus(ThirdPayOrderStatusEnum.PAY_UNPAID.getType());
|
||||
payOrder.setPayNo(dto.getOutTradeNo());
|
||||
payOrder.setMchId(dto.getMchId());
|
||||
payOrder.setMchPaySettingJson(JSONUtil.toJsonStr(setting));
|
||||
try {
|
||||
String description = "饭卡钱包充值" + fenToYuan(BigDecimal.valueOf(dto.getAmount())) + "元";
|
||||
// 支付金额
|
||||
@@ -92,20 +96,21 @@ public class ThirdAppPlusWechatServiceImpl implements ThirdAppPlusWechatService
|
||||
request.setSpMchid(wechatConfig.getMerchantId());
|
||||
request.setSubMchid(dto.getSubMchid());
|
||||
request.setDescription(description);
|
||||
request.setSettleInfo(settleInfo);
|
||||
// request.setSettleInfo(settleInfo);
|
||||
request.setOutTradeNo(dto.getOutTradeNo());
|
||||
request.setNotifyUrl(wechatConfig.getPayCallbackUrl());
|
||||
request.setNotifyUrl(wechatConfig.getBaseCallbackUrl() + wechatConfig.getPayCallbackUrl());
|
||||
|
||||
payOrder.setPayRep(JSONUtil.toJsonStr(request));
|
||||
PrepayWithRequestPaymentResponse res = appServiceExtension.prepayWithRequestPayment(request, wechatConfig.getAppPlatformAppId());
|
||||
log.debug("APP支付,json,xml|{}", res);
|
||||
if (ObjectUtil.isEmpty(res)) {
|
||||
log.error("APP支付,res为空");
|
||||
return null;
|
||||
}
|
||||
payOrder.setPayTime(LocalDateTime.now());
|
||||
payOrder.setPayRes(JSONUtil.toJsonStr(res));
|
||||
return null;
|
||||
return BeanUtil.beanToMap(res);
|
||||
} catch (Exception e) {
|
||||
log.error("|{}|JSAPI/小程序下单,异常", TAG, e);
|
||||
log.error("|{}|APP支付,异常", TAG, e);
|
||||
return null;
|
||||
} finally {
|
||||
thirdPayOrderService.save(payOrder);
|
||||
@@ -152,7 +157,22 @@ public class ThirdAppPlusWechatServiceImpl implements ThirdAppPlusWechatService
|
||||
* 查询订单
|
||||
*/
|
||||
@Override
|
||||
public ThirdMiniWechatQueryVo query(ThirdMiniWechatQueryDto dto) {
|
||||
public Transaction query(String payNo, String settingJson) {
|
||||
AppPlusPayConfig.WechatConfig wechatConfig = appPlusPayConfig.getWechatConfig();
|
||||
|
||||
MchPaySettingEntity wechatPaySettingEntity = JSONUtil.toBean(settingJson, MchPaySettingEntity.class);
|
||||
MchPaySettingEntity.WechatPaySetting wechatPaySetting = JSONUtil.toBean(wechatPaySettingEntity.getSettingJson(), MchPaySettingEntity.WechatPaySetting.class);
|
||||
|
||||
try {
|
||||
QueryOrderByOutTradeNoRequest req = new QueryOrderByOutTradeNoRequest();
|
||||
req.setSpMchid(wechatConfig.getMerchantId());
|
||||
req.setSubMchid(wechatPaySetting.getSubMchid());
|
||||
req.setOutTradeNo(payNo);
|
||||
Transaction transaction = appServiceExtension.queryOrderByOutTradeNo(req);
|
||||
} catch (Exception e) {
|
||||
log.error("|{}|查询订单,异常", TAG, e);
|
||||
return null;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -165,22 +185,19 @@ public class ThirdAppPlusWechatServiceImpl implements ThirdAppPlusWechatService
|
||||
return null;
|
||||
}
|
||||
|
||||
private String getTransactionIdByThirdPayOrder(ThirdPayOrderEntity thirdPayOrder) {
|
||||
if (ObjectUtil.isEmpty(thirdPayOrder) || ObjectUtil.isEmpty(thirdPayOrder.getPayRes())) {
|
||||
return null;
|
||||
}
|
||||
String payRes = thirdPayOrder.getPayCallbackRes();
|
||||
ThirdMiniWechantRefunCallbackVo thirdMiniJsapiPay = JSONUtil.toBean(payRes, ThirdMiniWechantRefunCallbackVo.class);
|
||||
return thirdMiniJsapiPay.getTransaction_id();
|
||||
}
|
||||
|
||||
/**
|
||||
* 申请退款
|
||||
* AP申请退款
|
||||
*/
|
||||
@Override
|
||||
public ThirdMiniWechatRefundVo refund(ThirdPayOrderEntity thirdPayOrder, ThirdMiniWechatRefundDto dto) {
|
||||
public ThirdPayOrderEntity refund(ThirdPayOrderEntity thirdPayOrder, ThirdMiniWechatRefundDto dto) {
|
||||
AppPlusPayConfig.WechatConfig wechatConfig = appPlusPayConfig.getWechatConfig();
|
||||
|
||||
if (ObjectUtil.isEmpty(thirdPayOrder.getMchPaySettingJson())) {
|
||||
throw new RuntimeException("支付配置不存在");
|
||||
}
|
||||
MchPaySettingEntity wechatPaySettingEntity = JSONUtil.toBean(thirdPayOrder.getMchPaySettingJson(), MchPaySettingEntity.class);
|
||||
MchPaySettingEntity.WechatPaySetting wechatPaySetting = JSONUtil.toBean(wechatPaySettingEntity.getSettingJson(), MchPaySettingEntity.WechatPaySetting.class);
|
||||
|
||||
ThirdPayOrderEntity updateObj = new ThirdPayOrderEntity();
|
||||
updateObj.setId(thirdPayOrder.getId());
|
||||
|
||||
@@ -189,14 +206,45 @@ public class ThirdAppPlusWechatServiceImpl implements ThirdAppPlusWechatService
|
||||
refundFee = thirdPayOrder.getPrice();
|
||||
}
|
||||
String refundNo = "refund_" + thirdPayOrder.getPayNo();
|
||||
return null;
|
||||
|
||||
CreateRequest createRequest = new CreateRequest();
|
||||
|
||||
AmountReq amountReq = new AmountReq();
|
||||
// 订单金额信息
|
||||
amountReq.setRefund(Long.valueOf(refundFee));
|
||||
amountReq.setTotal(Long.valueOf(thirdPayOrder.getPrice()));
|
||||
amountReq.setCurrency("CNY");
|
||||
|
||||
createRequest.setOutTradeNo(thirdPayOrder.getPayNo());
|
||||
createRequest.setAmount(amountReq);
|
||||
createRequest.setSubMchid(wechatPaySetting.getSubMchid());
|
||||
createRequest.setOutRefundNo(refundNo);
|
||||
createRequest.setReason("退还饭卡钱包充值" + fenToYuan(BigDecimal.valueOf(refundFee)) + "元");
|
||||
createRequest.setNotifyUrl(wechatConfig.getBaseCallbackUrl() + wechatConfig.getRefundCallbackUrl());
|
||||
updateObj.setRefundRep(JSONUtil.toJsonStr(createRequest));
|
||||
updateObj.setRefundNo(refundNo);
|
||||
updateObj.setRefundTime(LocalDateTime.now());
|
||||
updateObj.setStatus(ThirdPayOrderStatusEnum.REFUNDING.getType());
|
||||
try {
|
||||
Refund refund = refundService.create(createRequest);
|
||||
updateObj.setRefundRes(JSONUtil.toJsonStr(refund));
|
||||
if (ObjectUtil.isNotEmpty(refund)) {
|
||||
throw new RuntimeException("微信退款申请错误异常");
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("|{}|AP申请退款,异常", TAG, e);
|
||||
return null;
|
||||
} finally {
|
||||
thirdPayOrderService.updateById(updateObj);
|
||||
}
|
||||
return thirdPayOrderService.getByPayNo(thirdPayOrder.getPayNo());
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询退款
|
||||
*/
|
||||
@Override
|
||||
public ThirdMiniWechatRefundQueryVo refundQuery(ThirdMiniWechatRefundQueryDto dto) {
|
||||
public ThirdMiniWechatRefundQueryVo refundQuery(String payNo) {
|
||||
AppPlusPayConfig.WechatConfig wechatConfig = appPlusPayConfig.getWechatConfig();
|
||||
return null;
|
||||
}
|
||||
@@ -206,62 +254,119 @@ public class ThirdAppPlusWechatServiceImpl implements ThirdAppPlusWechatService
|
||||
*/
|
||||
@Override
|
||||
public ThirdPayOrderEntity payCallback(String body, Map<String, String> headers) {
|
||||
String bodyJson = JSONUtil.toJsonStr(XmlUtil.xmlToMap(body));
|
||||
ThirdMiniWechatRefundQueryVo vo = JSONUtil.toBean(bodyJson, ThirdMiniWechatRefundQueryVo.class);
|
||||
if (ObjectUtil.isEmpty(vo) || !vo.isHttpSucess()) {
|
||||
Transaction transaction = pasePayCallback(body, headers);
|
||||
if (ObjectUtil.isEmpty(transaction) || ObjectUtil.isEmpty(transaction.getOutTradeNo())) {
|
||||
log.error("|{}|payCallback,意外的错误,微信支付回调解析错误", TAG);
|
||||
return null;
|
||||
}
|
||||
boolean paySucess = vo.isPaySucess();
|
||||
// 查询订单
|
||||
ThirdPayOrderEntity payOrderEntity = thirdPayOrderService.getByPayNo(vo.getOut_trade_no());
|
||||
ThirdPayOrderEntity payOrderEntity = thirdPayOrderService.getByPayNo(transaction.getOutTradeNo());
|
||||
if (ObjectUtil.isEmpty(payOrderEntity)) {
|
||||
log.error("|{}|payCallback,意外的错误,订单不存在,微信返回json|{}|", TAG, bodyJson);
|
||||
log.error("|{}|payCallback,意外的错误,订单不存在,微信返回body|{}|", TAG, body);
|
||||
return null;
|
||||
}
|
||||
// 重复的回调
|
||||
if (ObjectUtil.notEqual(payOrderEntity.getStatus(), ThirdPayOrderStatusEnum.PAY_UNPAID.getType())) {
|
||||
log.error("|{}|payCallback,意外的错误,重复的回调,微信返回json|{}|", TAG, bodyJson);
|
||||
log.error("|{}|payCallback,意外的错误,重复的回调,微信返回body|{}|", TAG, body);
|
||||
return null;
|
||||
}
|
||||
boolean paySucess = ObjectUtil.equals(Transaction.TradeStateEnum.SUCCESS, transaction.getTradeState());
|
||||
|
||||
// 更新订单状态
|
||||
ThirdPayOrderEntity updateObj = new ThirdPayOrderEntity();
|
||||
updateObj.setId(payOrderEntity.getId());
|
||||
updateObj.setPayCallbackRes(bodyJson);
|
||||
updateObj.setPayCallbackRes(JSONUtil.toJsonStr(transaction));
|
||||
updateObj.setStatus(paySucess ? ThirdPayOrderStatusEnum.PAY_SUCCESS.getType() : ThirdPayOrderStatusEnum.PAY_FAILED.getType());
|
||||
thirdPayOrderService.updateById(updateObj);
|
||||
return thirdPayOrderService.getById(payOrderEntity.getId());
|
||||
}
|
||||
|
||||
/**
|
||||
* 解析支付的回调
|
||||
*/
|
||||
@Override
|
||||
public Transaction pasePayCallback(String body, Map<String, String> headers) {
|
||||
String serialNumber = headers.get("Wechatpay-Serial");
|
||||
String nonce = headers.get("Wechatpay-Nonce");
|
||||
String signature = headers.get("Wechatpay-Signature");
|
||||
String signatureType = headers.get("Wechatpay-Signature-Type");
|
||||
String timestamp = headers.get("Wechatpay-Timestamp");
|
||||
if (!ObjectUtil.isAllNotEmpty(serialNumber, nonce, signature, timestamp)) {
|
||||
return null;
|
||||
}
|
||||
RequestParam requestParam = new RequestParam.Builder()
|
||||
.serialNumber(serialNumber)
|
||||
.nonce(nonce)
|
||||
.signature(signature)
|
||||
.signType(signatureType)
|
||||
.timestamp(timestamp)
|
||||
.body(body)
|
||||
.build();
|
||||
try {
|
||||
return notificationParser.parse(requestParam, Transaction.class);
|
||||
} catch (Exception e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 退款回调
|
||||
*/
|
||||
@Override
|
||||
public ThirdPayOrderEntity refundCallback(String body, Map<String, String> headers) {
|
||||
ThirdMiniWechantRefunCallbackVo vo = decrypt(body);
|
||||
if (ObjectUtil.isEmpty(vo)) {
|
||||
RefundNotification refundNotification = paseRefundCallback(body, headers);
|
||||
if (ObjectUtil.isEmpty(refundNotification) || ObjectUtil.isEmpty(refundNotification.getOutTradeNo())) {
|
||||
log.error("|{}|payCallback,意外的错误,微信退款回调解析错误", TAG);
|
||||
return null;
|
||||
}
|
||||
// 查询订单
|
||||
ThirdPayOrderEntity payOrderEntity = thirdPayOrderService.getByPayNo(vo.getOut_trade_no());
|
||||
ThirdPayOrderEntity payOrderEntity = thirdPayOrderService.getByPayNo(refundNotification.getOutTradeNo());
|
||||
if (ObjectUtil.isEmpty(payOrderEntity)) {
|
||||
log.error("|{}|refundCallback,意外的错误,订单不存在,微信返回json|{}|", TAG, JSONUtil.toJsonStr(vo));
|
||||
log.error("|{}|refundCallback,意外的错误,订单不存在,微信返回json|{}|", TAG, JSONUtil.toJsonStr(refundNotification));
|
||||
return null;
|
||||
}
|
||||
// 重复的回调
|
||||
if (ObjectUtil.notEqual(payOrderEntity.getStatus(), ThirdPayOrderStatusEnum.REFUNDING.getType())) {
|
||||
log.error("|{}|refundCallback,意外的错误,重复的回调,微信返回json|{}|", TAG, JSONUtil.toJsonStr(vo));
|
||||
log.error("|{}|refundCallback,意外的错误,重复的回调,微信返回json|{}|", TAG, JSONUtil.toJsonStr(refundNotification));
|
||||
return null;
|
||||
}
|
||||
// 更新订单状态
|
||||
boolean refundSuccess = vo.isAllSuccess();
|
||||
boolean refundSuccess = ObjectUtil.equals(refundNotification.getRefundStatus(), Status.SUCCESS);
|
||||
ThirdPayOrderEntity updateObj = new ThirdPayOrderEntity();
|
||||
updateObj.setId(payOrderEntity.getId());
|
||||
updateObj.setRefundCallbackRes(JSONUtil.toJsonStr(vo));
|
||||
updateObj.setRefundCallbackRes(JSONUtil.toJsonStr(refundNotification));
|
||||
updateObj.setStatus(refundSuccess ? ThirdPayOrderStatusEnum.REFUND_SUCCESS.getType() : ThirdPayOrderStatusEnum.REFUND_FAILED.getType());
|
||||
thirdPayOrderService.updateById(updateObj);
|
||||
return thirdPayOrderService.getById(payOrderEntity.getId());
|
||||
}
|
||||
|
||||
/**
|
||||
* 解析退款的回调
|
||||
*/
|
||||
@Override
|
||||
public RefundNotification paseRefundCallback(String body, Map<String, String> headers) {
|
||||
String serialNumber = headers.get("Wechatpay-Serial");
|
||||
String nonce = headers.get("Wechatpay-Nonce");
|
||||
String signature = headers.get("Wechatpay-Signature");
|
||||
String signatureType = headers.get("Wechatpay-Signature-Type");
|
||||
String timestamp = headers.get("Wechatpay-Timestamp");
|
||||
if (!ObjectUtil.isAllNotEmpty(serialNumber, nonce, signature, timestamp)) {
|
||||
return null;
|
||||
}
|
||||
RequestParam requestParam = new RequestParam.Builder()
|
||||
.serialNumber(serialNumber)
|
||||
.nonce(nonce)
|
||||
.signature(signature)
|
||||
.signType(signatureType)
|
||||
.timestamp(timestamp)
|
||||
.body(body)
|
||||
.build();
|
||||
try {
|
||||
return notificationParser.parse(requestParam, RefundNotification.class);
|
||||
} catch (Exception e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 解密回调信息解密
|
||||
*/
|
||||
|
||||
+7
-6
@@ -120,16 +120,17 @@ app-plus:
|
||||
api-v3-key: f0f5fd485bac7f377af6f5ca97636dd4
|
||||
merchant-serial-number: 1A4A19DC15F4742D9DC1A2CF1DE05F15FFCAE315
|
||||
mch-private-path: /Users/dengzhangchen/Desktop/backups/pay/zax_wx_pt_v3/apiclient_key.pem
|
||||
pay-callback-url: https://dzc-test-1.fy.takin.cc/third/third-app-pay/app/pay-callback
|
||||
refund-callback-url: https://dzc-test-1.fy.takin.cc/third/third-app-pay/app/refund-callback
|
||||
base-callback-url: https://dzc-test-1.fy.takin.cc
|
||||
pay-callback-url: /third/third-app-pay/app/pay-callback
|
||||
refund-callback-url: /third/third-app-pay/app/refund-callback
|
||||
spbill-create-ip: 59.202.170.152
|
||||
base-url: https://api.mch.weixin.qq.com
|
||||
ali-pay-config:
|
||||
app-id: 2021006152681025
|
||||
app-private-key: MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCArccby2Bq3DlDveWHLrBBzx/zQEehhJlJbUnzlYytpwcsprhlUIKfLJDxVlERxBCaOFQDVh8IPYSpD/ryXPsvkQ4Ev1g2TPDdmikUJYP9zigLwvB55tLMjYy78+hrYnKIUVGxk4j+FKW2/d/MJM09/j8NcHZbtRy9Jg1Bcxoo9FR+nk+MRhsKc1pdR7ba+45LMtNvWX/GLZffxDkGF2QfITtNNvbZHlAsuOTDGNjpF8bykHNr9eIsYaiJhSZsbRW0RrOEWf5nq9iEVEN5zi1moq1pDMveIN96wXj21Nurkt9i21i5gLWTslCFOE46bOlCtwCjy0j5x9sJ2FaJY6B5AgMBAAECggEAaT+6L721azIdlI7qAhvqBqnHVEsrS60NQ8WkSxvzKMYJVDg5coTbkh39n6gePw3DFqEj9mamkzLeIvnzI/FxcoKOmMt491EPYfIJz3Sv9RR+JMCZuNtXaAAPMFxbqhmn3F/HFhu6XTe+I2KbfnpLdX1TTUbDSFdm3j8VcIcYyo2EA8ksMRifcoEjYPJO9X/V70VxrqvcMnYzb8HegzLVmdA9E6KOxz4E8YcTsPl53H3z7M+LHZ7hAxWffacKwEuCj015nD4DVNRcx+9B0qyaH0V0FD0eGeYB9wlR3Q71AuT9Eu1DMJ1Krd1PH9++pGOqOE+9oWzfk3YsZxKD32tQEQKBgQDEmRakTBZZZKKxlFsX/h5Jl0WQhV0zKzOMBDEvonmLp7jB948UXqdL+A/1r1lJ/+9NJAlyeySstcUVdkgpFvnFWkVOkEuUsiYyIE+Zl3qjedhs+v5nGZ6pK/N+r6tGxOdKT2gfg2s9gTZZKwNcHOmUTLd2Pv+80s4ElhkwMoWicwKBgQCnjx8FxO4FLmFHjzmbNwlXgSdjLbLQsR/08ZzwuNQwn7nR72Ye1d6EEIkyqdq/WMJPiaAMUg+zkoIzM0zX21U7ZrV0kknm4LctLi+FwEEGK/wm5nAdGQA8Uf+Lt55A0dafJMjVT/w8vf3S9JV/6qZQ8wwGVCnavZhbAJRdLMl6YwKBgC/aU3iKTKZVqIQw6Dtez2B6QaR70cOysElUe+RsV8l2ebI838bFg1Mqfjf/BmzMryLHssT61GJ1nBMtR0M5JHK1FkmZNcxr0IBC/R0VkfRYpCVisqnFwqjK2ensOHRxWRrtWRrSkjfWS7RIk/jH0NMYGU/e5cDATwUuw9LHeV+hAoGAZeE306IxtyTEMWZ8eEu2emYlNMCMgSexbpWZ/yPioM39hhAx333aliIXyZ5NSxsEyqe7kMI0mdLzJ36Bsp3B7SQ+IGryVFc+CVKTwpdq8f28i0qB0K9q3UJeRu2WY4MzJACRvGGt1KEQvDvKysQ56+5b2V1DNaUiBfMMQrsAplECgYBgVTk/5NVFHt6MTiYJiqIA4s6Us5lfNpTbc7rGOlFfKo+sxS1hO/klZ83Ou2HHyzm18F5AXSARETBT98m0UzPHL+c6EZaFPltgOJHG72eZ0MstWQU1et9mzPpInCRCXAv5cg1VCrXe9bPhH61UhBK3i9NR6QFahMaPPyVsQF0ISg==
|
||||
app-id: 2021006152609558
|
||||
app-private-key: MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQC24MPW2yRAhwvsggYizILPI1ip10LFRrLKrwnstP3C0CmsxGsJFzmw3iA0jT3ruaAEB/fM4UpJKFQG8JCUui3+eMqEi0d39GSBD9puMh4Vc5tVPqPdBTmiN3T4ut3857HPRq58d/9CnGF7AldNuVv6gPNrGBideEoAuBV5iTfrmlv7gVStO4ieEYJnkcLjutD0uzZ24j2HsWQHg0x/qioH9odFBizNsnTH3Uvd3RnK3n9rZXgxsNnhTEEw+lu32w+xzHC/1ob3k2alE6Kn+w4Rljr7T9mcv9eQPqaMa5Slu+ulpDbZe5guMv3WWI0QwNU2x0gfWqN36RtZwgC5AUmzAgMBAAECggEAXhGpyyg4MpUE1ihf3aCTHNeSsPKQXwepykZVdZP4ADCxbzQt1qRCwa7QpBePJWT7YXdzyMiOPKlo55Tw2gAWzpH1ok4+ef6VgCnWct6GyQQJf8TT50nbxox+N79vlrrbpMI32MCk5e+o2OxwWgOhw253R7xCVSXd8xa9vSGPSTngyskNIoXXujIg6bf0CfYClMD1c8jWAA3Y9ZlM2RcxFP16RvGRvDvgDomF1/oEB8aIP1BswXpmFbWVlmYMB/5pS1P90fzJ+w74pqRObH90kYJgoQ0k+5NUD3q8xv61Wu7+mCfGrlxgYEmNp+O3rT0DMRaQhG3qCB/FJM/xa7cNyQKBgQD+u0f363GIE6penUGlxH+Ww2wtR7aTrYVf4TQMpjPNGjoh+jx4VAIwA0Uxq3diA4+l03DbSGZkFiQaSK8txWpXqe2R6o/5+Y+/MCVzRLDsBRl8TB2EPtFUmhzRSS4rWzEZzpzRh7qHT+ycxxuJNo66WOIgqs4Tx2Mp0TinufmedQKBgQC3yeN5qa+eaUORoWfBbuRB1XxuVneU+i5/1D9Md7heTzM9NzJYN8LAB6y/VsQQsLJO0p0fVKkjKbJSY/qyB0o7AXlr7dZhbzfCLN0yaWdUzpyy/nbO1Z4jzZEXGMNfqi2N41fuVBucVXpUcU3NDf0oFkwdtGVTz5WCUq3y4gCShwKBgQCN25wjq+Go51K8qBTUDQ8E1cXbnZFGwp6BG7hRxwkYEqAHJgUg+Z/SPy/8jkHIurT3oz25UKN833uxi4LLGaK0OTTNSvRtQJbV4Skp/ToN5nUf7H+PkzAeTkj4ICnvCTTZ618XrN+q1U6urI9gJZrsme0sRhLHnwVRV2uWtJIXtQKBgQCCOy3UXRgTkRWPESc7Wv+lYsh8SwsLZsgiTlzYK5FaSpbNTtp+xmxatFWFc88U4JBI6FbsB4qeXwJ7/Vp8YkwIScAnaW3atvt0vWO0QBo3bvx8nXHEmHwpdJXWHvb6R9Vl0G3TdIfoHG3FflAZ+Eql6D7hYZ3XaKXRphKao+ix6wKBgQC6aYF2ldJcX4cxvkm1Cuz96jvKt5qx7IhH3CkH+qEVnnYZRrcMbwcO4agwWpvgp/tTKgYV2DzEuXF5aNbBoKXAXG5FOT+etPlutnkt+/n2vsRiafeMMnBFvWqZ48XgREqi/ehHCMcZdsDpudxX0VAAwtvBYJsQfes6XyMYsC6gbA==
|
||||
alipay-public-key: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAg/tnDZnVyF3K6mQYrdnPqfnFou0tmf2uFOErWps7GBzPtR65XI8aFuwN17oFsF0m1L05i1tPzRN+UWH/siXlAh2YtDosw8Af1GY0fhwZQIxD/WigDvPD8w8c9xwNGGfmGfyc0f46GEsTakur7UG2wDmhE51ijLbQiol0kQixu6cUCWuCEXl3pCgCvpByUn53607+w/gfXDeMF5tMT734RsDwhz9hiDALrT3z50V5HSyfM0JsQZEMIG3uM+PSD04gvUY95yIuhAWUjf8z67TdKY/rMoW9PJYBI4aG2UZge2YkDufDXgtCSdFt6qJx9c0w4BY/FQZPBCxfyMZ7noiJmQIDAQAB
|
||||
# base-callback-url: https://dzc-test-1.fy.takin.cc
|
||||
base-callback-url: https://www.zianxin.com/api
|
||||
base-callback-url: https://dzc-test-1.fy.takin.cc
|
||||
# base-callback-url: https://www.zianxin.com/api
|
||||
pay-callback-url: /third/third-app-pay/app/pay-callback
|
||||
refund-callback-url: /third/third-app-pay/app/refund-callback
|
||||
subscribe-url: /third/third-app-pay/app/subscribe-callback
|
||||
|
||||
Vendored
+2
@@ -9,6 +9,8 @@
|
||||
a.biz_id,
|
||||
a.user_id,
|
||||
a.user_code,
|
||||
a.mch_id,
|
||||
a.mch_pay_setting_json,
|
||||
a.price,
|
||||
a.status,
|
||||
a.pay_no,
|
||||
|
||||
Binary file not shown.
Binary file not shown.
+5
@@ -120,6 +120,11 @@ public class MchPaySettingEntity extends Model<MchPaySettingEntity> {
|
||||
* 子商户号
|
||||
*/
|
||||
private String subMchid;
|
||||
|
||||
/**
|
||||
* 子商户授权token
|
||||
*/
|
||||
private String appAuthToken;
|
||||
}
|
||||
|
||||
}
|
||||
+1
-1
@@ -140,7 +140,7 @@ public class WalletManageServiceImpl extends ServiceImpl<WalletManageMapper, Wal
|
||||
}
|
||||
// 默认创建饭卡并绑定饭卡钱包
|
||||
if (ObjectUtil.equals(v.getUniqueCode(), WalletTypeEnum.EAT.getCode())) {
|
||||
walletActiveService.createAndActiveCard(wallet);
|
||||
walletActiveService.createAndActiveCard(insertObj);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user