微信开发-群发接口

前面说到的都是一条一条的回复给用户消息,如果想要一次性发给多个用户,就要使用微信提供的群发接口了。

微信群发需要注意(其实就是微信文档里面的内容):

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

 

 

 

 

posted on 2016-12-09 16:40  顶级手法  阅读(15871)  评论(6编辑  收藏  举报