创建 Adapay 实名账户时先判断账户是否存在
This commit is contained in:
parent
76e0093428
commit
f5fdb55476
|
|
@ -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();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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.10、100.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.10、100.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());
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Reference in New Issue