Code Duplication    Length = 32-37 lines in 2 locations

src/Gateways/Alipay/MiniGateway.php 1 location

@@ 13-49 (lines=37) @@
10
use Yansongda\Pay\Gateways\Alipay;
11
use Yansongda\Supports\Collection;
12
13
class MiniGateway extends Gateway
14
{
15
    /**
16
     * Pay an order.
17
     *
18
     * @author xiaozan <[email protected]>
19
     *
20
     * @param string $endpoint
21
     *
22
     * @throws GatewayException
23
     * @throws InvalidArgumentException
24
     * @throws InvalidConfigException
25
     * @throws InvalidSignException
26
     *
27
     * @see https://docs.alipay.com/mini/introduce/pay
28
     */
29
    public function pay($endpoint, array $payload): Collection
30
    {
31
        $biz_array = json_decode($payload['biz_content'], true);
32
        if (empty($biz_array['buyer_id'])) {
33
            throw new InvalidArgumentException('buyer_id required');
34
        }
35
        if ((Alipay::MODE_SERVICE === $this->mode) && (!empty(Support::getInstance()->pid))) {
36
            $biz_array['extend_params'] = is_array($biz_array['extend_params']) ? array_merge(['sys_service_provider_id' => Support::getInstance()->pid], $biz_array['extend_params']) : ['sys_service_provider_id' => Support::getInstance()->pid];
37
        }
38
        $payload['biz_content'] = json_encode($biz_array);
39
        $payload['method'] = 'alipay.trade.create';
40
        $payload['sign'] = Support::generateSign($payload);
41
42
        Events::dispatch(new Events\PayStarted('Alipay', 'Mini', $endpoint, $payload));
43
44
        return Support::requestApi($payload);
45
    }
46
}
47

src/Gateways/Alipay/ScanGateway.php 1 location

@@ 13-44 (lines=32) @@
10
use Yansongda\Pay\Gateways\Alipay;
11
use Yansongda\Supports\Collection;
12
13
class ScanGateway extends Gateway
14
{
15
    /**
16
     * Pay an order.
17
     *
18
     * @author yansongda <[email protected]>
19
     *
20
     * @param string $endpoint
21
     *
22
     * @throws GatewayException
23
     * @throws InvalidArgumentException
24
     * @throws InvalidConfigException
25
     * @throws InvalidSignException
26
     */
27
    public function pay($endpoint, array $payload): Collection
28
    {
29
        $payload['method'] = 'alipay.trade.precreate';
30
        $biz_array = json_decode($payload['biz_content'], true);
31
        if ((Alipay::MODE_SERVICE === $this->mode) && (!empty(Support::getInstance()->pid))) {
32
            $biz_array['extend_params'] = is_array($biz_array['extend_params']) ? array_merge(['sys_service_provider_id' => Support::getInstance()->pid], $biz_array['extend_params']) : ['sys_service_provider_id' => Support::getInstance()->pid];
33
        }
34
        $payload['biz_content'] = json_encode(array_merge($biz_array, ['product_code' => '']));
35
        $payload['sign'] = Support::generateSign($payload);
36
37
        Events::dispatch(new Events\PayStarted('Alipay', 'Scan', $endpoint, $payload));
38
39
        return Support::requestApi($payload);
40
    }
41
}
42