diff --git a/jsowell-admin/src/main/java/com/jsowell/web/controller/pile/AdapayMemberController.java b/jsowell-admin/src/main/java/com/jsowell/web/controller/pile/AdapayMemberController.java index 313ff2d21..081cc6db3 100644 --- a/jsowell-admin/src/main/java/com/jsowell/web/controller/pile/AdapayMemberController.java +++ b/jsowell-admin/src/main/java/com/jsowell/web/controller/pile/AdapayMemberController.java @@ -10,7 +10,9 @@ import com.jsowell.adapay.service.AdapayMemberService; import com.jsowell.adapay.vo.AdapayAccountBalanceVO; import com.jsowell.common.core.controller.BaseController; import com.jsowell.common.core.domain.AjaxResult; +import com.jsowell.common.enums.ykc.ReturnCodeEnum; import com.jsowell.common.exception.BusinessException; +import com.jsowell.common.util.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; @@ -37,6 +39,9 @@ public class AdapayMemberController extends BaseController { logger.info("创建结算账户接口 param:{}", JSON.toJSONString(dto)); AjaxResult result; try { + if (StringUtils.isBlank(dto.getMerchantId())) { + throw new BusinessException(ReturnCodeEnum.CODE_PARAM_NOT_NULL_ERROR); + } adapayMemberService.createSettleAccount(dto); result = AjaxResult.success(); } catch (BusinessException e) { @@ -56,10 +61,16 @@ public class AdapayMemberController extends BaseController { public AjaxResult selectAdapayMember(@RequestBody AdapayMemberInfoDTO dto) { AjaxResult result; try { + if (StringUtils.isBlank(dto.getMerchantId())) { + throw new BusinessException(ReturnCodeEnum.CODE_PARAM_NOT_NULL_ERROR); + } Map map = adapayMemberService.selectAdapayMember(dto.getMerchantId()); result = AjaxResult.success(map); + } catch (BusinessException e) { + logger.warn("查询汇付会员接口异常warn", e); + result = AjaxResult.error(e.getMessage()); } catch (Exception e) { - logger.error("查询汇付会员接口异常", e); + logger.error("查询汇付会员接口异常error", e); result = AjaxResult.error("查询汇付会员接口异常"); } return result; diff --git a/jsowell-common/src/main/java/com/jsowell/common/constant/Constants.java b/jsowell-common/src/main/java/com/jsowell/common/constant/Constants.java index 2495b52da..53e4c80c4 100644 --- a/jsowell-common/src/main/java/com/jsowell/common/constant/Constants.java +++ b/jsowell-common/src/main/java/com/jsowell/common/constant/Constants.java @@ -225,4 +225,10 @@ public class Constants { // N-否 public static final String N = "N"; + + // 汇付个人用户前缀 + public static final String ADAPAY_MEMBER_PREFIX = "AM"; + + // 汇付企业用户前缀 + public static final String ADAPAY_CORP_MEMBER_PREFIX = "ACM"; } diff --git a/jsowell-pile/src/main/java/com/jsowell/adapay/common/AccountInfo.java b/jsowell-pile/src/main/java/com/jsowell/adapay/common/AccountInfo.java new file mode 100644 index 000000000..1eb35b07b --- /dev/null +++ b/jsowell-pile/src/main/java/com/jsowell/adapay/common/AccountInfo.java @@ -0,0 +1,41 @@ +package com.jsowell.adapay.common; + +import lombok.Getter; +import lombok.Setter; + +/** + * 结算账户信息 + */ +@Getter +@Setter +public class AccountInfo { + // 银行卡号 + private String card_id; + + // 银行卡对应的户名 + private String card_name; + + // 证件号,银行账户类型为对私时,必填 + private String cert_id; + + // 证件类型,仅支持:00-身份证,银行账户类型为对私时,必填 + private String cert_type; + + // 手机号 + private String tel_no; + + // 银行编码,详见附录 银行代码,银行账户类型对公时,必填 + private String bank_code; + + // 开户银行名称 + private String bank_name; + + // 银行账户类型:1-对公;2-对私 + private String bank_acct_type; + + // 银行账户开户银行所在省份编码 (省市编码),银行账户类型为对公时,必填 + private String prov_code; + + // 银行账户开户银行所在地区编码(省市编码),银行账户类型为对公时,必填 + private String area_code; +} diff --git a/jsowell-pile/src/main/java/com/jsowell/adapay/common/CorpMember.java b/jsowell-pile/src/main/java/com/jsowell/adapay/common/CorpMember.java new file mode 100644 index 000000000..2ba7f1638 --- /dev/null +++ b/jsowell-pile/src/main/java/com/jsowell/adapay/common/CorpMember.java @@ -0,0 +1,101 @@ +package com.jsowell.adapay.common; + +import lombok.Getter; +import lombok.Setter; + +import java.util.List; + +@Getter +@Setter +public class CorpMember { + // 控制台 主页面应用的app_id + private String app_id; + + // 请求订单号,只能为英文、数字或者下划线的一种或多种组合,保证在app_id下唯一 + private String order_no; + + // 商户下的用户id,只能为英文、数字或者下划线的一种或多种组合,保证在app_id下唯一 + private String member_id; + + // 企业名称 + private String name; + + // 省份编码 (省市编码) + private String prov_code; + + // 地区编码 (省市编码) + private String area_code; + + // 统一社会信用码 + private String social_credit_code; + + // 统一社会信用证有效期(格式:YYYYMMDD,例如:20190909) + private String social_credit_code_expires; + + // 经营范围 + private String business_scope; + + // 法人姓名 + private String legal_person; + + // 法人身份证号码 + private String legal_cert_id; + + // 法人身份证有效期(格式:YYYYMMDD,例如:20190909) + private String legal_cert_id_expires; + + // 法人手机号 + private String legal_mp; + + // 企业地址 + private String address; + + // 邮编 + private String zip_code; + + // 企业电话 + private String telphone; + + // 企业邮箱 + private String email; + + // 上传附件,传入的中文文件名称为 UTF-8 字符集 URLEncode 编码后的字符串。 + // 内容须包含三证合一证件照、法人身份证正面照、法人身份证反面照、开户银行许可证照。 压缩 zip包后上 + private String attach_file; + + // 银行代码,如果需要自动开结算账户,本字段必填(详见附录 银行代码) + private String bank_code; + + // 银行账户类型:1-对公;2-对私,如果需要自动开结算账户,本字段必填 + private String bank_acct_type; + + // 银行卡号,如果需要自动开结算账户,本字段必填 + private String card_no; + + // 银行卡对应的户名,如果需要自动开结算账户,本字段必填 + private String card_name; + + // SettleAccount对象 列表 + private List settle_accounts; + + // 审核状态,状态包括:A-待审核;B-审核失败;C-开户失败;D-开户成功但未创建结算账户;E-开户和创建结算账户成功 + private String audit_state; + + // 审核结果描述 + private String audit_desc; + + // 当前交易状态,参见 状态 说明 + private String status; + + // 错误码,详见 错误 + private String error_code; + + // 错误描述,详见 错误 + private String error_msg; + + // 错误类型,详见 错误 + private String error_type; + + // 当发生参数错误时返回具体的参数名,便于定位错误原因,详见 错误 + private String invalid_param; +} diff --git a/jsowell-pile/src/main/java/com/jsowell/adapay/common/DivMembers.java b/jsowell-pile/src/main/java/com/jsowell/adapay/common/DivMembers.java new file mode 100644 index 000000000..ec032b81a --- /dev/null +++ b/jsowell-pile/src/main/java/com/jsowell/adapay/common/DivMembers.java @@ -0,0 +1,23 @@ +package com.jsowell.adapay.common; + +import lombok.Getter; +import lombok.Setter; + +/** + * 分账对象信息 + */ +@Getter +@Setter +public class DivMembers { + // 分账用户 Member对象 的 id;若是商户本身时,传入0 + private String member_id; + + // 分账金额,精确到分,如0.50,1.00等,分账总金额必须等于主交易金额,金额不能为0.00 + private String amount; + + // 是否手续费承担方,N-否,Y-是,手续费承担方有且只能有一个 + private String fee_flag; + + // 控制台 主页面应用的app_id,不上送默认取商户自身app_id + private String app_id; +} diff --git a/jsowell-pile/src/main/java/com/jsowell/adapay/common/SettleAccount.java b/jsowell-pile/src/main/java/com/jsowell/adapay/common/SettleAccount.java new file mode 100644 index 000000000..252ae6d33 --- /dev/null +++ b/jsowell-pile/src/main/java/com/jsowell/adapay/common/SettleAccount.java @@ -0,0 +1,44 @@ +package com.jsowell.adapay.common; + +import lombok.Getter; +import lombok.Setter; + +/** + * 结算账户 + */ +@Getter +@Setter +public class SettleAccount { + // 由 Adapay 生成的结算账户对象 id + private String id; + + // 结算账户对象,settle_account + private String object; + + // 目前仅支持:bank_account(银行卡) + private String channel; + + // 创建时的时间戳 + private String create_time; + + // 是否 prod模式,true 是 prod模式,false 是 mock模式 + private String prod_mode; + + // 结算账户信息,参见 结算账户信息对象 + private String account_info; + + // 当前交易状态,参见 状态 说明 + private String status; + + // 错误码,详见 错误 + private String error_code; + + // 错误描述,详见 错误 + private String error_msg; + + // 错误类型,详见 错误 + private String error_type; + + // 当发生参数错误时返回具体的参数名,便于定位错误原因,详见 错误 + private String invalid_param; +} diff --git a/jsowell-pile/src/main/java/com/jsowell/adapay/service/AdapayMemberService.java b/jsowell-pile/src/main/java/com/jsowell/adapay/service/AdapayMemberService.java index 827969617..0b3eada3f 100644 --- a/jsowell-pile/src/main/java/com/jsowell/adapay/service/AdapayMemberService.java +++ b/jsowell-pile/src/main/java/com/jsowell/adapay/service/AdapayMemberService.java @@ -69,7 +69,7 @@ public class AdapayMemberService { } log.info("=======execute CreateMember begin======="); Map memberParams = Maps.newHashMap(); - String adapayMemberId = "AM" + IdUtils.getMemberId(); + String adapayMemberId = Constants.ADAPAY_MEMBER_PREFIX + IdUtils.getMemberId(); memberParams.put("member_id", adapayMemberId); memberParams.put("app_id", ADAPAY_APP_ID); memberParams.put("location", dto.getLocation()); @@ -154,18 +154,31 @@ public class AdapayMemberService { } String adapayMemberId = adapayMemberAccount.getAdapayMemberId(); - String settleAccountId = adapayMemberAccount.getSettleAccountId(); + String bankAcctType; + if (StringUtils.startsWith(adapayMemberId, Constants.ADAPAY_MEMBER_PREFIX)) { + bankAcctType = Constants.ONE; + // 查询个人用户 + AdapayMemberInfoVO adapayMemberInfoVO = queryAdapayMemberInfo(adapayMemberId); + if (adapayMemberInfoVO != null) { + adapayMemberInfoVO.setMerchantId(merchantId); + } + AdapaySettleAccountVO adapaySettleAccountVO = queryAdapaySettleAccount(adapayMemberId, adapayMemberAccount.getSettleAccountId()); + if (adapaySettleAccountVO != null) { + adapaySettleAccountVO.setMerchantId(merchantId); + } + map.put("adapayMember", adapayMemberInfoVO); + map.put("settleAccountList", Lists.newArrayList(adapaySettleAccountVO)); - AdapayMemberInfoVO adapayMemberInfoVO = queryAdapayMemberInfo(adapayMemberId); - if (adapayMemberInfoVO != null) { - adapayMemberInfoVO.setMerchantId(merchantId); + } else { + bankAcctType = Constants.TWO; + // 查询企业用户 + queryCorpAdapayMemberInfo(adapayMemberId); } - AdapaySettleAccountVO adapaySettleAccountVO = queryAdapaySettleAccount(adapayMemberId, settleAccountId); - if (adapaySettleAccountVO != null) { - adapaySettleAccountVO.setMerchantId(merchantId); - } - map.put("adapayMember", adapayMemberInfoVO); - map.put("settleAccountList", Lists.newArrayList(adapaySettleAccountVO)); + + + + + map.put("bankAcctType", bankAcctType); return map; } @@ -198,6 +211,24 @@ public class AdapayMemberService { return resultVO; } + /** + * 查询企业用户信息 + */ + public AdapayMemberInfoVO queryCorpAdapayMemberInfo(String adapayMemberId) throws BaseAdaPayException { + Map memberParams = Maps.newHashMap(); + memberParams.put("member_id", adapayMemberId); + memberParams.put("app_id", ADAPAY_APP_ID); + Map member = CorpMember.query(memberParams); + + if (member == null || member.isEmpty() || !"succeeded".equals(member.get("status"))) { + return null; + } + + + + return null; + } + /** * 查询汇付结算账户信息 */ @@ -302,7 +333,7 @@ public class AdapayMemberService { */ public void createCorpMember(CreateSettleAccountDTO dto) throws BaseAdaPayException, IOException { Map memberParams = Maps.newHashMap(); - String adapayMemberId = "ACM" + IdUtils.getMemberId(); + String adapayMemberId = Constants.ADAPAY_CORP_MEMBER_PREFIX + IdUtils.getMemberId(); memberParams.put("member_id", adapayMemberId); memberParams.put("app_id", ADAPAY_APP_ID); memberParams.put("order_no", "jsdk_order" + System.currentTimeMillis()); diff --git a/jsowell-pile/src/main/java/com/jsowell/adapay/vo/AdapayCorpMemberInfoVO.java b/jsowell-pile/src/main/java/com/jsowell/adapay/vo/AdapayCorpMemberInfoVO.java new file mode 100644 index 000000000..164a4961c --- /dev/null +++ b/jsowell-pile/src/main/java/com/jsowell/adapay/vo/AdapayCorpMemberInfoVO.java @@ -0,0 +1,12 @@ +package com.jsowell.adapay.vo; + +import lombok.*; + +@Getter +@Setter +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class AdapayCorpMemberInfoVO { + +}