'http://47.110.250.177:20000/socialwork/v1/external/atandard', 'aes_key'=>'fbb416bfd0a242419e6528f2', 'aes_iv'=>'0f6ce46636264d66', 'ptcode'=>'751219023890354176', 'mer_rsa_private_key'=>"MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAK3DPc+pT0PywNkx". "7JWJLM66/apoUTEAUW/W7uOZbrb097GYUiTY0JDnFw6hUCCJEywSMfAQvUY5GP2a". "dCGu5Szw5F4qmE020dV1EywqREwGltWNbhcLNDvK5uHGxgk+b9RE7SrHBh+lziOE". "Ejt8i5YOezBy/e4rWLa5ELwj/6WTAgMBAAECgYBWjR3IxkjZS52LkjaJ9Z4AC1w2". "+WcXxVTLJIAxlkdzkmmeaITiHa0lwDXX77n9usl19koxjeT5iY9NIxYdgQRdn6z8". "+QJ5XSEJjUVwqFqPhtIzYNVRAZHWKxRjQZ4UtmCjvbeiAqLr+SDRBKLcobJLiXwy". "4//AllAa7SU42TAqgQJBAOJW+9N+Pw8PVozJOD4e4Qi4EFF1b5vcQ+jcYp+8LiJd". "g1X1COGOxvIVeK22tpwNXKUoPSkHQ82BPOmcqrOxllECQQDEiHREeR1/apxoP+5b". "KogvY0k1wT4TgVB2BLzm2P8eCYQr5GdUML8WzxRBk6CyU6WyqodhB7m4lf/m2nCf". "sfCjAkEAvfIPnjqJgwL1OGs5lvBlG+MUVrg+NMfR+d7RqYnMEaz2pjFgBaLDlK+u". "OeJnN2kDQdsWEJN3NERsMQT4QJsdMQJAe9hI/AUeU3aJDSCMQSKyIrp8HcWiKoRo". "gZZGu2muie0RPt91RZZaNDNV3mT69KTFW6seGETYAbt0QLMSGW/15QJAJ+s5FLIj". "GoU63WHza9xbCY/vLPFeiBXNH3qwPLp3ME5zbxS/LlCxTfG+Q+201iuVzSgHD98u". "IA1pU0FOUUfpiw==", 'mer_rsa_public_key'=>"MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCtwz3PqU9D8sDZMeyViSzOuv2q". "aFExAFFv1u7jmW629PexmFIk2NCQ5xcOoVAgiRMsEjHwEL1GORj9mnQhruUs8ORe". "KphNNtHVdRMsKkRMBpbVjW4XCzQ7yubhxsYJPm/URO0qxwYfpc4jhBI7fIuWDnsw". "cv3uK1i2uRC8I/+lkwIDAQAB", ]; public function sendEncodeData(array $json,$bussiness_code){ // $bussiness_code = $json['items']['bussiness_code']; // unset($json['items']['bussiness_code']); // echo "
";
$json_content = json_encode($json,JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE);
// $json_content = '{"items":{"payer_object_type":"customer","settlement_org_id":"635981601368444928","bill_month":1638288000,"name":"格式网络1","service_contract_no":"新服务合同543534543"}}';
//aes密钥
$aes_key = $this->config['aes_key'];
$aes_iv = $this->config['aes_iv'];
$private_rsa_key = $this->config['mer_rsa_private_key'];
// var_dump("AES 加密之前的数据 ");
// var_dump($json_content);
// echo "";
// echo "加密参数
";
// var_dump($json);
// echo ($json_content);
//aes 加密
$data['data'] = $this->aesEncode($json_content, $aes_key,$aes_iv);
// echo "AES 加密之后
";
// echo ( $data['data'] );
// var_dump( $private_rsa_key );
//用商户ras私钥签名
$data['sign'] = $this->sign($data['data'], $private_rsa_key);
// echo ("---数字签名---
");
// echo ($data['sign']);
$data['ptcode'] = $this->config['ptcode'];
$data['bussiness_code'] = $bussiness_code;
// echo "请求数据
";
// var_dump($data);
//发送请求
// echo json_encode($data,JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE);
$request_result = $this->httpPost(json_encode($data,JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE), $this->config['url']);
// echo "
";
// echo "响应数据
";
// var_dump($request_result);
// exit;
//解密返回报文
$result_json = json_decode($request_result,true);
//用aes密钥解密报文
$decode_content = $this->aesDecode($result_json['data'],$aes_key,$aes_iv);
// var_dump($decode_content);
return json_decode($decode_content,true);
//
}
// ras生成签名
protected function sign($data, $private_rsa_key)
{
$priKey = $private_rsa_key;
$res = "-----BEGIN PRIVATE KEY-----\n" .
wordwrap($priKey, 64, "\n", true) .
"\n-----END PRIVATE KEY-----";
// 生成密钥资源id
$private_key_resource_id = openssl_get_privatekey($res);
if (empty($private_key_resource_id))
{
throw new \Exception("秘钥不能为空");
}
$verify = openssl_sign($data, $signature, $private_key_resource_id, OPENSSL_ALGO_MD5);
openssl_free_key($private_key_resource_id);
if(!$verify){
throw new \Exception("签名失败");
}
// 二次Base64编码
return base64_encode($signature);
}
// AES加密
private function aesEncode($data, $aes_key,$iv){
$encrypt_data = openssl_encrypt($data, $this->method, $aes_key, OPENSSL_RAW_DATA, $iv);
return base64_encode($encrypt_data);
}
// AES解密
private function aesDecode($data,$aes_key,$iv){
$data = base64_decode($data);
return openssl_decrypt($data, $this->method, $aes_key, OPENSSL_RAW_DATA, $iv);
}
private function httpPost($data,$url){
$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/json'));
curl_setopt($ch,CURLOPT_TIMEOUT,600);
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_POST,true);
curl_setopt($ch,CURLOPT_POSTFIELDS,$data);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
if (strpos($url, 'https') !== false) {
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSLVERSION, 1);
}
$ret_data = trim(curl_exec($ch));
curl_close($ch);
return $ret_data;
}
}