最近作的一個項目,當有用戶有資金到帳或者成員變更時須要給他發一條微信消息提示。針對這個,開始想使用模板消息,可是剛註冊的公衆號申請消息模板須要幾天時間申請,在時間不足下選擇了使用客服消息接口,微信文檔地址: https://mp.weixin.qq.com/wiki。php
這裏跳過網頁受權和用戶信息獲取,請求接口的步驟,主要看獲取access_token,發佈客服消息,驗證是否關注公衆號等接口。json
1. 獲取access_token。api
// 獲取access_token public function getAccessToken($weid) { $appID = "wxfaddfdfdfd6cf6fc3569"; // 服務號appID $appSecret = "071bebfdfdofdfd23687bf53d63a"; // 服務號appSerect $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$appID&secret=$appSecret"; $content = ihttp_get($url); // 自定義請求函數 if(is_error($content)) { return error('-1', '獲取微信公衆號受權失敗, 請稍後重試!錯誤詳情: ' . $content['message']); } if (empty($content['content'])) { return error('-1', 'AccessToken獲取失敗,請檢查appid和appsecret的值是否與微信公衆平臺一致!'); } $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', '獲取微信公衆號受權失敗, 請稍後重試! 公衆平臺返回原始數據爲: 錯誤代碼-' . $errorinfo['errcode'] . ',錯誤信息-' . $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. 判斷是否關注公衆號。數組
// 判斷當前用戶是否關注公衆號 public public function isSubscribe($weid,$userid) { // 獲取當前用戶信息 $userinfo = pdo_get('hcface_users',array('uid'=>$userid)); //return $userinfo; if(empty($userinfo)) { return false; } // 獲取access_token $accessToken = $this->getAccessToken($weid); // 是否關注接口 $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 = []; // 判斷當前用戶頭像和暱稱是否更換 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. 發送客服消息。微信
public function solPushMsg($openid, $content, $wid) { // 獲取access_token $accessToken = $this->getAccessToken($wid); $data = array( 'touser' => $openid, // 用戶openID 'msgtype' => 'text', 'text' => [ 'content' => $content, // 內容 ], ); $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第二個參數必須帶上,否則發出的消息多是unicode編碼的 if(is_error($res)) { return false; } if($res['code'] != '200') { return false; } return @json_decode($res['content'],true); }
4. 微信接口返回的是一個數組。app
5. 實現效果。微信公衆平臺
公衆號函數