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();