银联查询银行卡信息

银联已于 2020 年 1 月下架该页面及功能,本文所提方式已失效。

不知道你在用手机银行转账时注意过没有,当你输入卡号时,会自动识别归属银行,识别失败时,则会让用户手动选择。最近在做一个类似银行卡信息需求时,想到应该会有这样的一个接口,Google 后发现还真的有官方接口,而且有体验页面👉银行卡信息查询体验,详细的接口信息银行卡信息查询。不过当我注册了开发者时,发现该接口无法使用,提交工单后得到以下回复

既然无法通过正常调用使用,那就曲径通幽吧。我们通过分析查询体验页后就有了以下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<?php
// 获取银行卡的发卡行、发卡行机构代码、卡性质、卡类别、卡种、卡品牌、卡产品、卡等级、卡介质、所属总行机构中文名称、所属总行机构中文简称。

$cardNo = '6227000280070981140';

$ch = curl_init('https://open.unionpay.com/tjwx/api/cardbin/cardinfo');
curl_setopt_array(
$ch,
[
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => http_build_query(['cardNo' => $cardNo]),//设定 POST 参数内容
// CURLOPT_FOLLOWLOCATION => true,//跟随重定向地址
// CURLOPT_AUTOREFERER => true,
CURLOPT_RETURNTRANSFER => true,//将curl_exec()获取的信息以字符串返回,而不是直接输出。
CURLOPT_USERAGENT => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36',
CURLOPT_REFERER => 'https://open.unionpay.com/tjwx/openapi/cardbin-pc.html',//必填项
CURLOPT_HTTPHEADER => ["Content-Type: application/x-www-form-urlencoded", "Accept: application/json, text/javascript, */*; q=0.01"]
]
);

$resp = curl_exec($ch);

curl_close($ch);

$resp_obj = json_decode($resp);
if ($resp_obj->state) {
// 发卡行中文名
$bankCnName = $resp_obj->data->issNm;
// 发卡行中文简称
$bankCnShortName = $resp_obj->data->issAbbr;
// 发卡行机构代码
$issInsId = $resp_obj->data->issInsId;
// 卡性质 cardAttr
// 卡类别 cardCata
}

这些信息对我已经够用了,银联还有很多其它的便捷接口,有些公共信息我们是可以免除用户输入,系统自动抓取相关信息补充,既减少了用户的输入,又能避免错误输入,是一种不错的提升用户体验的思路。不过要考虑到有时候无法正确拉取到结果,对于拉取失败仍需给用户留下手动输入的空间。

因为热爱,所以执着。