使用微信小程序新的订阅消息接口,主动推送。

小程序订阅消息,昨天刚上线,今天就体验了一下,遇到不少问题,不过还好都解决了。

首先:你需要在小程序后台,选择一个模板,和公众号差不多,不过这里一定要注意,选择模板和你的类目有关系,只出现你类目相关的,而且,还有就是感觉是微信那边的问题,我刚开始选了一个带彩票开奖字段的模板,后面推送消息总是:blackList!!!推送失败,换一个文字正常的就过了。

选好模板:记下ID就进行下一步:

小程序端如何操作呢,这点和公众号不一样,公众号需要一个FormID来消耗,而订阅消息不是,当用户通过事件触发:

我们主动向用户弹出申请,一会放图,下面是API使用,tmplids是模板消息列表ID,你可以放上多个,用户可以根据自己的选择来勾选,当用户勾选要接收的模板消息类型,会返回动态的字段(和模板消息ID一致),并且这个字段的值是:accept,这就代表你在后台,可以为这个用户,推送accept过的模板消息了。不过只能推送一次,如果用户多次点击,便可以多次推送,微信后台应该是记录了。我们也可以自己记录,不需要保存FormID这样的东西。

接口:wx.requestSubscribeMessage(Object object)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 wx.requestSubscribeMessage({
tmplIds: ["XII_0By8D9WabnUjVPB_8S1itsm2d4_xxx"],
success: function (res) {
if (res.XII_0By8D9WabnUjVPB_8S1itsm2d4_xxxxx === 'accept'){
wx.showToast({
title: '订阅OK!',
})
}
console.log(res)
//成功
},
fail(err) {
//失败
console.error(err);
}
})
},

null

null

一旦用户点击允许,我们可以后台记录该模板被允许了一次。

多次点击,是累计。

看看后端关键代码:PHP接口:subscribeMessage.send

这里注意就是:每个字段都有格式,一定要按照文档格式来

600null

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/**
* 发送订阅消息
* @return [type] [description]
*/
public function sendSubMessage(
$openId = "ofasP0XMXrT-8sZCoXcOTxxxxxxx",$tmpl = "XII_0By8D9WabnUjVPB_8S1itsm2d4_VsRxxxxxx"){

$params['touser'] = $openId;
$params['template_id'] = $tmpl;
$params['page'] = "/pages/index/index";
$params['data'] = [
'date2' => ['value' =>'2019-10-12'],
// 'character_string7' =>['value'=>'121212'],
'thing1'=>['value'=>'开通完成']
];

// return $this->success('200',$params);
return $this->getCurl(self::$subMessageUrl.self::$accessToken,$params);

}

null

看看发送成功的内容:

null