package com.jsowell.adapay.service; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.PropertyNamingStrategies; import com.google.common.collect.Maps; import com.huifu.adapay.core.exception.BaseAdaPayException; import com.huifu.adapay.model.Member; import com.huifu.adapay.model.SettleAccount; import com.jsowell.adapay.dto.AdapayMemberInfoDTO; import com.jsowell.adapay.vo.AdapayMemberInfoVO; import com.jsowell.common.exception.BusinessException; import com.jsowell.common.util.StringUtils; import com.jsowell.common.util.id.IdUtils; import com.jsowell.pile.domain.AdapayMemberInfo; import com.jsowell.pile.service.AdapayMemberInfoService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import java.util.Map; @Slf4j @Service public class AdapayMemberService { @Value("${adapay.appId}") private String ADAPAY_APP_ID; @Autowired private AdapayMemberInfoService adapayMemberInfoService; /** * 创建汇付会员 */ public Map executeCreateMember(String app_id) throws Exception { log.info("=======execute CreateMember begin======="); Map memberParams = Maps.newHashMap(); memberParams.put("member_id", "AM" + IdUtils.getMemberId()); memberParams.put("app_id", app_id); memberParams.put("location", "上海市徐汇区宜山路"); memberParams.put("email", "123@163.com"); memberParams.put("gender", "MALE"); // memberParams.put("tel_no", "13153333333"); // memberParams.put("nickname", "nick_name"); log.info("创建用户,请求参数:" + JSON.toJSONString(memberParams)); Map member = Member.create(memberParams); log.info("创建用户,返回参数:" + JSON.toJSONString(member)); log.info("=======execute CreateMember end======="); // 创建成功保存到数据库 JSONObject jsonObject = JSON.parseObject(String.valueOf(member)); ObjectMapper mapper = new ObjectMapper(); mapper.setPropertyNamingStrategy(PropertyNamingStrategies.SNAKE_CASE); AdapayMemberInfo adapayMemberInfo = mapper.readValue(jsonObject.toJSONString(), AdapayMemberInfo.class); adapayMemberInfoService.insert(adapayMemberInfo); return member; } /** * 查询 member * * @param member_id 待查询的member_id * @return 创建的member 对象 * @throws Exception 异常 */ public Map executeQueryMember(String member_id, String app_id) throws Exception { log.info("=======execute queryMember begin======="); Map memberParams = Maps.newHashMap(); memberParams.put("member_id", member_id); memberParams.put("app_id", app_id); log.info("查询用户,请求参数:" + JSON.toJSONString(memberParams)); Map member = Member.query(memberParams); log.info("查询用户,返回参数:" + JSON.toJSONString(member)); log.info("=======execute queryMember end======="); return member; } /** * 创建汇付会员 * @param dto * @throws Exception */ public void createMember(AdapayMemberInfoDTO dto) throws Exception { log.info("=======execute CreateMember begin======="); Map memberParams = Maps.newHashMap(); memberParams.put("member_id", "AM" + IdUtils.getMemberId()); memberParams.put("app_id", ADAPAY_APP_ID); memberParams.put("location", dto.getLocation()); memberParams.put("email", dto.getEmail()); memberParams.put("gender", dto.getGender()); memberParams.put("nickname", dto.getNickname()); log.info("创建用户,请求参数:" + JSON.toJSONString(memberParams)); Map member = Member.create(memberParams); log.info("创建用户,返回参数:" + JSON.toJSONString(member)); log.info("=======execute CreateMember end======="); if (member == null || StringUtils.equals((String) member.get("status"), "failed")) { String errorMsg = member == null ? "创建汇付用户失败" : (String) member.get("error_msg"); throw new BusinessException("00500001", errorMsg); } // 创建成功保存到数据库 JSONObject jsonObject = JSON.parseObject(String.valueOf(member)); ObjectMapper mapper = new ObjectMapper(); mapper.setPropertyNamingStrategy(PropertyNamingStrategies.SNAKE_CASE); AdapayMemberInfo adapayMemberInfo = mapper.readValue(jsonObject.toJSONString(), AdapayMemberInfo.class); adapayMemberInfo.setMerchantId(dto.getMerchantId()); adapayMemberInfoService.insert(adapayMemberInfo); dto.setAdapayMemberId(adapayMemberInfo.getMemberId()); // 创建结算账户 createSettleAccount(dto); } /** * 查询汇付会员信息 * @param merchantId * @return */ public AdapayMemberInfoVO selectAdapayMember(String merchantId) { AdapayMemberInfo adapayMemberInfo = adapayMemberInfoService.selectByMerchantId(merchantId); if (adapayMemberInfo == null) { return null; } AdapayMemberInfoVO resultVO = new AdapayMemberInfoVO(); BeanUtils.copyProperties(adapayMemberInfo, resultVO); return resultVO; } /** * 创建结算账户 */ public void createSettleAccount(AdapayMemberInfoDTO dto) throws BaseAdaPayException { Map accountInfo = Maps.newHashMap(); // 银行卡号 accountInfo.put("card_id", dto.getCardId()); // 银行卡对应的户名 accountInfo.put("card_name", dto.getCardName()); // 证件号,银行账户类型为对私时,必填 accountInfo.put("cert_id", dto.getCertId()); // 证件类型,仅支持:00-身份证,银行账户类型为对私时,必填 accountInfo.put("cert_type", "00"); // 手机号 accountInfo.put("tel_no", dto.getTelNo()); // 银行编码,详见附录 银行代码,银行账户类型对公时,必填 accountInfo.put("bank_code", dto.getBankCode()); // 银行账户类型:1-对公;2-对私 accountInfo.put("bank_acct_type", dto.getBankAcctType()); // 银行账户开户银行所在省份编码 (省市编码),银行账户类型为对公时,必填 accountInfo.put("prov_code", dto.getAreaCode()); // 银行账户开户银行所在地区编码(省市编码),银行账户类型为对公时,必填 accountInfo.put("area_code", dto.getAreaCode()); Map settleCountParams = Maps.newHashMap(); settleCountParams.put("member_id", dto.getAdapayMemberId()); settleCountParams.put("app_id", ADAPAY_APP_ID); // channel String Y 目前仅支持:bank_account(银行卡) settleCountParams.put("channel", "bank_account"); settleCountParams.put("account_info", accountInfo); Map settleCount = SettleAccount.create(settleCountParams); log.info("创建汇付结算账户result:{}", settleCount); } }