You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
payment/app/Helper/Efps/AbstractApi.php

72 lines
2.2 KiB
PHP

<?php
namespace App\Helper\Efps;
use App\Helper\Efps\Request\AbstractRequest;
use App\Helper\Log;
use GuzzleHttp\Client;
use GuzzleHttp\HandlerStack;
use Hyperf\Guzzle\CoroutineHandler;
abstract class AbstractApi
{
protected static $client;
public static function request(AbstractRequest $request) {
$params = $request->getParams();
try {
Log::info('url:' . $request->getUrl(), [], 'omipay');
$response = self::getClient()->post($request->getUrl(), [
'query' => $params
]);
Log::info('request:', $params, 'efps');
$body = (string)$response->getBody();
Log::info('response:' . $body, [], 'efps');
$result = json_decode($body, true);
if (empty($result)) {
$result = [
'returnCode' => '9999',
'returnMsg' => '返回数据异常',
];
}
return new Result($result);
} catch (\Exception $e) {
Log::error('error:' . $e->getMessage(), [], 'efps');
return new Result([
'returnCode' => '9998',
'returnMsg' => '网络错误',
]);
}
}
protected static function getClient(): Client {
if (!self::$client) {
self::$client = new Client([
'base_uri' => Config::get('base_url'),
'handler' => HandlerStack::create(new CoroutineHandler()),
'headers' => [
'Content-Type' => 'application/json',
],
'timeout' => 5,
'swoole' => [
'timeout' => 10,
'socket_buffer_size' => 1024 * 1024 * 2,
],
]);
}
return self::$client;
}
protected static function getHeaders($sign, $encKey, $timestamp)
{
return [
'x-efps-sign-no' => '',
'x-efps-sign-type' => 'RSAwithSHA256',
'x-efps-sign' => $sign,
'x-efps-timestamp' => $timestamp,
'x-efps-version' => '2.0',
'x-efps-enc-key' => $encKey,
];
}
}