php 一次性订阅消息,微信公众号"发送一次性订阅消息"接口的使用

最近,微信新增了发送一次性订阅消息的接口,便使用php做了一个测试案例,希望可以给大家帮助。微信发送一次性订阅消息的规范 :https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1500374289_66bvB

发送一次性订阅消息有两个步骤:

第一步:需要用户同意授权,获取一次给用户推送一条订阅模板消息的机会

第二步:通过API推送订阅模板消息给到授权微信用户

接下来,我就附上我的代码,然后给大家讲解一下

/**

* 获取授权发送一次性订阅接口接口

*/

public function getSubscribemsg()

{

redirect("https://mp.weixin.qq.com/mp/subscribemsg?action=get_confirm&appid=wxee6a581d613debee&scene=1000&template_id=ZydnrAeuYY4kPcImQTe3J81TDLUsSioKBQYvAwG4OwI&redirect_url=http%3a%2f%2fsslkg.xnit.net%2findex.php%2fhome%2fCom%2fsubscribemsg&reserved=test#wechat_redirect");

}

/**

* 发送一次性订阅接口

*/

public function subscribemsg()

{

$action = $_GET['action'];

if ($action == "confirm") {

$openid = $_GET['openid'];

$template_id = $_GET['template_id'];

$scene = $_GET['scene'];

$access_token = $this->get_access_tokenjs();

$url = "https://api.weixin.qq.com/cgi-bin/message/template/subscribe?access_token={$access_token}";

$postdata = "{"

. "\"touser\": \"" . $openid . "\","

. "\"template_id\":\"" . $template_id . "\","

. "\"url\": \"https://www.baidu.com\","

. "\"scene\": \"".$scene."\","

. "\"title\": \"t\","

. "\"data\": {"

. "\"content\": {"

. "\"value\": \"订阅消息测试\","

. "\"color\": \"blue\""

. "}"

. "}"

. "}";

$ch1 = curl_init();

$timeout = 3000;

curl_setopt($ch1, CURLOPT_URL, $url);

curl_setopt($ch1, CURLOPT_POST, 1);

curl_setopt($ch1, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($ch1, CURLOPT_CONNECTTIMEOUT, $timeout);

curl_setopt($ch1, CURLOPT_SSL_VERIFYPEER, FALSE);

curl_setopt($ch1, CURLOPT_SSL_VERIFYHOST, false);

curl_setopt($ch1, CURLOPT_POSTFIELDS, $postdata);

$result = curl_exec($ch1);

curl_close($ch1);

$result = json_decode($result, true);

$errcode = $result['errmsg'];

$this->error($errcode, "/Houses/houselist");

}

}

我们看到上面有两个方法,getSubscribemsg()这个方法主要是获取用户授权,获得一次发送一次性订阅消息的机会,它的主要功能就是转发到用户授权url,主要有几个参数

参数说明

参数

是否必须

说明

action

直接填get_confirm即可

appid

公众号的唯一标识

scene

重定向后会带上scene参数,开发者可以填0-10000的整形值,用来标识订阅场景值

template_id

订阅消息模板ID,登录公众平台后台,在接口权限列表处可查看订阅模板ID

redirect_url

授权后重定向的回调地址,请使用UrlEncode对链接进行处理。注:要求redirect_url的域名要跟登记的业务域名一致,且业务域名不能带路径。业务域名需登录公众号,在设置-公众号设置-功能设置里面对业务域名设置。

reserved

用于保持请求和回调的状态,授权请后原样带回给第三方。该参数可用于防止csrf攻击(跨站请求伪造攻击),建议第三方带上该参数,可设置为简单的随机数加session进行校验,开发者可以填写a-zA-Z0-9的参数值,最多128字节

#wechat_redirect

无论直接打开还是做页面302重定向时,必须带此参数

redirect_url参数对应第二个方法的访问路径,这个路径需要经过urlencoding编码

用户同意或取消授权后会返回相关信息

如果用户点击同意或取消授权,页面将跳转至:

redirect_url/?openid=OPENID&template_id=TEMPLATE_ID&action=ACTION&scene=SCENE

参数说明

参数

说明

openid

用户唯一标识,只在用户确认授权时才会带上

template_id

订阅消息模板ID

action

用户点击动作,”confirm”代表用户确认授权,”cancel”代表用户取消授权

scene

订阅场景值

reserved

请求带入原样返回

subscribemsg()方法就是根据返回数据去发送一次性订阅信息,我们在subscribemsg()方法里获取以上返回的数据,然后拼成json格式的数据,发送数据到下面的接口。

接口请求说明

http请求方式: post

https://api.weixin.qq.com/cgi-bin/message/template/subscribe?access_token=ACCESS_TOKEN

post数据示例

{

“touser”:”OPENID”,

“template_id”:”TEMPLATE_ID”,

“url”:”URL”,

“scene”:”SCENE”,

“title”:”TITLE”,

“data”:{

“content”:{

“value”:”VALUE”,

“color”:”COLOR”

}

}

}

参数说明

参数

是否必须

说明

touser

填接收消息的用户openid

template_id

订阅消息模板ID

url

点击消息跳转的链接,需要有ICP备案

scene

订阅场景值

title

消息标题,15字以内

data

消息正文,value为消息内容文本(200字以内),没有固定格式,可用\n换行,color为整段消息内容的字体颜色(目前仅支持整段消息为一种颜色)

返回说明

在调用接口后,会返回JSON数据包。正常时的返回JSON数据包示例:

{

“errcode”:0,

“errmsg”:”ok”

} 这里我要说一下我在做这个的时候遇到的一些问题:

1. errmsg 返回的信息是data format error hint,这个问题主要是数据格式不正确,在这里,我需要插一句,我在做这个的时候,发现微信接口说明里

说的”value为消息内容文本(200字以内),没有固定格式,可用\n换行“,我发现如果在value参数里写上\n,就会报错,所以,我不知道是还未提供,

还是哪里出了问题,如果各位知道了,希望告知一声。

2. errmsg 返回的信息是user refuse to accept the msg hint: [5aw330620ge21],一次性订阅接口并不是说会员订阅一次后就能不断的推送消息,

而是说会员订阅一次后你只能推送一条,如果想再次推送,需要再一次订阅,这点要先搞明白,如果你想尝试一次订阅多次推送。

我在测试过程中也遇到了这个问题,后面发现是因为我没有给scene赋值,所以,获取到返回数据之后,一定要把scene参数上传。希望可以给各位一些

帮助。如果各位发现其中有什么问题,希望可以指出,谢谢!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值