Passed
Push — master ( 6e87c8...dbe0f9 )
by Carlos
03:15
created

Client::searchContact()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 18
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 10
CRAP Score 2

Importance

Changes 0
Metric Value
cc 2
eloc 9
nc 2
nop 6
dl 0
loc 18
ccs 10
cts 10
cp 1
crap 2
rs 9.9666
c 0
b 0
f 0
1
<?php
2
3
/*
4
 * This file is part of the overtrue/wechat.
5
 *
6
 * (c) overtrue <[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 EasyWeChat\OpenWork\Provider;
13
14
use EasyWeChat\Kernel\BaseClient;
15
use EasyWeChat\Kernel\ServiceContainer;
16
17
/**
18
 * Client.
19
 *
20
 * @author xiaomin <[email protected]>
21
 */
22
class Client extends BaseClient
23
{
24
    /**
25
     * Client constructor.
26
     *
27
     *
28
     * @param ServiceContainer $app
29
     */
30 12
    public function __construct(ServiceContainer $app)
31
    {
32 12
        parent::__construct($app, $app['provider_access_token']);
33 12
    }
34
35
    /**
36
     * 单点登录 - 获取登录的地址.
37
     *
38
     * @param string $redirectUri
39
     * @param string $userType
40
     * @param string $state
41
     *
42
     * @return string
43
     */
44 2
    public function getLoginUrl(string $redirectUri = '', string $userType = 'admin', string $state = '')
45
    {
46 2
        $redirectUri || $redirectUri = $this->app->config['redirect_uri_single'];
47 2
        $state || $state = rand();
48
        $params = [
49 2
            'appid' => $this->app['config']['corp_id'],
50 2
            'redirect_uri' => $redirectUri,
51 2
            'usertype' => $userType,
52 2
            'state' => $state,
53
        ];
54
55 2
        return 'https://open.work.weixin.qq.com/wwopen/sso/3rd_qrConnect?'.http_build_query($params);
56
    }
57
58
    /**
59
     * 单点登录 - 获取登录用户信息.
60
     *
61
     * @param string $authCode
62
     *
63
     * @return array|\EasyWeChat\Kernel\Support\Collection|object|\Psr\Http\Message\ResponseInterface|string
64
     *
65
     * @throws \EasyWeChat\Kernel\Exceptions\InvalidConfigException
66
     * @throws \GuzzleHttp\Exception\GuzzleException
67
     */
68 1
    public function getLoginInfo(string $authCode)
69
    {
70
        $params = [
71 1
            'auth_code' => $authCode,
72
        ];
73
74 1
        return $this->httpPostJson('cgi-bin/service/get_login_info', $params);
75
    }
76
77
    /**
78
     * 获取注册定制化URL.
79
     *
80
     * @param string $registerCode
81
     *
82
     * @return string
83
     *
84
     * @throws \EasyWeChat\Kernel\Exceptions\InvalidConfigException
85
     * @throws \GuzzleHttp\Exception\GuzzleException
86
     * @throws \EasyWeChat\Kernel\Exceptions\InvalidArgumentException
87
     */
88 2
    public function getRegisterUri(string $registerCode = '')
89
    {
90 2
        if (!$registerCode) {
91
            /** @var array $response */
92 1
            $response = $this->detectAndCastResponseToType($this->getRegisterCode(), 'array');
93
94 1
            $registerCode = $response['register_code'];
95
        }
96
97 2
        $params = ['register_code' => $registerCode];
98
99 2
        return 'https://open.work.weixin.qq.com/3rdservice/wework/register?'.http_build_query($params);
100
    }
101
102
    /**
103
     * 获取注册码.
104
     *
105
     * @param string $corpName
106
     * @param string $adminName
107
     * @param string $adminMobile
108
     * @param string $state
109
     *
110
     * @return array|\EasyWeChat\Kernel\Support\Collection|object|\Psr\Http\Message\ResponseInterface|string
111
     *
112
     * @throws \EasyWeChat\Kernel\Exceptions\InvalidConfigException
113
     * @throws \GuzzleHttp\Exception\GuzzleException
114
     */
115 2
    public function getRegisterCode(
116
        string $corpName = '',
117
        string $adminName = '',
118
        string $adminMobile = '',
119
        string $state = ''
120
    ) {
121 2
        $params = [];
122 2
        $params['template_id'] = $this->app['config']['reg_template_id'];
123 2
        !empty($corpName) && $params['corp_name'] = $corpName;
124 2
        !empty($adminName) && $params['admin_name'] = $adminName;
125 2
        !empty($adminMobile) && $params['admin_mobile'] = $adminMobile;
126 2
        !empty($state) && $params['state'] = $state;
127
128 2
        return $this->httpPostJson('cgi-bin/service/get_register_code', $params);
129
    }
130
131
    /**
132
     * 查询注册状态.
133
     *
134
     * Desc:该API用于查询企业注册状态,企业注册成功返回注册信息.
135
     *
136
     * @param string $registerCode
137
     *
138
     * @return array|\EasyWeChat\Kernel\Support\Collection|object|\Psr\Http\Message\ResponseInterface|string
139
     *
140
     * @throws \EasyWeChat\Kernel\Exceptions\InvalidConfigException
141
     * @throws \GuzzleHttp\Exception\GuzzleException
142
     */
143 1
    public function getRegisterInfo(string $registerCode)
144
    {
145
        $params = [
146 1
            'register_code' => $registerCode,
147
        ];
148
149 1
        return $this->httpPostJson('cgi-bin/service/get_register_info', $params);
150
    }
151
152
    /**
153
     * 设置授权应用可见范围.
154
     *
155
     * Desc:调用该接口前提是开启通讯录迁移,收到授权成功通知后可调用。
156
     *      企业注册初始化安装应用后,应用默认可见范围为根部门。
157
     *      如需修改应用可见范围,服务商可以调用该接口设置授权应用的可见范围。
158
     *      该接口只能使用注册完成回调事件或者查询注册状态返回的access_token。
159
     *      调用设置通讯录同步完成后或者access_token超过30分钟失效(即解除通讯录锁定状态)则不能继续调用该接口。
160
     *
161
     * @param string $accessToken
162
     * @param string $agentId
163
     * @param array  $allowUser
164
     * @param array  $allowParty
165
     * @param array  $allowTag
166
     *
167
     * @return array|\EasyWeChat\Kernel\Support\Collection|object|\Psr\Http\Message\ResponseInterface|string
168
     *
169
     * @throws \EasyWeChat\Kernel\Exceptions\InvalidConfigException
170
     */
171 1
    public function setAgentScope(
172
        string $accessToken,
173
        string $agentId,
174
        array $allowUser = [],
175
        array $allowParty = [],
176
        array $allowTag = []
177
    ) {
178
        $params = [
179 1
            'agentid' => $agentId,
180 1
            'allow_user' => $allowUser,
181 1
            'allow_party' => $allowParty,
182 1
            'allow_tag' => $allowTag,
183 1
            'access_token' => $accessToken,
184
        ];
185
186 1
        return $this->httpGet('cgi-bin/agent/set_scope', $params);
187
    }
188
189
    /**
190
     * 设置通讯录同步完成.
191
     *
192
     * Desc:该API用于设置通讯录同步完成,解除通讯录锁定状态,同时使通讯录迁移access_token失效。
193
     *
194
     * @param string $accessToken
195
     *
196
     * @return array|\EasyWeChat\Kernel\Support\Collection|object|\Psr\Http\Message\ResponseInterface|string
197
     *
198
     * @throws \EasyWeChat\Kernel\Exceptions\InvalidConfigException
199
     */
200 1
    public function contactSyncSuccess(string $accessToken)
201
    {
202 1
        $params = ['access_token' => $accessToken];
203
204 1
        return $this->httpGet('cgi-bin/sync/contact_sync_success', $params);
205
    }
206
207
    /**
208
     * 通讯录单个搜索
209
     *
210
     * @param string $queryWord
211
     * @param        $agentId
212
     * @param int    $offset
213
     * @param int    $limit
214
     * @param int    $queryType
215
     * @param null   $fullMatchField
0 ignored issues
show
Documentation Bug introduced by
Are you sure the doc-type for parameter $fullMatchField is correct as it would always require null to be passed?
Loading history...
216
     *
217
     * @return array|\EasyWeChat\Kernel\Support\Collection|object|\Psr\Http\Message\ResponseInterface|string
218
     * @throws \EasyWeChat\Kernel\Exceptions\InvalidConfigException
219
     * @throws \GuzzleHttp\Exception\GuzzleException
220
     */
221 1
    public function searchContact(
222
        string $queryWord,
223
        $agentId,
224
        int $offset = 0,
225
        int $limit = 50,
226
        int $queryType = 0,
227
        $fullMatchField = null
228
    ) {
229 1
        $params = [];
230 1
        $params['auth_corpid'] = $this->app['config']['corp_id'];
231 1
        $params['query_word'] = $queryWord;
232 1
        $params['query_type'] = $queryType;
233 1
        $params['agentid'] = $agentId;
234 1
        $params['offset'] = $offset;
235 1
        $params['limit'] = $limit;
236 1
        !empty($fullMatchField) && $params['full_match_field'] = $fullMatchField;
237
238 1
        return $this->httpPostJson('cgi-bin/service/contact/search', $params);
239
    }
240
}
241