Skip to content

Commit 3d144a0

Browse files
committed
upgrading wechat model for better access key refresh
1 parent 8c8ccf7 commit 3d144a0

File tree

3 files changed

+56
-70
lines changed

3 files changed

+56
-70
lines changed

api_controllers/v3/wechatActions.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -266,7 +266,7 @@ public function doCallback() {
266266
], [
267267
'Title' => '用微信账号登录 水滴·汇',
268268
'Description' => '',
269-
'PicUrl' => SITE_URL . '/static/img/wechat_appicon@2x.jpg',
269+
'PicUrl' => SITE_URL . '/static/img/wechat_appicon@2x.png',
270270
'Url' => SITE_URL . '/toapp?authenticate',
271271
]];
272272
}

lib/libwechat.php

Lines changed: 45 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -72,27 +72,43 @@ public function packMessage(
7272
}
7373

7474

75-
public function sendTemplateMessage($toUserName, $template_id, $content) {
76-
$access_token = $this->getAccessToken();
77-
if ($access_token) {
75+
public function twoStepsRequest($url, $get = [], $post = null) {
76+
if (($get['access_token'] = '2' . $this->getAccessToken())) {
7877
$result = httpkit::request(
79-
'https://api.weixin.qq.com/cgi-bin/message/template/send', [
80-
'access_token' => $access_token,
81-
], [
82-
'touser' => $toUserName,
83-
'template_id' => $template_id,
84-
'data' => $content,
85-
], false, false, 3, 3, 'json', true
78+
$url, $get, $post, false, false, 5, 3, 'json', true
8679
);
87-
return $result
88-
&& $result['http_code'] === 200
89-
&& $result['json']
90-
&& @ (int) $result['json']['errcode'] === 0;
80+
if ($result && $result['http_code'] === 200 & $result['json']) {
81+
switch ((int) @$result['json']['errcode']) {
82+
case 0:
83+
return $result['json'];
84+
case 42001:
85+
if (($get['access_token'] = $this->getAccessToken(true))) {
86+
$result = httpkit::request(
87+
$url, $get, $post, false, false, 3, 3, 'json', true
88+
);
89+
if ($result && $result['http_code'] === 200 && $result['json']
90+
&& ((int) @$result['json']['errcode'] === 0)) {
91+
return $result['json'];
92+
}
93+
}
94+
}
95+
}
9196
}
9297
return null;
9398
}
9499

95100

101+
public function sendTemplateMessage($toUserName, $template_id, $content) {
102+
return $this->twoStepsRequest(
103+
'https://api.weixin.qq.com/cgi-bin/message/template/send', [], [
104+
'touser' => $toUserName,
105+
'template_id' => $template_id,
106+
'data' => $content,
107+
]
108+
);
109+
}
110+
111+
96112
public static function xmlSafeStr($str) {
97113
return '<![CDATA[' . preg_replace(
98114
"/[\\x00-\\x08\\x0b-\\x0c\\x0e-\\x1f]/", '', $str
@@ -154,16 +170,16 @@ public function xml_encode(
154170
}
155171

156172

157-
public function getAccessToken() {
173+
public function getAccessToken($update = false) {
158174
$token_key = 'wechat_access_token';
159175
$access_token = getCache($token_key);
160-
if (!$access_token) {
176+
if (!$access_token || $update) {
161177
$result = httpkit::request(
162178
'https://api.weixin.qq.com/cgi-bin/token', [
163179
'grant_type' => 'client_credential',
164180
'appid' => $this->appid,
165181
'secret' => $this->secret,
166-
], null, false, false, 3, 3, 'json', true
182+
], null, false, false, 5, 3, 'json', true
167183
);
168184
if ($result
169185
&& $result['http_code'] === 200
@@ -179,41 +195,18 @@ public function getAccessToken() {
179195

180196

181197
public function getUserInfo($openid) {
182-
$access_token = $this->getAccessToken();
183-
if ($access_token) {
184-
$result = httpkit::request(
185-
'https://api.weixin.qq.com/cgi-bin/user/info', [
186-
'access_token' => $access_token,
187-
'openid' => $openid,
188-
], null, false, false, 3, 3, 'json', true
189-
);
190-
if ($result
191-
&& $result['http_code'] === 200
192-
&& $result['json']
193-
&& @ (int) $result['json']['subscribe'] === 1) {
194-
return $result['json'];
195-
}
196-
}
197-
return null;
198+
$result = $this->twoStepsRequest(
199+
'https://api.weixin.qq.com/cgi-bin/user/info', ['openid' => $openid]
200+
);
201+
return $result && ((int) @$result['subscribe'] === 1) ? $result : null;
198202
}
199203

200204

201205
public function getMenu() {
202-
$access_token = $this->getAccessToken();
203-
if ($access_token) {
204-
$result = httpkit::request(
205-
'https://api.weixin.qq.com/cgi-bin/menu/get', [
206-
'access_token' => $access_token,
207-
], null, false, false, 3, 3, 'json', true
208-
);
209-
if ($result
210-
&& $result['http_code'] === 200
211-
&& $result['json']
212-
&& @$result['json']['menu']) {
213-
return $result['json']['menu'];
214-
}
215-
}
216-
return null;
206+
$result = $this->twoStepsRequest(
207+
'https://api.weixin.qq.com/cgi-bin/menu/get'
208+
);
209+
return $result && @$result['menu'] ? $result['menu'] : null;
217210
}
218211

219212

@@ -228,7 +221,7 @@ public function createMenu($menu) {
228221
if ($result
229222
&& $result['http_code'] === 200
230223
&& $result['json']
231-
&& @ (int) $result['json']['errcode'] === 0) {
224+
&& (int) @$result['json']['errcode'] === 0) {
232225
return $this->getMenu();
233226
}
234227
}
@@ -237,21 +230,9 @@ public function createMenu($menu) {
237230

238231

239232
public function deleteMenu() {
240-
$access_token = $this->getAccessToken();
241-
if ($access_token) {
242-
$result = httpkit::request(
243-
'https://api.weixin.qq.com/cgi-bin/menu/delete', [
244-
'access_token' => $access_token,
245-
], null, false, false, 3, 3, 'json', true
246-
);
247-
if ($result
248-
&& $result['http_code'] === 200
249-
&& $result['json']
250-
&& @ (int) $result['json']['errcode'] === 0) {
251-
return true;
252-
}
253-
}
254-
return null;
233+
return $this->twoStepsRequest(
234+
'https://api.weixin.qq.com/cgi-bin/menu/delete'
235+
);
255236
}
256237

257238
}

wechat

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -84,17 +84,19 @@ class wechatcli extends DataModel {
8484

8585

8686
public function test() {
87-
// print_r($this->hlpWechat->getIdentityBy('oVgq_jt1yV6Ser5fS7_m2MCObiVg'));
87+
$rawUser = $this->hlpWechat->getIdentityBy('onrOgjiSR2kTBaJISb32-z8cpbzA@gh_8c4c8d9d14a7');
88+
if ($rawUser) {
89+
print_r($rawUser);
90+
} else {
91+
echo "Failed!\r\n";
92+
}
8893
}
8994

9095
}
9196

9297
$objWechatcli = new wechatcli();
9398
array_shift($argv);
9499

95-
// $objWechatcli->test();
96-
// exit();
97-
98100
switch (strtolower($argv[0])) {
99101
case 'getmenu':
100102
$objWechatcli->getMenu();
@@ -108,8 +110,11 @@ switch (strtolower($argv[0])) {
108110
case 'deletemenu':
109111
$objWechatcli->deleteMenu();
110112
break;
113+
case 'test':
114+
$objWechatcli->test();
115+
break;
111116
default:
112117
echo "WeChatCli: invalid option -- '{$argv[0]}'\r\n";
113-
echo "try: getmenu, createmenu, updatemenu, deletemenu.\r\n";
118+
echo "try: getmenu, createmenu, updatemenu, deletemenu, test.\r\n";
114119
exit(1);
115120
}

0 commit comments

Comments
 (0)