银行卡验证(四要素)和银行联行号查询

银行卡验证(四要素)和 银行联行号查询(阿里云平台)

使用场景:

  1. 用户绑定银行卡
  2. 根据地区、银行卡号、银行名称获取该地 银行支行信息及联行号

一:银行卡验证

阿里云接口文档说明,可以先买个免费的用于测试
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

BankValidationService(示例):

@Service
public interface BankValidationService {

    /**
     * 验证银行卡
     * @param param
     * @return
     */
    Result verifyBank(BankCardParam param);

}

BankValidationServiceImpl(示例):

@Slf4j
@Service
@Data
@ConfigurationProperties(prefix = "xym.bank")
public class BankValidationServiceImpl implements BankValidationService {

    /**
     * 请求地址
     */
    private String url;
    /**
     * appCode码
     */
    private String appCode;

    @Override
    public Result verifyBank(BankCardParam param) {

        Map<String, Object> params = new HashMap<>();
        params.put("idcard", param.getIdcard());
        params.put("name", param.getName());
        params.put("bankcard", param.getBankcard());
        params.put("mobile", param.getMobile());
        String response = HttpUtil.createGet(url).form(params).header("Authorization", "APPCODE " + appCode).execute().body();
        log.info("银行卡验证信息:response:{}", response);
        JSONObject result = JSONObject.parseObject(response);
        if ("200".equals(result.getString("code"))) {
            JSONObject data = JSONObject.parseObject(result.getString("data"));
            if ("0".equals(data.getString("result"))) {
                return Result.success();
            } else {
                log.error("用户银行卡四要素验证失败,原因:result:{},msg:{},desc:{}", data.getString("result"), data.getString("msg"), data.getString("desc"));
                return Result.failure(data.getString("desc"));
            }
        } else {
            log.error("用户银行卡四要素验证失败,原因:code:{},msg:{}", result.getString("code"), result.getString("msg"));
            return Result.failure(result.getString("msg"));
        }
    }
}

二:获取联行号

阿里云接口文档说明
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

OpenBankValidationService(示例):

@Service
public interface OpenBankValidationService {

    /**
     * 开户行查询
     */
    Result verifyOpenBank(OpenBankParam param);
}

OpenBankValidationService(示例):

@Slf4j
@Configuration
@Data
@ConfigurationProperties(prefix = "xym.openbank")  
public class OpenBankValidationServiceImpl implements OpenBankValidationService {

    /**
     * 请求地址
     */
    private String url;
    /**
     * appCode码
     */
    private String appCode;

    @Override
    public Result verifyOpenBank(OpenBankParam param) {

        HashMap<String, Object> map = new HashMap<>();
        map.put("bank",param.getBank()); //银行名称
        map.put("bankcard",param.getBankcard()); //银行卡号
        map.put("province",param.getProvince());
        map.put("city",param.getCity());
        map.put("key",param.getKey());
        map.put("page",param.getPage());

        try {
            String response = HttpUtil.createGet(url).form(map).header("Authorization", "APPCODE " + appCode).execute().body();

            JSONObject result = JSONObject.parseObject(response);
            System.out.println(result.toJSONString());
            if (result.getString("code").equals("200")){
                //请求成功
                JSONObject data = result.getJSONObject("data");
                JSONObject results = data.getJSONObject("result");
                return Result.success(results);
            }else if (result.getString("code").equals("400")){
                return Result.failure("参数错误");
            }else if (result.getString("code").equals("501")){
                return Result.failure("第三方服务异常");
            }else if (result.getString("code").equals("604")){
                return Result.failure("接口停用");
            }else {
                return Result.failure("其他类型错误");
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
        return Result.success();
    }
}

说明:

  • HttpUtil: 我没有用阿里云上下载的,这里用的是 hutool 的,大家可以自行选择
<!--hutool工具-->
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.3.4</version>
        </dependency>
  • Result: 自己定义的泛型返回值
@ApiModel(value = "返回结果")
@Data
@ToString
@AllArgsConstructor
public class Result<T> {
   /**
    * 状态码
    */
   @ApiModelProperty(value = "状态码")
   private Integer code;
   /**
    * 信息
    */
   @ApiModelProperty(value = "错误消息")
   private String message;
   /**
    * 数据
    */
   @ApiModelProperty(value = "数据")
   private T data;
   /**
    * 列表数量
    */
   @ApiModelProperty(value = "列表总条数")
   private Integer count = 0;


   public static <T> Result<T> success() {
       return new Result(ResultCode.SUCCESS.getCode(), ResultCode.SUCCESS.getMessage(), "", 0);
   }

   public static <T> Result<T> success(T data) {
       return new Result(ResultCode.SUCCESS.getCode(), ResultCode.SUCCESS.getMessage(), data, 0);
   }

   public static <T> Result<T> success(T data, int count) {
       return new Result(ResultCode.SUCCESS.getCode(), ResultCode.SUCCESS.getMessage(), data, count);
   }

   public static <T> Result<T> failure() {
       return new Result(ResultCode.FAILURE.getCode(), ResultCode.FAILURE.getMessage(), "", 0);
   }

   public static <T> Result<T> failure(String message) {
       return new Result(ResultCode.FAILURE.getCode(), message, "", 0);
   }

   public static <T> Result<T> failure(Integer code, String message) {
       return new Result(code, message, "", 0);
   }

   public static <T> Result<T> failure(IErrorCode resultCode) {
       return new Result(resultCode.getCode(), resultCode.getMessage(), "", 0);
   }

   public static <T> Result<T> NoEmail() {
       return new Result<>(ResultCode.NOEMAIL.getCode(), ResultCode.NOEMAIL.getMessage(), null, 0);
   }

}
  • ResultCode: Result 的状态码
@Getter
@AllArgsConstructor
public enum ResultCode implements IErrorCode {
   SUCCESS(200,"成功"),
   FAILURE(500, "失败"),
   NOEMAIL(501,"没有找到邮箱地址"),
   ;

   private Integer code;
   private String message;
}
  • application.yml 中添加 urlappcode (购买正式版后会显示,此前加密),如图:

在这里插入图片描述
有用的话点个 吧,要不就像下图难受了
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44082075/article/details/107863225
今日推荐