创建 Adapay 实名账户时先判断账户是否存在

This commit is contained in:
HH 2022-05-26 19:55:51 +08:00
parent 76e0093428
commit f5fdb55476
2 changed files with 42 additions and 11 deletions

View File

@ -45,22 +45,30 @@ public class CustomerBankController {
for (Merchant merchant : merchants) {
String memberId = AdapayUtils.getCustomerMemberId(request.getCustomerId(), merchant.getDeptId());
//TODO 需要先检查一次memberId是否已存在如果已存在则只需要绑卡即可
// 先在Adapay创建实名用户
Map<String, Object> result1 = adapayService.createMember(merchant.getDeptId(), memberId, request.getPhone(),
request.getName(), request.getCertId());
if (!AdapayStatusEnum.succeeded.code.equals(result1.get("status"))) {
log.error("实名认证失败[{}]", JSON.toJSONString(result1));
// return AjaxResult.error("个人信息不正确");
// 需要先检查一次memberId是否已存在如果已存在则只需要绑卡即可
Map<String, Object> member = adapayService.queryMember(merchant.getDeptId(), memberId);
if (AdapayStatusEnum.succeeded.code.equals(member.get("status")) && memberId.equals(member.get("member_id"))) {
log.info("用户[memberId={}]已存在 跳过实名直接绑卡", memberId);
} else {
// 先在Adapay创建实名用户
Map<String, Object> result1 = adapayService.createMember(merchant.getDeptId(), memberId, request.getPhone(),
request.getName(), request.getCertId());
if (!AdapayStatusEnum.succeeded.code.equals(result1.get("status"))) {
log.error("实名认证失败[{}]", JSON.toJSONString(result1));
return AjaxResult.error("个人信息不正确");
}
}
// 开始创建结算账户
Map<String, Object> result2 = adapayService.createSettleAccount(merchant.getDeptId(), memberId, request.getBankNum(), request.getName(),
"2", request.getCertId(), request.getPhone(), null, null, null);
if (!AdapayStatusEnum.succeeded.code.equals(result2.get("status"))) {
log.error("创建结算账户失败[{}]", JSON.toJSONString(result2));
return AjaxResult.error("个人信息与银行卡不匹配");
if ("account_exists".equals(result2.get("error_code"))) {
log.info("用户[memberId={}]结算账户已存在 跳过", memberId);
} else {
log.error("创建结算账户失败[{}]", JSON.toJSONString(result2));
return AjaxResult.error("个人信息与银行卡不匹配");
}
}
CustomerBank customerBank = new CustomerBank();
@ -68,8 +76,12 @@ public class CustomerBankController {
customerBank.setName(request.getName());
customerBank.setCertId(request.getCertId());
customerBank.setBankNum(request.getBankNum());
customerBank.setPhone(request.getPhone());
customerBank.setDeptId(merchant.getDeptId());
customerBank.setAdapayMemberId(memberId);
customerBank.setSettleAccount(1);
customerBankService.insertCustomerBank(customerBank);
// TODO 入库
}
return AjaxResult.success();
}

View File

@ -40,6 +40,7 @@ public class AdapayService {
* 适用于延时分账的场景只有已支付完成且延时分账的Payment对象才支持调用创建支付确认对象
* 支持一次全额或多次部分确认多次部分确认时当前确认金额 + 已确认金额 + 已撤销金额不能大于原支付金额
*
* @param deptId [必填]商户ID
* @param paymentId [必填] String(64) Adapay生成的支付对象id
* @param orderNo [必填] String(64) 请求订单号只能为英文数字或者下划线的一种或多种组合保证在app_id下唯一
* @param confirmAmt [必填] String(14) 确认金额必须大于0保留两位小数点如0.10100.05等必须小于等于原支付金额-已确认金额-已撤销金额
@ -54,6 +55,7 @@ public class AdapayService {
* 适用于延时分账的场景只有已支付完成且延时分账的Payment对象才支持调用创建支付确认对象
* 支持一次全额或多次部分确认多次部分确认时当前确认金额 + 已确认金额 + 已撤销金额不能大于原支付金额
*
* @param deptId [必填]商户ID
* @param paymentId [必填] String(64) Adapay生成的支付对象id
* @param orderNo [必填] String(64) 请求订单号只能为英文数字或者下划线的一种或多种组合保证在app_id下唯一
* @param confirmAmt [必填] String(14) 确认金额必须大于0保留两位小数点如0.10100.05等必须小于等于原支付金额-已确认金额-已撤销金额
@ -296,6 +298,7 @@ public class AdapayService {
* 退款对象同步返回成功表示Adapay受理成功退款结果以异步通知为准支持退款最长时间为178天
* 若返回码是order_id_not_exists 订单记录不存在既超过退款期限无法退款成功
*
* @param deptId [必填]商户ID
* @param callback [必填项]处理退款结果的回调接口
* @param paymentId [必填项]支付确认对象的id
* @param refundOrderNo [必填项]订单号
@ -324,6 +327,7 @@ public class AdapayService {
* 4.支付宝正扫接口如果用户没有扫码订单不能关闭成功二维码给用户展示如果用户没有用手机去扫码那这笔就不能关单 如果用户扫过了的话无需支付成功就可以关单了-微信正扫无此条限制
* 5.网银和快捷类交易都不支持关单操作
*
* @param deptId [必填]商户ID
* @param paymentId [必填项] Adapay 生成的支付对象 id
* @param reason 关单描述
* @param expend 扩展域
@ -338,4 +342,19 @@ public class AdapayService {
return Payment.close(paymentParams, deptId.toString());
}
/**
* 查询已创建的单个用户对象
* https://docs.adapay.tech/api/trade.html#id41
*
* @param deptId [必填]商户ID
* @param memberId [必填]商户下的用户id只能为英文数字或者下划线的一种或多种组合保证在app_id下唯一
* @return 成功时同步返回一个包含 Member对象的JSON
*/
public Map<String, Object> queryMember(@NotNull Long deptId, @NotNull String memberId) throws BaseAdaPayException {
Map<String, Object> memberParams = new HashMap<>(2);
memberParams.put("member_id", memberId);
memberParams.put("app_id", AdapayConfig.getAppId(deptId));
return Member.query(memberParams, deptId.toString());
}
}