通过银联接口获取给定银行卡的所属信息


将配置信息放入项目文件中(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);
    }
}
?>



分享到: