56 lines
2.0 KiB
PHP
56 lines
2.0 KiB
PHP
<?php
|
|
namespace app\util;
|
|
use app\exception\LogicException;
|
|
use app\service\util\CmbLifeUtils;
|
|
use GuzzleHttp\Client;
|
|
use GuzzleHttp\RequestOptions;
|
|
|
|
class CmbHttpUtils
|
|
{
|
|
/**
|
|
* post 提交
|
|
* @param $funcName
|
|
* @param $requestParams
|
|
* @return mixed|string
|
|
* @throws LogicException
|
|
*/
|
|
public static function doPost($funcName, $requestParams)
|
|
{
|
|
//添加公共参数
|
|
$cmbConfig = config('cmb');
|
|
$requestParams['mid'] = $cmbConfig['mid'];
|
|
$requestParams['aid'] = $cmbConfig['aid'];
|
|
$requestParams['date'] = date('YmdHis');
|
|
$requestParams['random'] = StringUtil::generateRandomString(32); // 随机字符串,
|
|
$requestParams['keyAlias'] = 'CO_PUB_KEY_SM2';
|
|
$requestParams['cmbKeyAlias'] = 'SM2_CMBLIFE'; //当 cmbKeyAlias 为 SM2_CMBLIFE 时,走国密算法进行验签
|
|
$sign = CmbLifeUtils::signForRequest($funcName, $requestParams, $cmbConfig['merchant_sm2_pri_key']);
|
|
$requestParams['sign'] = $sign;
|
|
$url = env('cmb.api_host') . $funcName . '.json';
|
|
$data = self::httpPost($url, $requestParams);
|
|
$res = \GuzzleHttp\json_decode($data, true);
|
|
// 校验返回报文
|
|
if (isset($res['sign'])) {
|
|
$verifyResult = CmbLifeUtils::verifyForResponse($res);
|
|
if ($verifyResult) { // 验签成功获取数据
|
|
if (isset($res['encryptBody'])) {
|
|
$res['decryptBody'] = CmbLifeUtils::decrypt((string)$res['encryptBody'], $cmbConfig['merchant_sm2_pri_key']);
|
|
} else {
|
|
return $res;
|
|
}
|
|
}
|
|
}
|
|
return $res;
|
|
}
|
|
private static function httpPost(string $uri, array $data)
|
|
{
|
|
$client = new Client([
|
|
'base_uri' => env('cmb.api_host'),
|
|
'timeout' => 50,
|
|
]);
|
|
$response = $client->request('POST', $uri, [
|
|
RequestOptions::FORM_PARAMS => $data,
|
|
]);
|
|
return $response->getBody()->getContents();
|
|
}
|
|
} |