银行卡验证(四要素)和 银行联行号查询(阿里云平台)
使用场景:
- 用户绑定银行卡
- 根据地区、银行卡号、银行名称获取该地 银行支行信息及联行号
一:银行卡验证
阿里云接口文档说明,可以先买个免费的用于测试
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 中添加 url 和 appcode (购买正式版后会显示,此前加密),如图:
有用的话点个 赞 吧,要不就像下图难受了