Passed
Push — master ( a1271f...b759d6 )
by strays
01:56
created

BaseClient::postClient()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 2
Code Lines 0

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 0
nc 1
nop 2
dl 0
loc 2
rs 10
c 0
b 0
f 0
1
<?php
2
3
/*
4
 * This file is part of the strays/baidu-ai.
5
 *
6
 * (c) strays <[email protected]>
7
 *
8
 * This source file is subject to the MIT license that is bundled
9
 * with this source code in the file LICENSE.
10
 */
11
12
namespace Strays\BaiDuAi\Kernel;
13
14
use Strays\BaiDuAi\Kernel\Contracts\AccessTokenInterface;
15
use Strays\BaiDuAi\Kernel\Traits\HttpRequests;
16
17
class BaseClient
18
{
19
    use HttpRequests { request as performRequest; }
20
21
    /**
22
     * @var ServiceContainer
23
     */
24
    protected $app;
25
26
    /**
27
     * @var mixed|AccessTokenInterface
28
     */
29
    protected $accessToken;
30
31
    /**
32
     * @var array
33
     */
34
    protected static $defaults = [
35
        'charset' => 'UTF-8',
36
    ];
37
38
    /**
39
     * BaseClient constructor.
40
     * @param ServiceContainer $app
41
     * @param AccessTokenInterface|null $accessToken
42
     */
43
    public function __construct(ServiceContainer $app, AccessTokenInterface $accessToken = null)
44
    {
45
        $this->app = $app;
46
47
        $this->accessToken = $accessToken ?? $this->app['access_token'];
48
    }
49
50
    /**
51
     * @param string $url
52
     * @param array $data
53
     * @param array $query
54
     * @return string
55
     */
56
    public function httpPostJson(string $url, array $data = [], array $query = [])
57
    {
58
        return $this->request($this->getBaseUrl($url), 'POST', ['query' => $query, 'json' => $data]);
59
    }
60
61
    /**
62
     * @param string $url
63
     * @param array $data
64
     * @param array $query
65
     * @return string
66
     */
67
    public function httpPostFrom(string $url, array $data = [], array $query = [])
68
    {
69
        return $this->request($this->getBaseUrl($url), 'POST', ['query' => $query, 'from' => $data]);
70
    }
71
72
    /**
73
     * @param string $url
74
     * @param string $method
75
     * @param array $options
76
     * @return string
77
     */
78
    protected function request(string $url, string $method, array $options = [])
79
    {
80
        if (!$this->accessToken) {
81
            $this->getAccessToken();
82
        }
83
84
        $response = $this->performRequest($url, $method, $options);
85
86
        return $response->getBody()->getContents();
87
    }
88
89
    /**
90
     * @return mixed
91
     */
92
    protected function getAccessToken()
93
    {
94
        return $this->accessToken->applyToRequest();
95
    }
96
97
    /**
98
     * 组装根url
99
     * @param string $url
100
     * @return string
101
     */
102
    protected function getBaseUrl(string $url)
103
    {
104
        return $url.'?'.http_build_query(array_merge(self::$defaults, $this->getAccessToken()));
105
    }
106
}
107