Compare commits

...

5 Commits

Author SHA1 Message Date
李东云
678881241f chore(release): 1.0.0-beta.4 2025-07-11 16:50:10 +08:00
李东云
8cbc81d3b7 feat(OrderRpc): 增加站点和环境参数并优化请求头
- 在 OrderRpc 类中添加了站点 (site) 和环境 (env) 参数
- 优化了请求头,包括接受语言、服务提供商 ID、站点和环境
- 更新了 composer.json 中的依赖版本
2025-07-11 16:49:47 +08:00
李东云
b669931e78 chore(release): 1.0.0-beta.3 2025-07-09 02:19:07 +08:00
李东云
ce1ad9561e feat(order): 兼容 v2 创建订单
- 新增 OrderRpc 类实现订单创建功能
- 新增 Order 资源类用于订单数据处理
- 更新 PaymentMethod 枚举,增加新的支付方式
- 修改 WebhooksNotificationHandler 特性,使用新的 Order 资源类
2025-07-09 02:17:54 +08:00
李东云
427b6cd7af feat(Order): 增加订单商品名称和数量字段
- 在 Order 类中添加了 $goodsName 和 $number 字段
- 更新了 toArray 方法,包含新的商品名称和数量字段
- 调整了类属性注释,明确了 amount 字段的类型
2024-12-09 16:19:33 +08:00
8 changed files with 1247 additions and 921 deletions

View File

@@ -1,4 +1,19 @@
# 版本更新日志
## [1.0.0-beta.4](http://124.126.16.154:8888/singularity/hdk-pay/compare/v1.0.0-beta.3...v1.0.0-beta.4) (2025-07-11)
### ✨ Features | 新功能
* **OrderRpc:** 增加站点和环境参数并优化请求头 ([8cbc81d](http://124.126.16.154:8888/singularity/hdk-pay/commit/8cbc81d3b70ca408fbe8e905200d6a89f22cda40))
## [1.0.0-beta.3](http://124.126.16.154:8888/singularity/hdk-pay/compare/v1.0.0-beta.2...v1.0.0-beta.3) (2025-07-08)
### ✨ Features | 新功能
* **order:** 兼容 v2 创建订单 ([ce1ad95](http://124.126.16.154:8888/singularity/hdk-pay/commit/ce1ad9561e0a780f670d766b8d4c841130a18697))
* **Order:** 增加订单商品名称和数量字段 ([427b6cd](http://124.126.16.154:8888/singularity/hdk-pay/commit/427b6cd7af1800c4c4d5ba685686c61cc6fbef52))
## [1.0.0-beta.2](http://124.126.16.154:8888/singularity/hdk-pay/compare/v1.0.0-beta.1...v1.0.0-beta.2) (2024-12-06)

View File

@@ -15,7 +15,7 @@
},
"require": {
"php": ">=8.2",
"composer/composer": ">=2.5.8",
"composer/composer": ">=2.7.7",
"hyperf/config": "~3.1.0",
"hyperf/constants": "3.1.*",
"hyperf/contract": "~3.1.0",
@@ -62,5 +62,5 @@
"url": "https://mirrors.aliyun.com/composer/"
}
},
"version": "1.0.0-beta.2"
"version": "1.0.0-beta.4"
}

1965
composer.lock generated

File diff suppressed because it is too large Load Diff

View File

@@ -11,9 +11,12 @@ namespace Singularity\HDK\Pay\Enum;
enum PaymentMethod: string
{
case Stripe = 'stripe';
// case Stripe = 'stripe';
// case WechatPay = 'wechat';
case WechatPay = 'wechat';
case StripeCheckout = 'stripe.checkout';
case StripeIntent = 'stripe.intent';
case WechatNative = 'wechat.native';
/**
* @return array<string, string>

View File

@@ -14,13 +14,15 @@ use Singularity\HDK\Pay\Enum\OrderStatus;
* Powered by PhpStorm
* Created on 2023/9/19
*
* @property-read string $orderNo
* @property-read string transactionId
* @property-read Money amount
* @property-read OrderStatus state
* @property-read string uid
* @property-read string payment
* @property-read string remark
* @property-read string $orderNo
* @property-read string $transactionId
* @property-read string $goodsName
* @property-read Money|array{'amount': int, 'currency': string} $amount
* @property-read OrderStatus $state
* @property-read string $uid
* @property-read string $payment
* @property-read string $remark
* @property-read int $number
*/
class Order extends JsonResource
{
@@ -32,11 +34,13 @@ class Order extends JsonResource
* @return array{
* orderNo: string,
* transactionId: string,
* goodsName: string,
* amount: Money,
* state: OrderStatus,
* uid: string,
* payment: string,
* remark: string
* remark: string,
* number: int
* }
*/
public function toArray(): array

72
src/Resource/V2/Order.php Normal file
View File

@@ -0,0 +1,72 @@
<?php
namespace Singularity\HDK\Pay\Resource\V2;
use App\Model\ServiceProvider;
use Carbon\Carbon;
use Hyperf\Resource\Json\JsonResource;
use Singularity\HDK\Pay\Enum\OrderStatus;
use stdClass;
/**
* App\Resource\ Order@LuxPay
*
* @author 李东云 <Dongyun.Li@LuxCreo.Ai>
* Powered by PhpStorm
* Created on 2023/9/19
*
* @property string $order_no 订单号
* @property OrderStatus $state 订单状态
* @property string $transaction_id 订单号
* @property string $uid 购买用户的 uid
* @property string $method 支付方式
* @property string $description 订单描述
* @property int $total_amount 金额,单位:分
* @property string $currency 币种,三个大写字母
* @property array $items 订单详情
* @property array $external 额外订单信息
* @property string $remark 订单备注
* @property array $notification 原始通知
* @property array more_details 支付信息
*/
class Order extends JsonResource
{
public ?string $wrap = null;
/**
* Transform the resource into an array.
*
* @return array{
* orderNo: string,
* transactionId: string,
* amount: array{amount: numeric, currency: string},
* state: string,
* uid: string,
* payment: string,
* remark: string
* }
*/
public function toArray(): array
{
return [
'order_no' => $this->order_no,
'state' => $this->state,
'transaction_id' => $this->transaction_id,
'uid' => $this->uid,
'method' => $this->method,
'description' => $this->description,
'total_amount' => $this->total_amount,
'currency' => $this->currency,
'items' => $this->items,
'external' => $this->external,
'remark' => $this->remark,
'notification' => $this->notification ?? new StdClass(),
'more_details' => $this->more_details,
];
}
public function __get($key)
{
return $this->resource->{$key} ?? $this->resource[$key];
}
}

83
src/Sdk/OrderRpc.php Normal file
View File

@@ -0,0 +1,83 @@
<?php
/**
* OrderRpc.php@Pay
*
* @author 李东云 <Dongyun.Li@LuxCreo.Ai>
* Powered by PhpStorm
* Created on 2025/7/9
*/
declare(strict_types=1);
namespace Singularity\HDK\Pay\Sdk;
use GuzzleHttp\Exception\GuzzleException;
use GuzzleHttp\RequestOptions;
use Hyperf\Codec\Json;
use Hyperf\Context\Context;
use Lmc\HttpConstants\Header;
use Singularity\HDK\Core\Enumerations\Sp\ServiceProviderConfiguration;
use Singularity\HDK\Core\Http\RequestService;
use Singularity\HDK\Core\Http\RequestServiceFactory;
use Singularity\HDK\Core\I18n\Enum\Languages;
use Singularity\HDK\Pay\Resource\V2\Order;
use Singularity\HDK\Pay\Trait\WebhooksNotificationHandler;
use function Hyperf\Config\config;
final class OrderRpc implements ServiceProviderConfiguration
{
use WebhooksNotificationHandler;
private RequestService $requestService;
public function __construct(?string $baseUrl = null)
{
$this->requestService = RequestServiceFactory::make([
'base_uri' => $baseUrl ?? config('payment.base_uri'),
RequestOptions::ALLOW_REDIRECTS => true,
]);
}
/**
* @param array $data
* @param string|null $serviceProvider
* @param Languages|null $locale
* @param string|null $site
* @param string|null $env
* @return Order
* @throws GuzzleException
*/
public function create(
array $data,
?string $serviceProvider = null,
?Languages $locale = null,
?string $site = null,
?string $env = null,
): Order {
$data['method'] = 'stripe.checkout';
$response = $this->requestService->requestPost(
url: '/rpc/v2/orders',
data: $data,
options: [
'headers' => [
Header::CONTENT_TYPE => 'application/json',
Header::ACCEPT_LANGUAGE => $locale?->value ?? config('translation.locale', Languages::EN),
'X-SP-ID' => $serviceProvider ?? Context::get('sp') ?? config('app_name'),
'X-SITE' => match (strtoupper(trim($site ?? config('site', self::NA)))) {
'CN' => self::CN,
default => self::NA,
},
'X-ENV' => match (strtolower(trim($env ?? config('app_env', self::DEVELOPMENT)))) {
'prod', 'production' => self::PRODUCTION,
default => self::DEVELOPMENT
},
],
],
);
$content = $response->getBody()->getContents();
$result = Json::decode($content);
return new Order($result);
}
}

View File

@@ -10,7 +10,7 @@
namespace Singularity\HDK\Pay\Trait;
use Hyperf\HttpServer\Contract\RequestInterface;
use Singularity\HDK\Pay\Resource\Order;
use Singularity\HDK\Pay\Resource\V2\Order;
/**
* Singularity\HDK\Pay\Trait\Webhooks@Pay