PHP code example of doudian / hyperf-sdk
1. Go to this page and download the library: Download doudian/hyperf-sdk library . Choose the download type require .
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
doudian / hyperf-sdk example snippets
return [
'default' => [
'app_key' => env('DOUDIAN_APP_KEY', ''),
'app_secret' => env('DOUDIAN_APP_SECRET', ''),
'open_request_url' => env('DOUDIAN_OPEN_REQUEST_URL', 'https://openapi-fxg.jinritemai.com'),
'http_connect_timeout' => (int) env('DOUDIAN_HTTP_CONNECT_TIMEOUT', 3),
'http_read_timeout' => (int) env('DOUDIAN_HTTP_READ_TIMEOUT', 10),
'pool' => [
'min_connections' => 1,
'max_connections' => 10,
'connect_timeout' => 10.0,
'wait_timeout' => 3.0,
'heartbeat' => -1,
'max_idle_time' => 60.0,
],
],
// 支持多个应用配置
'shops' => [
'shop1' => [
'app_key' => 'your_app_key_1',
'app_secret' => 'your_app_secret_1',
// 其他配置项...
],
'shop2' => [
'app_key' => 'your_app_key_2',
'app_secret' => 'your_app_secret_2',
// 其他配置项...
],
],
];
namespace App\Controller;
use Doudian\Core\Contract\ClientFactoryInterface;
use Doudian\Core\AccessTokenBuilder;
use Doudian\Api\Product\ProductListRequest;
use Doudian\Api\Product\Param\ProductListParam;
use Hyperf\HttpServer\Annotation\Controller;
use Hyperf\HttpServer\Annotation\GetMapping;
#[Controller]
class DoudianController
{
public function __construct(
private ClientFactoryInterface $doudianClientFactory
) {}
#[GetMapping('/doudian/products')]
public function getProducts(): array
{
// 获取客户端(使用默认配置)
$client = $this->doudianClientFactory->create();
// 或者获取指定应用的客户端
// $client = $this->doudianClientFactory->get('shop1');
// 构建访问令牌
$accessToken = AccessTokenBuilder::parse('your_access_token');
// 构建请求
$request = new ProductListRequest();
$param = new ProductListParam();
$param->page = 0;
$param->size = 20;
$param->status = 1; // 上架状态
$request->setParam($param);
// 发起请求
$response = $client->request($request, $accessToken);
return ['data' => $response];
}
}
namespace App\Service;
use Doudian\Core\Contract\ClientFactoryInterface;
use Doudian\Core\AccessToken;
use Doudian\Api\Product\ProductListRequest;
use Doudian\Api\Product\Param\ProductListParam;
use Hyperf\Di\Annotation\Inject;
class DoudianService
{
#[Inject]
private ClientFactoryInterface $clientFactory;
public function getProductList(AccessToken $accessToken, int $page = 0, int $size = 10): object
{
$client = $this->clientFactory->create();
$request = new ProductListRequest();
$param = new ProductListParam();
$param->page = $page;
$param->size = $size;
$request->setParam($param);
return $client->request($request, $accessToken);
}
public function getShop1ProductList(AccessToken $accessToken): object
{
// 使用指定的应用配置
$client = $this->clientFactory->get('shop1');
$request = new ProductListRequest();
$param = new ProductListParam();
$param->page = 0;
$param->size = 100;
$request->setParam($param);
return $client->request($request, $accessToken);
}
}
use Doudian\Core\AccessTokenBuilder;
// 方式 1: 使用授权码获取访问令牌
$accessToken = AccessTokenBuilder::build(
'your_authorization_code',
AccessTokenBuilder::ACCESS_TOKEN_CODE
);
// 方式 2: 使用 shop_id 获取访问令牌(自用型应用)
$accessToken = AccessTokenBuilder::build(
'your_shop_id',
AccessTokenBuilder::ACCESS_TOKEN_SHOP_ID
);
// 方式 3: 使用指定应用配置
$accessToken = AccessTokenBuilder::build(
'your_authorization_code',
AccessTokenBuilder::ACCESS_TOKEN_CODE,
'shop1' // 应用配置名称
);
if ($accessToken->isSuccess()) {
echo "访问令牌: " . $accessToken->getAccessToken();
echo "有效期: " . $accessToken->getExpireIn() . " 秒";
echo "刷新令牌: " . $accessToken->getRefreshToken();
} else {
echo "获取失败: " . $accessToken->getMsg();
}
// 使用刷新令牌刷新访问令牌
$refreshToken = 'your_refresh_token';
$accessToken = AccessTokenBuilder::refresh($refreshToken);
// 或者使用 AccessToken 对象直接刷新
$accessToken = AccessTokenBuilder::refresh($existingAccessToken);
// 当你已经有访问令牌字符串时
$accessToken = AccessTokenBuilder::parse('your_access_token_string');
use Doudian\Api\Product\ProductListRequest;
use Doudian\Api\Product\Param\ProductListParam;
// 获取产品列表
$request = new ProductListRequest();
$param = new ProductListParam();
$param->page = 0;
$param->size = 20;
$param->status = 1; // 上架状态
$param->title = '搜索标题'; // 可选
$request->setParam($param);
$response = $client->request($request, $accessToken);
namespace App\Api\Custom;
use Doudian\Core\AbstractRequest;
class CustomApiRequest extends AbstractRequest
{
public function getUrlPath(): string
{
return '/your/custom/api/path';
}
}
// 使用
$request = new CustomApiRequest();
$param = (object) [
'your_param' => 'value',
'another_param' => 123,
];
$request->setParam($param);
$response = $client->request($request, $accessToken);
try {
$response = $client->request($request, $accessToken);
// 检查业务状态码
if (property_exists($response, 'code') && $response->code == 10000) {
// 成功
$data = $response->data;
} else {
// 业务错误
$errorMsg = $response->message ?? '未知错误';
throw new \Exception("API 调用失败: $errorMsg");
}
} catch (\GuzzleHttp\Exception\RequestException $e) {
// HTTP 请求异常
throw new \Exception("网络请求失败: " . $e->getMessage());
} catch (\Exception $e) {
// 其他异常
throw new \Exception("调用异常: " . $e->getMessage());
}
// 协程并发示例
use Hyperf\Coroutine\Parallel;
$parallel = new Parallel();
$parallel->add(function () use ($client, $accessToken) {
// 并发请求 1
$request1 = new ProductListRequest();
// ... 设置参数
return $client->request($request1, $accessToken);
});
$parallel->add(function () use ($client, $accessToken) {
// 并发请求 2
$request2 = new AnotherRequest();
// ... 设置参数
return $client->request($request2, $accessToken);
});
$results = $parallel->wait();
if (property_exists($response, 'code') && in_array($response->code, [40006, 40007])) {
// 令牌过期,尝试刷新
$newAccessToken = AccessTokenBuilder::refresh($refreshToken);
// 重新发起请求
}
$shop1Client = $this->clientFactory->get('shop1');
$shop2Client = $this->clientFactory->get('shop2');
// config/autoload/logger.php
'guzzle' => [
'handler' => [
'class' => \Monolog\Handler\StreamHandler::class,
'constructor' => [
'stream' => BASE_PATH . '/runtime/logs/guzzle.log',
'level' => \Monolog\Logger::DEBUG,
],
],
],
bash
php bin/hyperf.php vendor:publish doudian/hyperf-sdk