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

View File

@@ -16,7 +16,10 @@ use Hyperf\Di\Annotation\Inject;
use Lmc\HttpConstants\Header; use Lmc\HttpConstants\Header;
use Money\Money; use Money\Money;
use Psr\Http\Message\RequestInterface; 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; use function Hyperf\Config\config;
@@ -29,9 +32,15 @@ use function Hyperf\Config\config;
*/ */
final class WechatRpc final class WechatRpc
{ {
#[Inject] private RequestService $requestService;
private HttpRequestService $requestService;
private string $baseUrl;
public function __construct(?string $baseUrl = null)
{
$this->requestService = RequestServiceFactory::make();
$this->baseUrl = $baseUrl ?? config('payment.base_uri');
}
/** /**
* @param RequestInterface $request * @param RequestInterface $request
@@ -49,7 +58,7 @@ final class WechatRpc
Money $money, Money $money,
string $uid string $uid
): array { ): array {
$url = config('payment.base_uri') . '/rpc/v1/wechat/qrcode'; $url = $this->baseUrl . '/rpc/v1/wechat/qrcode';
$data = [ $data = [
'service' => config('payment.sp_id'), 'service' => config('payment.sp_id'),
'amount' => (int)$money->getAmount(), '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\Resource\Goods;
use Singularity\HDK\Pay\Sdk\GoodsRpc; use Singularity\HDK\Pay\Sdk\GoodsRpc;
/** @var GoodsRpc $service */ test(
$service = \Hyperf\Support\make( '根据分类和商品名称获取到对应的 SKU',
GoodsRpc::class, /**
[ * @throws GuzzleException
'requestService' => \Hyperf\Support\make(HttpRequestService::class), */
'baseUri' => 'http://localhost:9611' function () {
]); $service = new GoodsRpc('http://localhost:9611');
$goods = $service->find(
test('根据分类和商品名称获取到对应的 SKU', function () use ($service) { 1,
$goods = $service->find( [
1, 'lattice' => 'TYPE-0',
[ 'precision' => 'high',
'lattice' => 'TYPE-0', 'mode' => 'gradient',
'precision' => 'high', ],
'mode' => 'gradient', );
], expect($goods)->toBeInstanceOf(Goods::class);
); }
expect($goods)->toBeInstanceOf(Goods::class); );
})->only();