PapayShortcut::orderPlugins()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 12
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 10
c 1
b 0
f 0
nc 1
nop 1
dl 0
loc 12
rs 9.9332
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Yansongda\Pay\Shortcut\Wechat;
6
7
use Yansongda\Artful\Contract\ShortcutInterface;
8
use Yansongda\Artful\Exception\InvalidParamsException;
9
use Yansongda\Artful\Plugin\AddPayloadBodyPlugin;
10
use Yansongda\Artful\Plugin\ParserPlugin;
11
use Yansongda\Artful\Plugin\StartPlugin;
12
use Yansongda\Pay\Exception\Exception;
13
use Yansongda\Pay\Plugin\Wechat\AddRadarPlugin;
14
use Yansongda\Pay\Plugin\Wechat\ResponsePlugin;
15
use Yansongda\Pay\Plugin\Wechat\V2\AddPayloadSignaturePlugin;
16
use Yansongda\Pay\Plugin\Wechat\V2\Papay\Direct\ApplyPlugin;
17
use Yansongda\Pay\Plugin\Wechat\V2\Papay\Direct\ContractOrderPlugin;
18
use Yansongda\Pay\Plugin\Wechat\V2\Papay\Direct\MiniOnlyContractPlugin;
19
use Yansongda\Pay\Plugin\Wechat\V2\Pay\App\InvokePlugin as AppInvokePlugin;
20
use Yansongda\Pay\Plugin\Wechat\V2\Pay\Mini\InvokePlugin as MiniInvokePlugin;
21
use Yansongda\Pay\Plugin\Wechat\V2\VerifySignaturePlugin;
22
use Yansongda\Supports\Str;
23
24
class PapayShortcut implements ShortcutInterface
25
{
26
    /**
27
     * @throws InvalidParamsException
28
     */
29
    public function getPlugins(array $params): array
30
    {
31
        $method = Str::camel($params['_action'] ?? 'default').'Plugins';
32
33
        if (method_exists($this, $method)) {
34
            return $this->{$method}($params);
35
        }
36
37
        throw new InvalidParamsException(Exception::PARAMS_SHORTCUT_ACTION_INVALID, "您所提供的 action 方法 [{$method}] 不支持,请参考文档或源码确认");
38
    }
39
40
    /**
41
     * @throws InvalidParamsException
42
     */
43
    protected function defaultPlugins(array $params): array
44
    {
45
        return $this->orderPlugins($params);
46
    }
47
48
    /**
49
     * @throws InvalidParamsException
50
     */
51
    protected function orderPlugins(array $params): array
52
    {
53
        return [
54
            StartPlugin::class,
55
            ContractOrderPlugin::class,
56
            AddPayloadSignaturePlugin::class,
57
            AddPayloadBodyPlugin::class,
58
            AddRadarPlugin::class,
59
            $this->getInvoke($params),
60
            VerifySignaturePlugin::class,
61
            ResponsePlugin::class,
62
            ParserPlugin::class,
63
        ];
64
    }
65
66
    /**
67
     * @throws InvalidParamsException
68
     */
69
    protected function contractPlugins(array $params): array
70
    {
71
        return match ($params['_type'] ?? 'default') {
72
            'mini' => [StartPlugin::class, MiniOnlyContractPlugin::class, AddPayloadSignaturePlugin::class],
73
            default => throw new InvalidParamsException(Exception::PARAMS_WECHAT_PAPAY_TYPE_NOT_SUPPORTED, '参数异常: 微信扣关服务纯签约,当前传递的 `_type` 类型不支持')
74
        };
75
    }
76
77
    protected function applyPlugins(): array
78
    {
79
        return [
80
            StartPlugin::class,
81
            ApplyPlugin::class,
82
            AddPayloadSignaturePlugin::class,
83
            AddPayloadBodyPlugin::class,
84
            AddRadarPlugin::class,
85
            VerifySignaturePlugin::class,
86
            ResponsePlugin::class,
87
            ParserPlugin::class,
88
        ];
89
    }
90
91
    /**
92
     * @throws InvalidParamsException
93
     */
94
    protected function getInvoke(array $params): string
95
    {
96
        return match ($params['_type'] ?? 'default') {
97
            'app' => AppInvokePlugin::class,
98
            'mini' => MiniInvokePlugin::class,
99
            default => throw new InvalidParamsException(Exception::PARAMS_WECHAT_PAPAY_TYPE_NOT_SUPPORTED, '参数异常: 微信扣关服务支付中签约,当前传递的 `_type` 类型不支持')
100
        };
101
    }
102
}
103