前面說到的都是一條一條的回復給用戶消息,如果想要一次性發給多個用戶,就要使用微信提供的群發接口了。
微信群發需要注意(其實就是微信文檔里面的內容):
1.次數不一樣,認證的訂閱號可以每天發送一條群發消息,而認證的服務號雖然每天可以發送100條,但是用戶每月只能接收四條,多余四條的將發送失敗。
2.群發的時候,認證的訂閱號每天只能使用is_to_all群發一次或者在公眾平台群發一次。相應的,服務號每個月公眾平台群發+is_to_all群發最多只能四次。
根據標簽群發
1.這個接口是通過post請求的,請求參數根據群發的內容略有不同。
2.tagid就是以前的分組id現在改名叫標簽,在微信公眾平台->用戶管理的右側可以看到已經創建的標簽名,獲得標簽id需要通過接口來獲得已經創建的所有標簽的id。
3.當is_to_all為true時,可以選擇不填寫tagid。
4.media_id需要通過微信上傳素材接口獲得。
5.群發接口可以發送卡券,cardid需要通過創建卡券獲得或者卡券相關事件推送獲得。
/** *根據標簽進行群發 */ public function pushByTags(){ $access_token=get_token(); $url="https://api.weixin.qq.com/cgi-bin/message/mass/sendall?access_token=".$access_token; $data=array( 'filter'=>array( 'is_to_all'=>false, 'tag_id'=>135 ), 'text'=>array( 'content'=>'test' ), 'msgtype'=>'text' ); $result=json_decode(curl($url,json_encode($data)),true); if($result['errcode']==0){ echo "群發成功"; M('monthtuisong')->add(array('msgid'=>$result['msg_id'])); }else{ echo "群發失敗"; } }
返回errcode=0只是意味着群發任務提交成功,並不意味着群發結束,后續的群發過程中可能受到各種因素的影響,需要一段時間才能群發完畢。
根據openid列表群發
1.根據openid列表進行群發和根據標簽群發基本相似,只有第一個參數是不同的。根據標簽群發的第一個參數是filter而這個是touser,touser里面是
需要群發的openid列表。
2.只有服務號可用,訂閱號不可用。
public function pushByOpenIdList(){ $access_token=get_token(); $url="https://api.weixin.qq.com/cgi-bin/message/mass/send?access_token=".$access_token; $data=array( 'touser'=>array('xxx','yyy'),//填寫你要發的ID 'text'=>array( 'content'=>'test' ), 'msgtype'=>'text' ); $result=json_decode(curl($url,json_encode($data)),true); if($result['errcode']==0){ echo "群發成功"; M('monthtuisong')->add(array('msgid'=>$result['msg_id'],'shijian'=>time())); }else{ echo "群發失敗:原因:".$result['errmsg']; } }
刪除群發
刪除群發適用於,當群發過后發現群發消息不對的時候,可以使用接口進行刪除這次群發。
1.msg_id是群發消息成功后返回的msgid。
2.刪除接口只能刪除圖文和視頻,其他類型的不能刪除。
3.刪除圖文只是將圖文詳情頁失效,但是圖文的消息卡片用戶在本地還是可以看到。
4.如果多次群發的都是用一個media_id類型的素材,刪除掉其中一個群發,會將所有這個素材的群發全部失效。
public function deletePushAll(){ $access_token=get_token(); $url="https://api.weixin.qq.com/cgi-bin/message/mass/delete?access_token=".$access_token; $data=array('msg_id'=>1000000005); $result=json_decode(curl($url,json_encode($data)),true); if($result['errcode']==0){ echo "刪除群發成功"; }else{ echo "群發失敗:原因:".$result['errmsg']; } }
預覽接口
1、預覽接口可以將消息發送給一個指定的用戶,可以查看消息的樣式和排版,但是每天只有100次,需要謹慎使用。
public function previewPush(){ $access_token=get_token(); $url="https://api.weixin.qq.com/cgi-bin/message/mass/preview?access_token=".$access_token; $data=array( 'touser'=>'odys8xDP3L7UP1nXoDFrevFqO6KQ', 'text'=>array( 'content'=>'test' ), 'msgtype'=>'text' ); $result=json_decode(curl($url,json_encode($data)),true); }
群發消息查詢
這個接口是用來查詢已經發送的消息的狀態,msg_id是提交群發任務成功后返回的一個標識。如果返回SEND_SUCCESS說明已經全部群發成功。
public function selectPush(){ $access_token=get_token(); $url="https://api.weixin.qq.com/cgi-bin/message/mass/get?access_token=".$access_token; $data=array('msg_id'=>1000000005); $result=json_decode(curl($url,json_encode($data)),true); var_dump($result);exit; }
查詢結果:
群發事件推送
在群發快要成功的時候,微信會推送一個XML結構以事件的形式推送到開發者的URL上,開發者可以根據返回的結構來分析這個消息發送了多少人,成功的有多少,失敗的有多少。
public function masssendjobfinish(){ $msgid=$this->msgId; $total=$this->totalCount ; $filter=$this->filterCount; $sendCount=$this->sentCount; $errorCount=$this->errorCount; $data=array( 'totalcount'=>$total, 'filtercount'=>$filter, 'sendcount'=>$sendCount, 'errorcount'=>$errorcount ); plog($data); M('monthtuisong')->where(array('msgid'=>$msgid))->save($data); }