|
|
@@ -174,10 +174,9 @@ class Wechat
|
|
|
// 验证微信信息是否存在
|
|
|
$cacheKey = 'updateWeixinInfo:' . $openid;
|
|
|
$updateCheck = cache($cacheKey);
|
|
|
- $nickname = isset($wxInfo['nickname']) ? $wxInfo['nickname'] : '';
|
|
|
$wxData = [
|
|
|
'openid' => $openid,
|
|
|
- 'nickname' => $nickname,
|
|
|
+ 'nickname' => isset($wxInfo['nickname']) ? $wxInfo['nickname'] : '',
|
|
|
'headimgurl' => isset($wxInfo['headimgurl']) ? $wxInfo['headimgurl'] : '',
|
|
|
'sex' => isset($wxInfo['sex']) ? $wxInfo['sex'] : 0,
|
|
|
'country' => isset($wxInfo['country']) ? $wxInfo['country'] : '',
|
|
|
@@ -193,7 +192,7 @@ class Wechat
|
|
|
$expire = config('weixin.update_expire');
|
|
|
$expire = $expire ? $expire : 3 * 3600;
|
|
|
cache($cacheKey, date('Y-m-d H:i:s'), ['expire' => $expire]);
|
|
|
- } else if (empty($updateCheck) && $nickname) {
|
|
|
+ } else if (empty($updateCheck)) {
|
|
|
// 更新微信用户信息
|
|
|
db('fans')->where(['openid' => $openid])->update($wxData);
|
|
|
|
|
|
@@ -212,11 +211,10 @@ class Wechat
|
|
|
*/
|
|
|
private static function wxInit()
|
|
|
{
|
|
|
- $info = Wechat::getWxInfo();
|
|
|
- $openid = isset($info['openid']) ? $info['openid'] : '';
|
|
|
- $userInfo = Wechat::getUserInfo($openid);
|
|
|
- $wxInfo = $userInfo? $userInfo : $info;
|
|
|
+ $wxInfo = Wechat::getWxInfo();
|
|
|
$openid = isset($wxInfo['openid']) ? $wxInfo['openid'] : '';
|
|
|
+ $userInfo = Wechat::getUserInfo($openid);
|
|
|
+ $wxInfo = $userInfo? $userInfo : $wxInfo;
|
|
|
$cacheKey = 'weixin:init:'.get_client_ip().'_'.$openid;
|
|
|
if (empty($wxInfo) || empty($openid)) {
|
|
|
if(PRedis::get($cacheKey)<10){
|
|
|
@@ -236,9 +234,9 @@ class Wechat
|
|
|
$updateCheck = cache($cacheKey);
|
|
|
$wxData = [
|
|
|
'openid' => $openid,
|
|
|
- 'nickname' => isset($info['nickname']) ? $info['nickname'] : '',
|
|
|
- 'headimgurl' => isset($info['headimgurl']) ? $info['headimgurl'] : '',
|
|
|
- 'sex' => isset($info['sex']) ? $info['sex'] : 0,
|
|
|
+ 'nickname' => isset($wxInfo['nickname']) ? $wxInfo['nickname'] : '',
|
|
|
+ 'headimgurl' => isset($wxInfo['headimgurl']) ? $wxInfo['headimgurl'] : '',
|
|
|
+ 'sex' => isset($wxInfo['sex']) ? $wxInfo['sex'] : 0,
|
|
|
'country' => isset($wxInfo['country']) ? $wxInfo['country'] : '',
|
|
|
'province' => isset($wxInfo['province']) ? $wxInfo['province'] : '',
|
|
|
'city' => isset($wxInfo['city']) ? $wxInfo['city'] : '',
|
|
|
@@ -318,25 +316,19 @@ class Wechat
|
|
|
}
|
|
|
|
|
|
// 更新微信用户信息
|
|
|
- if($wxData['nickname']){
|
|
|
- db('fans')->where(['openid' => $openid])->update($wxData);
|
|
|
-
|
|
|
- // 每3个小时才更新一次微信信息
|
|
|
- $expire = config('weixin.update_expire');
|
|
|
- $expire = $expire ? $expire : 3 * 3600;
|
|
|
- cache($cacheKey, date('Y-m-d H:i:s'), ['expire' => $expire]);
|
|
|
- }
|
|
|
+ db('fans')->where(['openid' => $openid])->update($wxData);
|
|
|
|
|
|
+ // 每3个小时才更新一次微信信息
|
|
|
+ $expire = config('weixin.update_expire');
|
|
|
+ $expire = $expire ? $expire : 3 * 3600;
|
|
|
+ cache($cacheKey, date('Y-m-d H:i:s'), ['expire' => $expire]);
|
|
|
}else{
|
|
|
$updateData = [
|
|
|
+ 'is_follow'=> isset($wxInfo['subscribe']) ? intval($wxInfo['subscribe']) : 0,
|
|
|
'last_login_time'=> time(),
|
|
|
'last_login_ip'=> get_client_ip(),
|
|
|
'updated_at'=> date('Y-m-d H:i:s')
|
|
|
];
|
|
|
-
|
|
|
- if(isset($wxInfo['subscribe'])){
|
|
|
- $updateData['is_follow'] = intval($wxInfo['subscribe']);
|
|
|
- }
|
|
|
db('user')->where(['openid' => $openid])
|
|
|
->where('user_status','>=', 0)
|
|
|
->update($updateData);
|
|
|
@@ -374,15 +366,15 @@ class Wechat
|
|
|
$countKey = "token:count";
|
|
|
$requestCount = PRedis::get($countKey);
|
|
|
if($type == 'accessToken'){
|
|
|
- if($requestCount >=500){
|
|
|
+ if($requestCount >=5000){
|
|
|
PRedis::set("token:error", ['error'=> 'token请求次数超出警告值8000:'.date('Y-m-d H:i:s'),'date'=> date('Y-m-d H:i:s')], 7 * 24 *3600);
|
|
|
return false;
|
|
|
}
|
|
|
- PRedis::set($countKey, $requestCount+1, 86400);
|
|
|
+ PRedis::set($countKey, $requestCount+1, 20*3600);
|
|
|
}
|
|
|
|
|
|
$tokenData = httpRequest($url);
|
|
|
- PRedis::set("token:result:{$type}", $tokenData, 86400);
|
|
|
+ PRedis::set("token:result:{$type}", $tokenData, 3600);
|
|
|
$code = isset($tokenData['errcode']) ? $tokenData['errcode'] : '';
|
|
|
if ($code || empty($tokenData)) {
|
|
|
return $tokenData;
|
|
|
@@ -396,13 +388,13 @@ class Wechat
|
|
|
'date' => date('Y-m-d H:i:s'),
|
|
|
'expire' => $type == 'tempToken' ? time() + 7000 : time() + 7000,
|
|
|
];
|
|
|
- PRedis::set($cacheKey, $tokenData, 7000);
|
|
|
+ PRedis::set($cacheKey, $tokenData, 7200);
|
|
|
}
|
|
|
|
|
|
$expire = isset($tokenData['expire']) ? intval($tokenData['expire']) : 0;
|
|
|
$token = isset($tokenData['token']) ? trim($tokenData['token']) : '';
|
|
|
- if (($expire && $expire < time()) || empty($token) && $refresh == false) {
|
|
|
- // $tokenData = Wechat::getAccessToken($key, $type, true);
|
|
|
+ if (($expire && $expire < time()) || empty($token)) {
|
|
|
+ $tokenData = Wechat::getAccessToken($key, $type, true);
|
|
|
}
|
|
|
|
|
|
if ($key) {
|
|
|
@@ -458,11 +450,10 @@ class Wechat
|
|
|
$result = httpRequest($url);
|
|
|
$errcode = isset($result['errcode']) ? $result['errcode'] : '';
|
|
|
$cacheCount = PRedis::get('weixin:getWxInfo:' . $key);
|
|
|
- $cacheCount = $cacheCount? $cacheCount : 0;
|
|
|
- if (empty($result) || ($errcode && $cacheCount <= 3)) {
|
|
|
+ if (empty($result) || ($errcode && $cacheCount <= 5)) {
|
|
|
// 更新TOKEN重新获取
|
|
|
PRedis::set('weixin:getWxInfo:' . $key, $cacheCount + 1, 600);
|
|
|
- $result = Wechat::getWxInfo($curOpenid, $errcode ? true : false);
|
|
|
+ //$result = Wechat::getWxInfo($curOpenid, $errcode ? true : false);
|
|
|
}
|
|
|
PRedis::set('weixin:wxInfo:'.$key, $result, 600);
|
|
|
if ($saveData && empty($errcode)) {
|
|
|
@@ -508,7 +499,6 @@ class Wechat
|
|
|
$result = httpRequest($url);
|
|
|
$errcode = isset($result['errcode']) ? $result['errcode'] : '';
|
|
|
$cacheCount = PRedis::get('weixin:getInfo:' . $key);
|
|
|
- $cacheCount = $cacheCount? $cacheCount : 0;
|
|
|
if (empty($result) || ($errcode && $cacheCount <= 3)) {
|
|
|
// 更新TOKEN重新获取
|
|
|
PRedis::set('weixin:getInfo:' . $key, $cacheCount + 1, 600);
|
|
|
@@ -574,7 +564,7 @@ class Wechat
|
|
|
$ticket = Wechat::getTicket(true);
|
|
|
}
|
|
|
|
|
|
- if (empty($ticket) && $refreshToken == false) {
|
|
|
+ if (empty($ticket)) {
|
|
|
$ticket = Wechat::getTicket(true, true);
|
|
|
}
|
|
|
|
|
|
@@ -1204,7 +1194,6 @@ class Wechat
|
|
|
if ($lock) {
|
|
|
return false;
|
|
|
}
|
|
|
- $wxInfo = [];
|
|
|
PRedis::set($lockKey, $postObj, 8);
|
|
|
PRedis::set('weixin:events:'.$openid,$postObj, 3600);
|
|
|
if ($event && $eventKey) {
|
|
|
@@ -1266,11 +1255,7 @@ class Wechat
|
|
|
|
|
|
|
|
|
$siteInfo = cmf_get_site_info();
|
|
|
- $nickname = isset($wxInfo['nickname']) ? $wxInfo['nickname'] : '';
|
|
|
- if(empty($nickname)){
|
|
|
- $info = Fans::getWxInfo($openid);
|
|
|
- $nickname = isset($info['nickname']) && $info['nickname']? $info['nickname'] : '拾光用户';
|
|
|
- }
|
|
|
+ $nickname = isset($wxInfo['nickname']) && $wxInfo['nickname']? $wxInfo['nickname'] : '拾光用户';
|
|
|
$siteName = isset($siteInfo['site_name']) ? $siteInfo['site_name'] : '本公众号';
|
|
|
$followMsg = isset($siteInfo['follow_msg']) ? $siteInfo['follow_msg'] : '';
|
|
|
$contentStr = $followMsg ? str_replace('{nickname}', $nickname, $followMsg) : "Hi{$wxInfo['nickname']},欢迎关注{$siteName}!";
|
|
|
@@ -1278,9 +1263,10 @@ class Wechat
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+
|
|
|
// 已关注
|
|
|
if (in_array($event, ['SCAN', 'text', 'subscribe'])) {
|
|
|
- if ($event === 'SCAN' || ($event == 'subscribe' && $contentStr == '') || $event == 'text') {
|
|
|
+ if ($event === 'SCAN' || ($event === 'subscribe' && $contentStr == '') || $event == 'text') {
|
|
|
$wxInfo = Wechat::getUserInfo($openid, false, true);
|
|
|
if ($wxInfo) {
|
|
|
// 用户信息
|
|
|
@@ -1296,11 +1282,12 @@ class Wechat
|
|
|
PRedis::set('weixin:reg:'.$openid, ['info'=> $wxInfo, 'invite'=> $postObj, 'regInfo'=> $userData], 600);
|
|
|
Member::regMember($userData);
|
|
|
$siteInfo = cmf_get_site_info();
|
|
|
- $nickname = isset($wxInfo['nickname']) ? $wxInfo['nickname'] : '';
|
|
|
+ $nickname = isset($wxInfo['nickname'])? $wxInfo['nickname'] : '';
|
|
|
if(empty($nickname)){
|
|
|
$info = Fans::getWxInfo($openid);
|
|
|
$nickname = isset($info['nickname']) && $info['nickname']? $info['nickname'] : '拾光用户';
|
|
|
}
|
|
|
+
|
|
|
$siteName = isset($siteInfo['site_name']) ? $siteInfo['site_name'] : '本公众号';
|
|
|
$followMsg = isset($siteInfo['follow_msg']) ? $siteInfo['follow_msg'] : '';
|
|
|
$contentStr = $followMsg ? str_replace('{nickname}', $nickname, $followMsg) : "Hi【{$nickname}】,欢迎关注{$siteName}!";
|
|
|
@@ -1308,15 +1295,16 @@ class Wechat
|
|
|
}
|
|
|
|
|
|
// 更新关注
|
|
|
- if($event == 'subscribe'){
|
|
|
- Member::saveData(['openid'=> $openid],['is_follow'=> 1]);
|
|
|
+ if(in_array($event, ['subscribe','unsubscribe'])){
|
|
|
+ Member::saveData(['openid'=> $openid],['is_follow'=> $event == 'unsubscribe'? 0 : 1]);
|
|
|
}
|
|
|
$userInfo = Member::getInfo(['openid' => $openid]);
|
|
|
- PRedis::set('follow:'.$openid, ['info'=>$wxInfo,'event'=> $event,'text'=> $contentStr], 600);
|
|
|
+ PRedis::set('follow:'.$openid, $wxInfo, 600);
|
|
|
session('userInfo', $userInfo);
|
|
|
|
|
|
// 推送用户注册消息
|
|
|
$contentStr = $contentStr ? $contentStr : '您好,欢迎关注本公众号';
|
|
|
+ // $info = Member::where(['openid' => $openid])->field('id,real_name,mobile')->find();
|
|
|
$replyUrl = config('weixin.reply_url');
|
|
|
if ($replyUrl) {
|
|
|
$url = Wechat::makeRedirectUrl(url('/weixin/match/index', '', '', true));
|
|
|
@@ -1329,13 +1317,12 @@ class Wechat
|
|
|
$inviteOpenid = isset($inviteData['openid']) ? $inviteData['openid'] : '';
|
|
|
$message = isset($inviteData['message']) ? $inviteData['message'] : '';
|
|
|
if ($inviteOpenid && $message) {
|
|
|
- Wechat::sendCustomMsg($openid, ['content' => $message]);
|
|
|
+ Wechat::sendCustomMsg($openid, ['content' => $contentStr]);
|
|
|
}
|
|
|
}
|
|
|
}else if($event == 'unsubscribe'){
|
|
|
$cacheKey = "weixin:auth:".$openid;
|
|
|
PRedis::del($cacheKey);
|
|
|
- Member::saveData(['openid'=> $openid],['is_follow'=> 0]);
|
|
|
session('userInfo', null);
|
|
|
}
|
|
|
|