perf: 使用更先进的 hdk 方法创建 http 请求

This commit is contained in:
李东云
2023-09-19 17:26:55 +08:00
parent 7401c97860
commit 4b5e1740bc
4 changed files with 61 additions and 39 deletions

View File

@@ -0,0 +1,19 @@
<?php
declare(strict_types=1);
/**
* GoodsCollection.php@LuxPay
*
* @author 李东云 <Dongyun.Li@LuxCreo.Ai>
* Powered by PhpStorm
* Created on 2023/7/20
*/
namespace Singularity\HDK\Pay\Resource;
use Hyperf\Resource\Json\ResourceCollection;
final class GoodsCollection extends ResourceCollection
{
public ?string $wrap = null;
}

View File

@@ -14,25 +14,22 @@ namespace Singularity\HDK\Pay\Sdk;
use GuzzleHttp\Exception\GuzzleException;
use GuzzleHttp\RequestOptions;
use Hyperf\Codec\Json;
use Hyperf\Di\Annotation\Inject;
use Singularity\HDK\Core\Service\HttpRequestService;
use Singularity\HDK\Core\Http\RequestService;
use Singularity\HDK\Core\Http\RequestServiceFactory;
use Singularity\HDK\Pay\Resource\Goods;
use function Hyperf\Config\config;
final class GoodsRpc
{
public function __construct(private HttpRequestService $requestService, private ?string $baseUri = null)
private RequestService $requestService;
public function __construct(?string $baseUri = null)
{
$this->baseUri ??= config('payment.base_uri');
if (empty($this->baseUri)) {
throw new \InvalidArgumentException('payment.base_uri is required');
}
$this->requestService->setOptions(
[
'base_uri' => $this->baseUri,
RequestOptions::ALLOW_REDIRECTS => true,
]
);
$this->requestService = RequestServiceFactory::make([
'base_uri' => $baseUri ?? config('payment.base_uri'),
RequestOptions::ALLOW_REDIRECTS => true,
]);
}
/**
@@ -44,8 +41,6 @@ final class GoodsRpc
*/
public function find(int $goodsId, array $specifies): Goods
{
$url = $this->baseUri . '/rpc/v1/wechat/qrcode';
$response = $this->requestService->requestGet("/rpc/v1/goods/$goodsId/search", $specifies);
$content = $response->getBody()->getContents();
return Goods::make(Json::decode($content));

View File

@@ -16,7 +16,10 @@ use Hyperf\Di\Annotation\Inject;
use Lmc\HttpConstants\Header;
use Money\Money;
use Psr\Http\Message\RequestInterface;
use Singularity\HDK\Core\Service\HttpRequestService;
use Singularity\HDK\Core\Http\RequestService;
use Singularity\HDK\Core\Http\RequestServiceFactory;
use function Hyperf\Config\config;
@@ -29,9 +32,15 @@ use function Hyperf\Config\config;
*/
final class WechatRpc
{
#[Inject]
private HttpRequestService $requestService;
private RequestService $requestService;
private string $baseUrl;
public function __construct(?string $baseUrl = null)
{
$this->requestService = RequestServiceFactory::make();
$this->baseUrl = $baseUrl ?? config('payment.base_uri');
}
/**
* @param RequestInterface $request
@@ -49,7 +58,7 @@ final class WechatRpc
Money $money,
string $uid
): array {
$url = config('payment.base_uri') . '/rpc/v1/wechat/qrcode';
$url = $this->baseUrl . '/rpc/v1/wechat/qrcode';
$data = [
'service' => config('payment.sp_id'),
'amount' => (int)$money->getAmount(),

View File

@@ -11,26 +11,25 @@ declare(strict_types=1);
*/
use Singularity\HDK\Core\Service\HttpRequestService;
use GuzzleHttp\Exception\GuzzleException;
use Singularity\HDK\Pay\Resource\Goods;
use Singularity\HDK\Pay\Sdk\GoodsRpc;
/** @var GoodsRpc $service */
$service = \Hyperf\Support\make(
GoodsRpc::class,
[
'requestService' => \Hyperf\Support\make(HttpRequestService::class),
'baseUri' => 'http://localhost:9611'
]);
test('根据分类和商品名称获取到对应的 SKU', function () use ($service) {
$goods = $service->find(
1,
[
'lattice' => 'TYPE-0',
'precision' => 'high',
'mode' => 'gradient',
],
);
expect($goods)->toBeInstanceOf(Goods::class);
})->only();
test(
'根据分类和商品名称获取到对应的 SKU',
/**
* @throws GuzzleException
*/
function () {
$service = new GoodsRpc('http://localhost:9611');
$goods = $service->find(
1,
[
'lattice' => 'TYPE-0',
'precision' => 'high',
'mode' => 'gradient',
],
);
expect($goods)->toBeInstanceOf(Goods::class);
}
);