|
|
@@ -15,9 +15,11 @@ import org.apache.commons.lang3.StringUtils;
|
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
|
import org.springframework.stereotype.Component;
|
|
|
import shop.alien.entity.store.LifeUser;
|
|
|
+import shop.alien.entity.store.StoreAliPayErrorLog;
|
|
|
import shop.alien.entity.store.StoreAliPayLog;
|
|
|
import shop.alien.entity.store.StoreUser;
|
|
|
import shop.alien.store.service.LifeUserService;
|
|
|
+import shop.alien.store.service.StoreAliPayErrorLogService;
|
|
|
import shop.alien.store.service.StoreAliPayLogService;
|
|
|
import shop.alien.store.service.StoreUserService;
|
|
|
import shop.alien.util.common.RandomCreateUtil;
|
|
|
@@ -46,6 +48,8 @@ public class AliApi {
|
|
|
|
|
|
private final LifeUserService lifeUserService;
|
|
|
|
|
|
+ private final StoreAliPayErrorLogService storeAliPayErrorLogService;
|
|
|
+
|
|
|
/**
|
|
|
* 商家端appId
|
|
|
*/
|
|
|
@@ -167,13 +171,14 @@ public class AliApi {
|
|
|
|
|
|
/**
|
|
|
* 退款
|
|
|
+ *
|
|
|
* @param outTradeNo
|
|
|
* @param refundAmount
|
|
|
* @param refundReason
|
|
|
* @return
|
|
|
*/
|
|
|
|
|
|
- public String processRefund(String outTradeNo, String refundAmount, String refundReason,String partialRefundCode) {
|
|
|
+ public String processRefund(String outTradeNo, String refundAmount, String refundReason, String partialRefundCode) {
|
|
|
try {
|
|
|
// TODO 部分退款支付宝接口修改
|
|
|
AlipayClient alipayClient = new DefaultAlipayClient(setAlipayConfig(null));
|
|
|
@@ -182,7 +187,7 @@ public class AliApi {
|
|
|
model.setOutTradeNo(outTradeNo);
|
|
|
model.setRefundAmount(refundAmount);
|
|
|
model.setRefundReason(refundReason);
|
|
|
- if(StringUtils.isNotBlank(partialRefundCode)){
|
|
|
+ if (StringUtils.isNotBlank(partialRefundCode)) {
|
|
|
model.setOutRequestNo(partialRefundCode);
|
|
|
}
|
|
|
request.setBizModel(model);
|
|
|
@@ -322,18 +327,18 @@ public class AliApi {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 单笔转账接口
|
|
|
+ * 单笔转账接口 提现使用
|
|
|
*
|
|
|
- * @param name 收款人姓名
|
|
|
- * @param idCard 收款人身份证号
|
|
|
- * @param account 收款人支付宝账号
|
|
|
- * @param money 收款金额
|
|
|
- * @param phone 收款金额
|
|
|
+ * @param name 收款人姓名
|
|
|
+ * @param idCard 收款人身份证号
|
|
|
+ * @param account 收款人支付宝账号
|
|
|
+ * @param money 收款金额
|
|
|
+ * @param phone 收款金额
|
|
|
* @return 是否成功
|
|
|
*/
|
|
|
public StoreAliPayLog payAccount(String name, String idCard, String account, String money, String phone) {
|
|
|
try {
|
|
|
- log.info("AliPayConfig.pay?name={}&idCard={}&phone={}&money={}", name, idCard, account, money);
|
|
|
+ log.info("AliPayConfig.pay?name={}&idCard={}&account={}&money={}&phone={}", name, idCard, account, money, phone);
|
|
|
// 初始化SDK
|
|
|
AlipayClient alipayClient = new DefaultAlipayClient(setAlipayConfig(null));
|
|
|
// 构造请求参数以调用接口
|
|
|
@@ -354,7 +359,11 @@ public class AliApi {
|
|
|
payeeInfo.setCertType("IDENTITY_CARD");
|
|
|
payeeInfo.setCertNo(idCard);
|
|
|
payeeInfo.setIdentityType("ALIPAY_LOGON_ID");
|
|
|
- payeeInfo.setIdentity(account);
|
|
|
+ if(account!=null){
|
|
|
+ payeeInfo.setIdentity(account);
|
|
|
+ }else{
|
|
|
+ payeeInfo.setIdentity(phone);
|
|
|
+ }
|
|
|
payeeInfo.setName(name);
|
|
|
model.setPayeeInfo(payeeInfo);
|
|
|
// 设置业务备注
|
|
|
@@ -390,8 +399,40 @@ public class AliApi {
|
|
|
}
|
|
|
storeAliPayLogService.save(storeAliPayLog);
|
|
|
return storeAliPayLog;
|
|
|
- } else {
|
|
|
- return null;
|
|
|
+ } else if(response.getCode().equals("40004")){
|
|
|
+ StoreAliPayLog storeAliPayLog = new StoreAliPayLog();
|
|
|
+ StoreAliPayErrorLog storeAliPayErrorLog = new StoreAliPayErrorLog();
|
|
|
+ LambdaQueryWrapper<StoreUser> queryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ queryWrapper.eq(StoreUser::getIdCard, idCard);
|
|
|
+ queryWrapper.eq(StoreUser::getPhone, phone);
|
|
|
+ queryWrapper.eq(StoreUser::getName, name);
|
|
|
+ StoreUser one = storeUserService.getOne(queryWrapper);
|
|
|
+ String subInfo = getMassage(response.getSubCode());
|
|
|
+ storeAliPayErrorLog.setTransAmount(money);
|
|
|
+ String bizContentStr = (String) response.getParams().get("biz_content");
|
|
|
+ storeAliPayErrorLog.setSubCode(response.getSubCode());
|
|
|
+ storeAliPayErrorLog.setSubMsg(response.getSubMsg());
|
|
|
+ storeAliPayErrorLog.setBizContent(bizContentStr);
|
|
|
+ storeAliPayErrorLog.setInformation(subInfo);
|
|
|
+ if (null == one) {
|
|
|
+ LambdaQueryWrapper<LifeUser> userQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ userQueryWrapper.eq(LifeUser::getIdCard, idCard);
|
|
|
+ userQueryWrapper.eq(LifeUser::getUserPhone, phone);
|
|
|
+ userQueryWrapper.eq(LifeUser::getRealName, name);
|
|
|
+ LifeUser userOne = lifeUserService.getOne(userQueryWrapper);
|
|
|
+ storeAliPayErrorLog.setLifeUserId(userOne.getId());
|
|
|
+ } else {
|
|
|
+ storeAliPayErrorLog.setStoreUserId(one.getId());
|
|
|
+ }
|
|
|
+ storeAliPayErrorLogService.save(storeAliPayErrorLog);
|
|
|
+ storeAliPayLog.setStoreAliPayErrorLog(storeAliPayErrorLog);
|
|
|
+ return storeAliPayLog;
|
|
|
+ }else{
|
|
|
+ StoreAliPayLog storeAliPayLog = new StoreAliPayLog();
|
|
|
+ StoreAliPayErrorLog storeAliPayErrorLog = new StoreAliPayErrorLog();
|
|
|
+ storeAliPayErrorLog.setInformation("支付宝异常: 请稍后再试");
|
|
|
+ storeAliPayLog.setStoreAliPayErrorLog(storeAliPayErrorLog);
|
|
|
+ return storeAliPayLog;
|
|
|
}
|
|
|
} catch (AlipayApiException e) {
|
|
|
log.error("AliPayConfig.pay ERROR Msg={}", e.getErrMsg());
|
|
|
@@ -648,4 +689,44 @@ public class AliApi {
|
|
|
return sdf.format(new Date()) + RandomCreateUtil.getRandomNum(4);
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+ private String getMassage(String subCode) {
|
|
|
+ switch (subCode) {
|
|
|
+ case "ACCOUNT_NOT_EXIST":
|
|
|
+ return "收款账户不存在";
|
|
|
+ case "ACCOUNT_FROZEN":
|
|
|
+ return "收款账户被冻结";
|
|
|
+ case "AMOUNT_TOO_BIG":
|
|
|
+ return "转账金额过大(超过单笔 / 单日限额)";
|
|
|
+ case "AMOUNT_TOO_SMALL":
|
|
|
+ return "转账金额过小(低于最低限额)";
|
|
|
+ case "INSUFFICIENT_BALANCE":
|
|
|
+ return "付款方账户余额不足";
|
|
|
+ case "RECEIVER_ID_INVALID":
|
|
|
+ return "收款人身份标识无效(如支付宝账号 / 手机号错误)";
|
|
|
+ case "RECEIVER_NAME_INVALID":
|
|
|
+ return "收款人姓名无效(如姓名与账号不匹配)";
|
|
|
+ case "INVALID_PARAMETER":
|
|
|
+ return "请求参数无效(如格式错误、必填字段缺失)";
|
|
|
+ case "PAYEE_NOT_EXIST":
|
|
|
+ return "收款账号不存在或姓名有误";
|
|
|
+ case "ACQ.TOTAL_FEE_EXCEED":
|
|
|
+ return "订单金额超过商户设置的限额";
|
|
|
+ case "ACQ.TRADE_NOT_EXIS":
|
|
|
+ return "请求的交易不存在";
|
|
|
+ case "ACQ.ACCOUNT_RISK":
|
|
|
+ return "账户存在风险";
|
|
|
+ case "ACQ.PAYER_STATUS_ABNORMAL":
|
|
|
+ return "账户状态异常";
|
|
|
+ case "ACQ.BIZ_SCENE_NOT_ALLOWED":
|
|
|
+ return "当前业务场景不支持该操作";
|
|
|
+ case "ACQ.PRODUCT_NOT_ALLOWED":
|
|
|
+ return "商户未开通该产品权限(如未申请 “单笔转账” 功能)";
|
|
|
+ case "ACQ.FREQUENCY_LIMIT":
|
|
|
+ return "交易频率超限(短时间内多次调用,触发风控限制)";
|
|
|
+ default:
|
|
|
+ }
|
|
|
+ return "支付宝请求错误";
|
|
|
+ }
|
|
|
+
|
|
|
}
|