技术篇 >>

php 对接建设银行住房链服务平台接口的详细示例

笔者最近对接建设银行的租房平台,住房链服务平台文档只有java的签名例子 ,没有php对接的例子,所以整理了一下用php的对接方法,以备以后使用。


/**

* 住房链服务平台公共函数

* ============================================================================

*/


注:请求api接口(向住房链服务平台发送请求):

/**
 * 请求api接口
 * Enter description here ...
 * @param int $data      //请求数据
     array(
        'PARTICIPATEID' => CCB_BUSINESS_UNIQUE_ID, //房屋所属企业唯一标识 需由住房链平台提供 类似:'E000002'
        'HOUSEID'    => '41013985331',           //企业内部房源唯一编号
        'STATE'     => '01'                     //01:上架 02:锁定 03:签约出租中 04:平台主动下架
        );       
 * @param str $url       //向住房链服务平台接口请求地址
 * @param array $bianhao //需要8位数字最好有意义 
 */
function httpApi($data,$url,$bianhao='70985121'){
    
    $param    = json_encode($data);
    $sign   = rsaSign($param); //加密
    $params   = base64_encode($param); //参数
    
    $time   = time();
    $header   = array(); 
    
    $header[] = 'C-Business-Id: '.CCB_BUSINESS_UNIQUE_ID.$time.$bianhao; //请求唯一标识   唯一标识25位,生成规则:企业唯一标识编码(7位,不足7位补0,超过7位缩减为7位)+18位(建议由时间戳、序列号及其他有标识意义字段组成,保证唯一,方便问题排查)
    $header[] = 'C-Timestamp: '.$time; //请求时间  
    //$header[] = 'C-Env-Type: ' ; //请求应用的环境类型,如新系统、老系统等 
    $header[] = 'C-Signature: '.$sign; //签名信息   将请求体签名后的签名信息
    $header[] = 'C-App-Id: '.CCB_BUSINESS_UNIQUE_ID; //请求方应用编号  作为请求方的唯一标识,填写企业唯一标识编码,请参考企业唯一标识编码sheet页的定义
    $header[] = 'C-Version: v2'; //访问的API的版本号  调用区块链服务的版本号,1.0版本填写v1; 2.0版本填写v2;
    $header[] = 'C-Tenancy-Id: BSP0001'; //租户id  访问区块链平台的租户ID,填写BSP0001
    //$header[] = 'C-Custom-Header:';//自定义请求头
    //$header[] = 'C-Dynamic-Password:';//动态口令
    
    $r        = curl_post_contents_header($url, $params, 3000,$header);
    //var_dump($r);die;
    $return_data = base64_decode($r);
    $r_de     = json_decode($return_data, true);
    
    //日志 
        //...
        
    return $r_de;
}


/**
 * RSA签名
 * @param $data 待签名数据
 * return 签名结果
 */
function rsaSign($data) {	
	$sigdat = '';	
	$privkeypass = CCB_PRIVATE_PASS; // 私钥签名密码
	$pem = 'ccbroom'; 
	$priv_key = file_get_contents(CACHE_PATH.$pem."/user_private_key_test.pfx"); //获取密钥文件内容 根据自己的文件目录修改路径
	openssl_pkcs12_read($priv_key, $certs, $privkeypass); //读取公钥、私钥    
    
	$prikeyid = $certs['pkey']; //私钥	
	openssl_sign($data, $sigdat, $prikeyid ,'SHA256');
	$sign = base64_encode($sigdat);
	return $sign;	
}


/**
 * curl提交raw数据
 * @param $url
 * @param $data_string
 * @return mixed
 */
function curl_post_contents_header($url, $data_string,$timeout=30,$header=array()) {
    
	$ch = curl_init();
	curl_setopt($ch, CURLOPT_URL, $url);
	curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); // 模拟用户使用的浏览器
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_TIMEOUT, $timeout );
	if(!empty($header)) curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
	curl_setopt($ch, CURLOPT_POST, 1);
	curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
	$data = curl_exec($ch);
	curl_close($ch);
	return $data;
    
}


 


评论