微信開發-群發接口


前面說到的都是一條一條的回復給用戶消息,如果想要一次性發給多個用戶,就要使用微信提供的群發接口了。

微信群發需要注意(其實就是微信文檔里面的內容):

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);
    }

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM