Skip to content

Commit cb95bf1

Browse files
author
peter
committed
update
1 parent 2f07bdd commit cb95bf1

1 file changed

Lines changed: 64 additions & 4 deletions

File tree

README.md

Lines changed: 64 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919

2020
本项目设计时考虑了多商户多店铺的情况,所以大部分表都需要有`merchant_id``merchant_store_id`字段。项目初始化时请把相应配置填入`amazon_app`表和`amazon_app_region`表中。
2121

22-
2322
### 常用命令
2423
```
2524
# 刷新Token缓存
@@ -74,7 +73,7 @@ Queue类封装了Redis List的常用操作,包括:
7473
- 获取队列长度[len()](./app/Queue/Queue.php#L227)方法
7574

7675

77-
投递到队列中的数据需要是实现[QueueDataInterface](./app/Queue/Data/QueueDataInterface.php)接口的对象[AmazonReportDocumentActionData](./app/Queue/Data/AmazonReportDocumentActionData.php)
76+
投递到队列中的数据需要是实现[QueueDataInterface](./app/Queue/Data/QueueDataInterface.php)接口的对象[AmazonReportDocumentActionData](./app/Queue/Data/AmazonReportDocumentActionData.php)
7877
```php
7978

8079
$amazonGetReportDocumentData = new AmazonGetReportDocumentData();
@@ -97,7 +96,7 @@ Queue类封装了Redis List的常用操作,包括:
9796
[AmazonAccessTokenHash](./app/Util/RedisHash/AmazonAccessTokenHash.php)为例,继承[AbstractRedisHash](./app/Util/RedisHash/AbstractRedisHash.php)类,结合类的@proterty 属性,可以实现类访问属性的方式操作Redis Hash。
9897
```php
9998
$hash = make(AmazonAccessTokenHash::class, ['merchant_id' => $this->getMerchantId(), 'merchant_store_id' => $this->getMerchantStoreId(), 'region' => $region]);
100-
99+
101100
$hash->token;
102101
$hash->refreshToken;
103102
$hash->type;
@@ -109,7 +108,7 @@ Queue类封装了Redis List的常用操作,包括:
109108

110109

111110
4. 日志的封装
112-
111+
113112
- 控制台日志:[ConsoleLog](./app/Util/ConsoleLog.php)。实际实现的日志类为[StdoutLogger](./app/Util/StdoutLogger.php)
114113
主要的目的是输出日志到控制台,并附带时间数据,方便调试。
115114
日志格式为:`[时间] [日志级别] [日志内容] [上下文数据]`
@@ -137,3 +136,64 @@ Queue类封装了Redis List的常用操作,包括:
137136
$log->info('这是一个info日志');
138137

139138
```
139+
140+
5. AmazonApp的封装
141+
142+
[AmazonApp](./app/Util/AmazonApp.php)提供了tick(),tok(),tok2(),single(),each()等方法,其中
143+
144+
```php
145+
//tick() 需要传递merchant_id,merchant_store_id,callback函数这三个参数,匿名函数中回传的是AmazonAppModel对象
146+
147+
AmazonApp::tick($merchant_id,$merchant_store_id,function(AmazonAppModel $amazonAppCollection){
148+
//用于指定商户ID+指定店铺ID 下的一些操作。
149+
});
150+
151+
```
152+
[tick()暂无参考例子]()
153+
```php
154+
//tok() 需要传递merchant_id,merchant_store_id,callback函数这三个参数,匿名函数中回传的是AmazonSDK对象, $merchant_id商户ID, $merchant_store_id店铺ID, SellingPartnerSDK对象, AccessToken对象, $region当前地区, $marketplace_ids当前地区的站点ID集合。
155+
156+
AmazonApp::tok($merchant_id,$merchant_store_id,function($merchant_id, $merchant_store_id, SellingPartnerSDK $spApi, AccessToken $accessToken, $region, $marketplace_ids){
157+
//用于指定商户ID+指定店铺ID下所有的所有地区的操作。
158+
});
159+
160+
//例如,我需要请求刷新指定商户ID+指定店铺ID下所有地区的Pending状态订单,那么就可以使用这个方法。
161+
```
162+
[tok()参考例子](./app/Command/Crontab/Amazon/RefreshPendingOrder.php#L62)
163+
164+
```php
165+
//tok2() 需要传递merchant_id,merchant_store_id,region,callback函数这四个参数,匿名函数中回传的是AmazonSDK对象, $merchant_id商户ID, $merchant_store_id店铺ID, SellingPartnerSDK对象, AccessToken对象, $region当前地区, $marketplace_ids当前地区的站点ID集合。
166+
167+
AmazonApp::tok2($merchant_id, $merchant_store_id, $region, static function (AmazonSDK $amazonSDK, int $merchant_id, int $merchant_store_id, SellingPartnerSDK $sdk, AccessToken $accessToken, string $region, array $marketplace_ids) use ($amazon_order_ids) {
168+
//用于指定商户ID+指定店铺ID+指定地区下的操作。
169+
});
170+
171+
//例如,我需要请求拉取指定商户ID+指定店铺ID+指定地区下某些订单的订单项数据
172+
```
173+
[tok2()参考例子](./app/Command/Amazon/Order/GetOrderItems.php#L60)
174+
175+
```php
176+
//single() 和 tick()类似,但不需要指定**商户ID+指定店铺ID**,会遍历`amazon_app`表的数据并在callback匿名函数中传递AmazonAppModel对象。
177+
178+
AmazonApp::tick(function(AmazonAppModel $amazonAppCollection){
179+
//执行当前商户ID+当前店铺ID 下的一些操作。
180+
});
181+
```
182+
183+
[single()参考例子](./app/Command/Crontab/Amazon/RefreshAppToken.php#L51)
184+
185+
```php
186+
//each() 和 tok() 类似,但不需要指定**商户ID+指定店铺ID**,会遍历`amazon_app`表和`amazon_app_region`表,会自动构建好有效AmazonSDK对象和AccessToken对象,并在callback匿名函数中传递AmazonSDK对象, $merchant_id商户ID, $merchant_store_id店铺ID, SellingPartnerSDK对象, AccessToken对象, $region当前地区, $marketplace_ids当前地区的站点ID集合
187+
188+
AmazonApp::each(static function (AmazonSDK $amazonSDK, int $merchant_id, int $merchant_store_id, SellingPartnerSDK $sdk, AccessToken $accessToken, string $region, array $marketplace_ids) {
189+
//执行当前商户ID+当前店铺ID+当前地区 下请求SP-API操作
190+
});
191+
```
192+
[each()参考例子](./app/Command/Crontab/Amazon/AmazonReportCreate.php#L55)
193+
194+
195+
亚马逊应用存在一个店铺存在多个地区(每个地区的refresh_token值不一样)的情况,结合实际开发过程中来看,会有以下场景:
196+
1. 定时任务执行某些以店铺维度划分的任务,不需要考虑地区和市场和不需要请求SP-API,可以使用single()方法
197+
2. 定时任务执行某些以店铺维度划分的任务,需要考虑地区和市场和需要请求SP-API,可以使用each()方法
198+
3. 定时任务执行已知商户ID+店铺ID,且亚马逊应用下所有的地区同时需要请求SP-API,可以使用tick()方法
199+
4. 定时任务执行已知商户ID+店铺ID+地区,同时需要请求SP-API,可以使用tok()方法

0 commit comments

Comments
 (0)