privkey = openssl_pkey_get_private($this->private_key);
$this->pubkey = openssl_pkey_get_public($this->public_key);
}
/**
* rsa公钥加密
*/
public function rsa_encrypt($data) {
if (openssl_public_encrypt($data, $encrypted, $this->pubkey)){
//由于加密后为二进制数据,为了展示和传输,base64_en一下,解密同
$data = base64_encode($encrypted);
}
else{
echo 'encrypt wrong';
}
return $data;
}
/**
* rsa私钥解密
*/
public function rsa_decrypt($data) {
if (openssl_private_decrypt(base64_decode($data), $decrypted, $this->privkey)){
$data = $decrypted;
}
else{
echo 'wrong decrypt';
}
return $data;
}
/**
* aes加密
*/
public function aes_encrypts($data,$randoms)
{
//php7.1 以上版本用法
return base64_encode(openssl_encrypt($data, "AES-192-CBC", $randoms, OPENSSL_RAW_DATA, self::IV));
}
/**
* aes解密
*/
public function aes_decrypts($data,$randoms)
{
//php7.1 以上版本用法
return openssl_decrypt(base64_decode($data), "AES-192-CBC", $randoms, OPENSSL_RAW_DATA, self::IV);
}
function encode($data){
$key = openssl_pkey_get_public(RSA_PUBLIC);
if (!$key) {
return('公钥不可用');
}
$_ret = openssl_public_encrypt($data, $crypted, $key);
if (!$_ret) {
return('加密失败,请检查RSA秘钥');
}
return base64_encode($crypted);
}
/**
* gettoken
* @param 无
* @return token string
*/
public function gettoken()
{
$arr['username']=self::USERNAME;
$arr['password']=self::PASSWORD;
$arr['sign']=md5($arr['username'].'&'.$arr['password']);
echo '
username:';
var_dump($arr);
$url=self::OSP_TOKEN_URL_TEST.'?username='.$arr['username'].'&password='.$arr['password'].'&sign='.$arr['sign'];
$strs=file_get_contents($url);
$re=json_decode($strs,true);
echo '
token:';
var_dump($re);
return $re['token'];
}
/**
*处理请求头信息
* initSecrityHead
* @param $radoms string
* @return $head_str array
*/
public function initSecrityHead($radoms) {
$ajaxran = $this->rsa_encrypt($radoms);
$head_str[] = "Content-type: application/json;charset=UTF-8";
$head_str[] = "ostype: android";
$head_str[] = "publicKey: ".self::PUK_KEY;
$head_str[] = "ajaxrandomcode: ".$ajaxran;
$head_str[] = "CRC: 123456";
$head_str[] = "appCode: JS0020000091";
return $head_str;
}
/**
*curl post 请求
* jsonpost
* @param $jsonbody array
* @param $url string
* @return array
*/
public function jsonpost($jsonbody,$url)
{
$random='12345678';
$randoms=$random.$random.$random;
$jsonbody_str = json_encode($jsonbody);
//通过AES对业务参数进行加密
$s = $this->aes_encrypts($jsonbody_str, $randoms);
$params['requestParams'] = $s;
$ch = curl_init();
$head_str = $this->initSecrityHead($random);
echo '
请求头:';
var_dump($head_str);
$params_str = json_encode($params);
echo '
json格式:';
var_dump($params_str);
// 返回 response_header, 该选项非常重要,如果不为 true, 只会获得响应的正文
// curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POSTFIELDS, $params_str);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, $head_str);
curl_setopt($ch, CURLINFO_HEADER_OUT, true);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch);
echo '
返回值:';
var_dump($httpCode);
echo '
';
curl_close($ch);
return $response;
}
//调用业务接口
public function qrynumber()
{
$token=$this->gettoken();
$arr['regionId']='025';
$arr['currentPage']='1';
$arr['pageSize']='30';
$url=self::BIZ_URL_TEST.'/fenxiao/openAcount/qryNumberNew?token='.$token;
echo '
请求url:';
echo $url;
$result= $this->jsonpost($arr,$url);
var_dump($result);
}
}
//调用demo执行
$test = new HttpGateWayDemo();
$test->qrynumber();