PHP實(shí)現(xiàn)給用戶發(fā)微信消息提醒功能
正文
以前有一個(gè)項(xiàng)目項(xiàng)目,當(dāng)有用戶有資金到賬或者成員變動(dòng)時(shí)需要給他發(fā)一條微信消息提示。針對(duì)這個(gè),開始想使用模板消息,但是剛注冊(cè)的公眾號(hào)申請(qǐng)消息模板需要幾天時(shí)間申請(qǐng),在時(shí)間不足下選擇了使用客服消息接口。
這里跳過網(wǎng)頁(yè)授權(quán)和用戶信息獲取,請(qǐng)求接口的步驟,主要看獲取access_token,發(fā)布客服消息,驗(yàn)證是否關(guān)注等等接口。
1. 獲取access_token
// 獲取access_token public function getAccessToken($weid) { $appID = "wxfaddfdfdfd6cf6fc3569"; // 服務(wù)號(hào)appID $appSecret = "071bebfdfdofdfd23687bf53d63a"; // 服務(wù)號(hào)appSerect $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$appID&secret=$appSecret"; $content = ihttp_get($url); // 自定義請(qǐng)求函數(shù) if(is_error($content)) { return error('-1', '獲取微信公眾號(hào)授權(quán)失敗, 請(qǐng)稍后重試!錯(cuò)誤詳情: ' . $content['message']); } if (empty($content['content'])) { return error('-1', 'AccessToken獲取失敗,請(qǐng)檢查appid和appsecret的值是否與微信公眾平臺(tái)一致!'); } $token = @json_decode($content['content'], true); if ($token['errcode'] == '40164') { return error(-1, $this->errorCode($token['errcode'], $token['errmsg'])); } if(empty($token) || !is_array($token) || empty($token['access_token']) || empty($token['expires_in'])) { $errorinfo = substr($content['meta'], strpos($content['meta'], '{')); $errorinfo = @json_decode($errorinfo, true); return error('-1', '獲取微信公眾號(hào)授權(quán)失敗, 請(qǐng)稍后重試! 公眾平臺(tái)返回原始數(shù)據(jù)為: 錯(cuò)誤代碼-' . $errorinfo['errcode'] . ',錯(cuò)誤信息-' . $errorinfo['errmsg']); } $record = array(); $record['token'] = $token['access_token']; $record['expire'] = TIMESTAMP + $token['expires_in'] - 200; $cachekey = cache_system_key('accesstoken', array('acid' => $weid)); cache_write($cachekey, $record); return $record['token']; }
2. 判斷是否關(guān)注
// 判斷當(dāng)前用戶是否關(guān)注公眾號(hào) public public function isSubscribe($weid,$userid) { // 獲取當(dāng)前用戶信息 $userinfo = pdo_get('hcface_users',array('uid'=>$userid)); //return $userinfo; if(empty($userinfo)) { return false; } // 獲取access_token $accessToken = $this->getAccessToken($weid); // 是否關(guān)注接口 $url = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=".$accessToken."&openid=".$userinfo['openid']."&lang=zh_CN"; $res = ihttp_request($url); if(is_error($res)) { return false; } if($res['code'] != '200') { return false; } $result = @json_decode($res['content'],true); if($result['subscribe'] == 1) { $updateData = []; // 判斷當(dāng)前用戶頭像和昵稱是否更換 if($userinfo['avatar'] != $result['headimgurl']) { $updateData['avatar'] = $result['headimgurl']; } if($userinfo['nickname'] != $result['nickname']) { $updateData['avatar'] = $result['nickname']; } if(!empty($updateData)) { pdo_update('hcface_users',$updateData,array('uid'=>$userid)); } } $userInfoData = [ "subscribe" => $result['subscribe'], "user_openid" => $userinfo['openid'], "nickname" => $userinfo['nickname'], ]; return $userInfoData; }
3. 發(fā)送客服消息
public function solPushMsg($openid, $content, $wid) { // 獲取access_token $accessToken = $this->getAccessToken($wid); $data = array( 'touser' => $openid, // 用戶openID 'msgtype' => 'text', 'text' => [ 'content' => $content, // 內(nèi)容 ], ); $url = 'https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token='.$accessToken; $res = ihttp_request($url,json_encode($data,JSON_UNESCAPED_UNICODE)); // json_encode第二個(gè)參數(shù)必須帶上,不然發(fā)出的消息可能是unicode編碼的 if(is_error($res)) { return false; } if($res['code'] != '200') { return false; } return @json_decode($res['content'],true); }
4. 微信接口返回的是一個(gè)數(shù)組
5. 實(shí)現(xiàn)效果
以上就是PHP實(shí)現(xiàn)給用戶發(fā)微信消息提醒功能的詳細(xì)內(nèi)容,更多關(guān)于PHP微信消息提醒的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
ThinkPHP防止重復(fù)提交表單的方法實(shí)例分析
這篇文章主要介紹了ThinkPHP防止重復(fù)提交表單的方法,結(jié)合實(shí)例形式分析了thinkPHP防止重復(fù)提交表單的各種常見操作技巧與相關(guān)注意事項(xiàng),需要的朋友可以參考下2018-05-05Linux下PHP連接Oracle數(shù)據(jù)庫(kù)
PHP連接Oracle是通過oci8訪問的。需要在web服務(wù)器上安裝oracle-instantcilent,使PHP支持Oracle擴(kuò)展包OCI。下面我們來一步步詳細(xì)介紹下如何使用PHP連接Oracle。2014-08-08在Laravel5中正確設(shè)置文件權(quán)限的方法
這篇文章主要給大家介紹了關(guān)于如何在Laravel5中正確設(shè)置文件權(quán)限的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Laravel5具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05Laravel路由研究之domain解決多域名問題的方法示例
這篇文章主要介紹了Laravel 路由研究之domain解決多域名問題的方法示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-04-04PHP正則表達(dá)式過濾html標(biāo)簽屬性(DEMO)
這篇文章主要介紹了PHP正則表達(dá)式過濾html標(biāo)簽屬性的相關(guān)內(nèi)容,實(shí)用性非常,感興趣的朋友參考下吧2016-05-05主流PHP框架的優(yōu)缺點(diǎn)對(duì)比分析
這篇文章主要介紹了幾款今年比較熱門的主流PHP框架的優(yōu)缺點(diǎn)對(duì)比分析,非常的簡(jiǎn)單實(shí)用,有需要的小伙伴參考下。2014-12-12