前面說到的都是一條一條的回覆給用戶消息,若是想要一次性發給多個用戶,就要使用微信提供的羣發接口了。json
微信羣發須要注意(其實就是微信文檔裏面的內容):api
1.次數不同,認證的訂閱號能夠天天發送一條羣發消息,而認證的服務號雖然天天能夠發送100條,可是用戶每個月只能接收四條,多餘四條的將發送失敗。微信
2.羣發的時候,認證的訂閱號天天只能使用is_to_all羣發一次或者在公衆平臺羣發一次。相應的,服務號每月公衆平臺羣發+is_to_all羣發最多隻能四次。微信公衆平臺
1.這個接口是經過post請求的,請求參數根據羣發的內容略有不一樣。curl
2.tagid就是之前的分組id如今更名叫標籤,在微信公衆平臺->用戶管理的右側能夠看到已經建立的標籤名,得到標籤id須要經過接口來得到已經建立的全部標籤的id。post
3.當is_to_all爲true時,能夠選擇不填寫tagid。ui
4.media_id須要經過微信上傳素材接口得到。this
5.羣發接口能夠發送卡券,cardid須要經過建立卡券得到或者卡券相關事件推送得到。url
/** *根據標籤進行羣發 */ 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只是意味着羣發任務提交成功,並不意味着羣髮結束,後續的羣發過程當中可能受到各類因素的影響,須要一段時間才能羣發完畢。spa
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']; } }
一、預覽接口能夠將消息發送給一個指定的用戶,能夠查看消息的樣式和排版,可是天天只有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); }