本文作者:心月

微信公众号开发——消息群发接口实现

心月IT博客 2019-10-04
摘要:在公众平台网站上,为订阅号提供了每天一条的群发权限,为服务号提供每月(自然月)4条的群发权限。而对于某些具备开发能力的公众号运营者,可以通过高级群发接口,实现更灵活的群发能力。

在公众平台网站上,为订阅号提供了每天一条的群发权限,为服务号提供每月(自然月)4条的群发权限。而对于某些具备开发能力的公众号运营者,可以通过高级群发接口,实现更灵活的群发能力。

【注意】

1、对于认证订阅号,群发接口每天可成功调用1次,此次群发可选择发送给全部用户或某个标签;
2、对于认证服务号虽然开发者使用高级群发接口的每日调用限制为100次,但是用户每月只能接收4条,无论在公众平台网站上,还是使用接口群发,用户每月只能接收4条群发消息,多于4条的群发将对该用户发送失败;
3、开发者可以使用预览接口校对消息样式和排版,通过预览接口可发送编辑好的消息给指定用户校验效果;
4、群发过程中,微信后台会自动进行图文消息原创校验,请提前设置好相关参数(send_ignore等);
5、开发者可以主动设置 clientmsgid 来避免重复推送。
6、群发接口每分钟限制请求60次,超过限制的请求会被拒绝。
7、图文消息正文中插入自己帐号和其他公众号已群发文章链接的能力。

因为公众平台有每天群发消息的限制(订阅号每天一条,服务号一个月4条),而公众平台为开发者提供了预览接口,每天可调用100次,因此我们在开发时,可以用预览接口发送消息给指定用户,然后在手机端查看排版样式

预览接口:

http请求方式: POST
https://api.weixin.qq.com/cgi-bin/message/mass/preview?access_token=ACCESS_TOKEN

群发消息接口实现:

        //群发消息
	public function sdMsg()
	{
		$accessToken = $this->_getWxAccessToken();
		echo "$accessToken";
		echo "<hr>";
		$url = 'https://api.weixin.qq.com/cgi-bin/message/mass/preview?access_token='.$accessToken;

		 //单文本消息
		 $arr = [
		 	'touser' => '***',//openid 用微信扫描测试号,用户列表下的微信号
		 	'text' => [
		 		'content' => urlencode('心月IT博客公众号群发消息测试'),
		 	],
		 	'msgtype' => 'text',
		 ];
		 
		//图片消息
		// $arr = [
		//    "touser" => "o3anQ1BcB1g2C5jFEgrXb3m7lSps", 
		//    "image"=>[             
		//      "media_id"=>"BTgN0opcW3Y5zV_ZebbsD3NFKRWf6cb7OPswPi9Q83fOJHK2P67dzxn11Cp7THat",           
		//     ],
		//    "msgtype"=>"image" ,
		// ];
		$postJson = urldecode(json_encode($arr));
		echo "<hr>";
		echo "$postJson";
		$res = $this->ch($url, 'post', 'json', $postJson);
		dump($res);
	}
	
	private function ch($url, $type='get', $res='json', $arr='')
	{

		$ch = curl_init();
		curl_setopt($ch, CURLOPT_URL, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);

		if ($type == 'post') {
			curl_setopt($ch, CURLOPT_POST, 1);
			curl_setopt($ch, CURLOPT_POSTFIELDS, $arr);
		}

		$cnt = curl_exec($ch);
		if (curl_errno($ch)) {
			return;
		}

		curl_close($ch);

		if ($res == 'json') {
			return json_decode($cnt, true);
		}

		return $cnt;
	}

公众号关注用户OPENID

(media_id 的获取方法:《微信公众号开发——通过JS-SDK图片上传接口获取media_id》)

直接调用 sdMsg() 接口就可以实现消息群发。

微信公众号消息群发

群发图片消息示例:

群发图片消息示例

文本消息json格式:

{     
    "touser":"OPENID",
    "text":{           
      "content":"CONTENT"            
    },     
    "msgtype":"text"
}


群发消息,除了单文本还可以发送其他的消息,其他消息发送的json格式:


图文消息(其中media_id与根据分组群发中的media_id相同):

{
   "touser":"OPENID", 
   "mpnews":{              
     "media_id":"123dsdajkasd231jhksad"               
    },
   "msgtype":"mpnews" 
}


语音(其中media_id与根据分组群发中的media_id相同):

{
    "touser":"OPENID",
    "voice":{              
     "media_id":"123dsdajkasd231jhksad"
    },
    "msgtype":"voice" 
}


图片(其中media_id与根据分组群发中的media_id相同):

{
    "touser":"OPENID",
    "image":{      
     "media_id":"123dsdajkasd231jhksad"
    },
    "msgtype":"image" 
}


视频(其中media_id与根据分组群发中的media_id相同):

{
    "touser":"OPENID",
    "mpvideo":{  "media_id":"IhdaAQXuvJtGzwwc0abfXnzeezfO0NgPK6AQYShD8RQYMTtfzbLdBIQkQziv2XJc",   
   },
    "msgtype":"mpvideo" 
}


卡券:

{ "touser":"OPENID", 
  "wxcard":{              
           "card_id":"123dsdajkasd231jhksad",
            "card_ext": "{"code":"","openid":"","timestamp":"1402057159","signature":"017bb17407c8e0058a66d72dcc61632b70f511ad"}"               
            }, 
  "msgtype":"wxcard" 
}


在实际开发中可以参照文本消息,把你要发送的消息类型用数组表示出来,然后在通过json_encode 转换成 json。

文章版权及转载声明:

作者:心月 本文地址:http://www.xinyueseo.com/other/361.html发布于 2019-10-21
文章转载或复制请以超链接形式并注明出处心月IT博客

分享到:
赞(

发表评论

快捷输入:

    评论列表 (有 0 条评论,人围观)参与讨论