cmbYouku_Api/app/util/CmbHttpUtils.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();
}
}