接口对接中遇到aes-256-ecb加密的,整理一下大家一起分享一下。
其中appkey是对接方给的密钥。
这是aes-256-ecb加密方法
public function AESEncrypt($params, $appKey)
{
return openssl_encrypt($params, 'aes-256-ecb', $appKey);
}
这是aes-256-ecb解密方法
public function AESDecrypt($params, $appKey)
{
return openssl_decrypt($params, 'aes-256-ecb', $appKey);
}
这是例子:
public function getProductDetail($productId)
{
// 参数
$param = ['product_id' => $productId];
//拼接公共参数
$publicParamsReturn = $this->publicParams(json_encode($param, true), 'product/detail');
$data = $publicParamsReturn['params'];
//发起请求
$responseData = $this->initiateRequest($publicParamsReturn['url'], $data, 'getProductDetail', 'GET');
if (!$responseData) {
return false;
}
return $responseData;
}
这是例子中用到的拼接公共参数方法:
这个拼接方法不同的对接方规定都不一样,按自己的需求修改即可。
private function publicParams($params)
{
$apiConfig = config('common.api');
$this->appKey = $apiConfig['app_key'];
$data = [];
$publicParams['appid'] = $apiConfig['app_id'];
$publicParams['time'] = time();
$publicParams['os'] = $apiConfig['os'];
$publicParams['version'] = $apiConfig['version'];
$publicParams['data'] = $this->AESEncrypt($params, $this->appKey);
//处理参数
$paramsStr = '';
foreach ($publicParams as $key => $param) {
$paramsStr .= $key . '=' . $param . '&';
}
$paramsStr = rtrim($paramsStr, '&');
$data['params'] = $this->AESEncrypt($params, $this->appKey);
$data['url'] = $apiConfig['url'] . '?' . $paramsStr;
return $data;
}
这个是例子中用到的发起请求方法
private function initiateRequest($url, $data)
{
// 发起请求-其中的curl就不多解释了
$responseResult = $this->curlRequest($url, $data);
// aec解密
$responseResult = json_decode($responseResult, true);
if ($responseResult['code'] != 200) {
return false;
}
$responseData = $this->AESDecrypt($responseResult['data'], $this->appKey);
$responseData = json_decode($responseData, true);
return $responseData;
}