天天看點

php接口和java接口_php--php調java接口驗簽

use Think\Model;classDealJavaModel extends Model {

publicfunction dealJavaParam($url,$data){//調java接口位址

$url=C('java_php').$url;

$token=C('token');

$apiKey=C('apiKey');

$timestamp=time();

$version=C('version');

$source=4;

$data=json_encode($data);//簽名

$paramArr=array('token'=>$token,'timestamp'=>$timestamp,'source'=>$source,'version'=>$version,'data'=>$data

);

$sign=$this->createSign($paramArr,$apiKey);

$header= array('Content-Type: application/json; charset=utf-8',"token:$token","timestamp:$timestamp","source:$source","version:$version","sign:$sign","data:$data");

$result=$this->tocurl($url, $header,$data);

$res_info=json_decode($result,true);return$res_info;

}

privatefunction createSign ($paramArr,$apiKey) {

ksort($paramArr);

$sign='';foreach ($paramArr as $key =>$val) {if ($key != '' && $val != '') {

$sign .= $key."=".$val."&";

}

}

$sign=rtrim($sign,"&");

$sign .=$apiKey;

$sign=strtolower($sign);

$sign=md5($sign);return$sign;

}

privatefunction tocurl($url, $header, $data){

$ch=curl_init();if(substr($url,0,5)=='https'){

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,false); //跳過證書檢查

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, true); //從證書中檢查SSL加密算法是否存在

}

curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);

curl_setopt($ch, CURLOPT_URL, $url);

curl_setopt($ch, CURLOPT_HTTPHEADER, $header);

curl_setopt($ch, CURLOPT_POST,true);

curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

$response=curl_exec($ch);if($error=curl_error($ch)){

die($error);

}

curl_close($ch);return$response;

}

}