TiktokShop.php
4.0 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
<?php
namespace Lackoxygen\TiktokShop;
use Illuminate\Support\Arr;
use Lackoxygen\TiktokShop\Attribute\Config;
use Lackoxygen\TiktokShop\Passage\PassageProxy;
use Lackoxygen\TiktokShop\Passage\Verify;
/**
* @method Verify verify()
* @method Passage\Pigeon\PigeonInterface pigeon()
* @method Passage\Sms\SmsInterface sms()
* @method Passage\SupplyChain\SupplyChainInterface supplyChain()
* @method Passage\Topup\TopupInterface topup()
* @method Passage\OpenCloud\OpenCloudInterface openCloud()
* @method Passage\Btas\BtasInterface btas()
* @method Passage\Recycle\RecycleInterface recycle()
* @method Passage\Member\MemberInterface member()
* @method Passage\Buyin\BuyinInterface buyin()
* @method Passage\Yunc\YuncInterface yunc()
* @method Passage\OrderCode\OrderCodeInterface orderCode()
* @method Passage\Coupons\CouponsInterface coupons()
* @method Passage\Crossborder\CrossborderInterface crossborder()
* @method Passage\Iop\IopInterface iop()
* @method Passage\Antispam\AntispamInterface antispam()
* @method Passage\Token\TokenInterface token()
* @method Passage\Order\OrderInterface order()
* @method Passage\AfterSale\AfterSaleInterface afterSale()
* @method Passage\Logistics\LogisticsInterface logistics()
* @method Passage\Warehouse\WarehouseInterface warehouse()
* @method Passage\Product\ProductInterface product()
* @method Passage\Material\MaterialInterface material()
* @method Passage\Address\AddressInterface address()
*/
class TiktokShop
{
/**
* @var Config
*/
protected Config $config;
/**
* @var array|string[]
*/
protected array $fixedPassages = [
'verify' => Verify::class
];
/**
* @param $options
*/
public function __construct($options = null)
{
if (!$options instanceof Config) {
if (is_array($options)) {
$config = static::newConfig($options);
goto next;
}
$app = $options ?: 'default';
$config = \config(TiktokShopProvider::$name . '.' . $app);
if (!is_array($config)) {
throw new \InvalidArgumentException('config file not found');
}
$config = static::newConfig($config);
} else {
$config = $options;
}
next:
$this->config = $config;
}
/**
* @param array $options
*
* @return Config
*/
public static function newConfig(array $options): Config
{
return new Config(
Arr::get($options, 'app_key'),
Arr::get($options, 'app_secret'),
Arr::get($options, 'base_uri'),
(float)Arr::get($options, 'timeout'),
Arr::get($options, 'enable_mock')
);
}
/**
* @param $options
*
* @return TiktokShop
*/
public static function use($options = null): TiktokShop
{
return new static($options);
}
/**
* @param string $accessToken
*
* @return $this
*/
public function setAccessToken(string $accessToken): TiktokShop
{
$this->config->setAccessToken($accessToken);
return $this;
}
/**
* @param string $name
* @return string
*/
private function guide(string $name): string
{
if (isset($this->fixedPassages[$name])) {
return $this->fixedPassages[$name];
}
$name = ucfirst($name);
$target = '\Lackoxygen\TiktokShop\Passage\\' . $name . '\\' . $name;
if (!class_exists($target)) {
throw new \OverflowException('class file(' . $target . ') not found');
}
return $target;
}
/**
* @param $name
* @param array $arguments
*
* @return PassageProxy
*/
public function __call($name, array $arguments = [])
{
$passage = $this->guide($name);
try {
return PassageProxy::proxy($passage, $this->config);
} finally {
register_shutdown_function(function () {
$this->config->setAccessToken('');
});
}
}
}