一:首先注册银联账号,申请开放接口相关使用配置信息
银联开发平台:https://open.unionpay.com/tjweb/login
二:将配置信息放入项目文件中(tp框架为例),这里我把它放入到application下的extra目录下
三:调取银联接口实例
<?php
/**
* 获取银行卡信息
*/
namespace app\common\extend;
use think\Session;
use think\Config;
class UnionPay
{
/**
*获取请求token令牌
*/
public function getToken(){
$token = Session::get("bank_token");
if (empty($token))
{
$url = sprintf(Config::get("配置文件名称.get_token_url"), Config::get("配置文件名称.appid"), Config::get("配置文件名称.appsecret"));
$res = $this->curl_get($url);
$res = json_decode($res, true);
$token = $res['token'];
Session::set("bank_token",$token,7000);
}
return $token;
}
/**
*获取银行卡信息
*/
public function getBank($bankCard){
$arr['cardNo'] = $bankCard;
$json = json_encode($arr);
$time = $this->getMillisecond();
$sign=Config::get("配置文件名称.sign").$json.$time;
$newSign=hash('sha256',$sign);
$url=sprintf(Config::get("get_bank_url"),$this->getToken(),$newSign,$time);
$res=$this->https_request($url,$json);
return json_decode($res,true)['data']['issNm'];
}
function https_request($url,$data=null){
$curl = curl_init();
curl_setopt($curl,CURLOPT_URL,$url);
curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,FALSE);
curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,FALSE);
if(!empty($data)){
curl_setopt($curl,CURLOPT_POST,1);
curl_setopt($curl,CURLOPT_POSTFIELDS,$data);
}
curl_setopt($curl, CURLOPT_TIMEOUT,600); //只需要设置一个秒的数量就可以
curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);
// Content-Type: application/json;
// 下面这行是修改后增加的代码,就是配置设置host访问,发送的数据类型为application/json
curl_setopt($curl, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json; charset=utf-8',
// 'Content-Length: ' . strlen($data)
));
$output = curl_exec($curl);
curl_close($curl);
return $output;
}
function curl_get($url) {
$ch = curl_init();
$timeout = 300;
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$res = curl_exec($ch);
if (curl_errno($ch)) {
echo 'Curl error: ' . curl_error($ch);
}
curl_close($ch);
return $res;
}
function getMillisecond() {
list($t1, $t2) = explode(' ', microtime());
return (float)sprintf('%.0f',(floatval($t1)+floatval($t2))*1000);
}
}
?>