创建 Adapay 实名账户时先判断账户是否存在
This commit is contained in:
parent
76e0093428
commit
f5fdb55476
|
|
@ -45,31 +45,43 @@ public class CustomerBankController {
|
||||||
for (Merchant merchant : merchants) {
|
for (Merchant merchant : merchants) {
|
||||||
String memberId = AdapayUtils.getCustomerMemberId(request.getCustomerId(), merchant.getDeptId());
|
String memberId = AdapayUtils.getCustomerMemberId(request.getCustomerId(), merchant.getDeptId());
|
||||||
|
|
||||||
//TODO 需要先检查一次memberId是否已存在,如果已存在则只需要绑卡即可
|
// 需要先检查一次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创建实名用户
|
// 先在Adapay创建实名用户
|
||||||
Map<String, Object> result1 = adapayService.createMember(merchant.getDeptId(), memberId, request.getPhone(),
|
Map<String, Object> result1 = adapayService.createMember(merchant.getDeptId(), memberId, request.getPhone(),
|
||||||
request.getName(), request.getCertId());
|
request.getName(), request.getCertId());
|
||||||
if (!AdapayStatusEnum.succeeded.code.equals(result1.get("status"))) {
|
if (!AdapayStatusEnum.succeeded.code.equals(result1.get("status"))) {
|
||||||
log.error("实名认证失败[{}]", JSON.toJSONString(result1));
|
log.error("实名认证失败[{}]", JSON.toJSONString(result1));
|
||||||
// return AjaxResult.error("个人信息不正确");
|
return AjaxResult.error("个人信息不正确");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 开始创建结算账户
|
// 开始创建结算账户
|
||||||
Map<String, Object> result2 = adapayService.createSettleAccount(merchant.getDeptId(), memberId, request.getBankNum(), request.getName(),
|
Map<String, Object> result2 = adapayService.createSettleAccount(merchant.getDeptId(), memberId, request.getBankNum(), request.getName(),
|
||||||
"2", request.getCertId(), request.getPhone(), null, null, null);
|
"2", request.getCertId(), request.getPhone(), null, null, null);
|
||||||
if (!AdapayStatusEnum.succeeded.code.equals(result2.get("status"))) {
|
if (!AdapayStatusEnum.succeeded.code.equals(result2.get("status"))) {
|
||||||
|
if ("account_exists".equals(result2.get("error_code"))) {
|
||||||
|
log.info("用户[memberId={}]结算账户已存在 跳过", memberId);
|
||||||
|
} else {
|
||||||
log.error("创建结算账户失败[{}]", JSON.toJSONString(result2));
|
log.error("创建结算账户失败[{}]", JSON.toJSONString(result2));
|
||||||
return AjaxResult.error("个人信息与银行卡不匹配");
|
return AjaxResult.error("个人信息与银行卡不匹配");
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
CustomerBank customerBank = new CustomerBank();
|
CustomerBank customerBank = new CustomerBank();
|
||||||
customerBank.setCustomerId(request.getCustomerId());
|
customerBank.setCustomerId(request.getCustomerId());
|
||||||
customerBank.setName(request.getName());
|
customerBank.setName(request.getName());
|
||||||
customerBank.setCertId(request.getCertId());
|
customerBank.setCertId(request.getCertId());
|
||||||
customerBank.setBankNum(request.getBankNum());
|
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();
|
return AjaxResult.success();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -40,6 +40,7 @@ public class AdapayService {
|
||||||
* 适用于延时分账的场景。只有已支付完成且延时分账的Payment对象,才支持调用创建支付确认对象。
|
* 适用于延时分账的场景。只有已支付完成且延时分账的Payment对象,才支持调用创建支付确认对象。
|
||||||
* 支持一次全额或多次部分确认,多次部分确认时,当前确认金额 + 已确认金额 + 已撤销金额不能大于原支付金额。
|
* 支持一次全额或多次部分确认,多次部分确认时,当前确认金额 + 已确认金额 + 已撤销金额不能大于原支付金额。
|
||||||
*
|
*
|
||||||
|
* @param deptId [必填]商户ID
|
||||||
* @param paymentId [必填] String(64) Adapay生成的支付对象id
|
* @param paymentId [必填] String(64) Adapay生成的支付对象id
|
||||||
* @param orderNo [必填] String(64) 请求订单号,只能为英文、数字或者下划线的一种或多种组合,保证在app_id下唯一
|
* @param orderNo [必填] String(64) 请求订单号,只能为英文、数字或者下划线的一种或多种组合,保证在app_id下唯一
|
||||||
* @param confirmAmt [必填] String(14) 确认金额,必须大于0,保留两位小数点,如0.10、100.05等。必须小于等于原支付金额-已确认金额-已撤销金额
|
* @param confirmAmt [必填] String(14) 确认金额,必须大于0,保留两位小数点,如0.10、100.05等。必须小于等于原支付金额-已确认金额-已撤销金额
|
||||||
|
|
@ -54,6 +55,7 @@ public class AdapayService {
|
||||||
* 适用于延时分账的场景。只有已支付完成且延时分账的Payment对象,才支持调用创建支付确认对象。
|
* 适用于延时分账的场景。只有已支付完成且延时分账的Payment对象,才支持调用创建支付确认对象。
|
||||||
* 支持一次全额或多次部分确认,多次部分确认时,当前确认金额 + 已确认金额 + 已撤销金额不能大于原支付金额。
|
* 支持一次全额或多次部分确认,多次部分确认时,当前确认金额 + 已确认金额 + 已撤销金额不能大于原支付金额。
|
||||||
*
|
*
|
||||||
|
* @param deptId [必填]商户ID
|
||||||
* @param paymentId [必填] String(64) Adapay生成的支付对象id
|
* @param paymentId [必填] String(64) Adapay生成的支付对象id
|
||||||
* @param orderNo [必填] String(64) 请求订单号,只能为英文、数字或者下划线的一种或多种组合,保证在app_id下唯一
|
* @param orderNo [必填] String(64) 请求订单号,只能为英文、数字或者下划线的一种或多种组合,保证在app_id下唯一
|
||||||
* @param confirmAmt [必填] String(14) 确认金额,必须大于0,保留两位小数点,如0.10、100.05等。必须小于等于原支付金额-已确认金额-已撤销金额
|
* @param confirmAmt [必填] String(14) 确认金额,必须大于0,保留两位小数点,如0.10、100.05等。必须小于等于原支付金额-已确认金额-已撤销金额
|
||||||
|
|
@ -296,6 +298,7 @@ public class AdapayService {
|
||||||
* 退款对象同步返回成功,表示Adapay受理成功,退款结果以异步通知为准。支持退款最长时间为178天,
|
* 退款对象同步返回成功,表示Adapay受理成功,退款结果以异步通知为准。支持退款最长时间为178天,
|
||||||
* 若返回码是“order_id_not_exists 订单记录不存在”,既超过退款期限,无法退款成功。
|
* 若返回码是“order_id_not_exists 订单记录不存在”,既超过退款期限,无法退款成功。
|
||||||
*
|
*
|
||||||
|
* @param deptId [必填]商户ID
|
||||||
* @param callback [必填项]处理退款结果的回调接口
|
* @param callback [必填项]处理退款结果的回调接口
|
||||||
* @param paymentId [必填项]支付确认对象的id
|
* @param paymentId [必填项]支付确认对象的id
|
||||||
* @param refundOrderNo [必填项]订单号
|
* @param refundOrderNo [必填项]订单号
|
||||||
|
|
@ -324,6 +327,7 @@ public class AdapayService {
|
||||||
* 4.支付宝正扫接口,如果用户没有扫码,订单不能关闭成功(二维码给用户展示,如果用户没有用手机去扫码,那这笔就不能关单; 如果用户扫过了的话(无需支付成功)就可以关单了)—-微信正扫无此条限制
|
* 4.支付宝正扫接口,如果用户没有扫码,订单不能关闭成功(二维码给用户展示,如果用户没有用手机去扫码,那这笔就不能关单; 如果用户扫过了的话(无需支付成功)就可以关单了)—-微信正扫无此条限制
|
||||||
* 5.网银和快捷类交易都不支持关单操作
|
* 5.网银和快捷类交易都不支持关单操作
|
||||||
*
|
*
|
||||||
|
* @param deptId [必填]商户ID
|
||||||
* @param paymentId [必填项]由 Adapay 生成的支付对象 id
|
* @param paymentId [必填项]由 Adapay 生成的支付对象 id
|
||||||
* @param reason 关单描述
|
* @param reason 关单描述
|
||||||
* @param expend 扩展域
|
* @param expend 扩展域
|
||||||
|
|
@ -338,4 +342,19 @@ public class AdapayService {
|
||||||
return Payment.close(paymentParams, deptId.toString());
|
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