可以实现给授权了的用户进行消息推送,推送一些指定的消息,带动用户的点击,例如提醒用户签到,或者发送一些奖励到账等通知,目的就是一个,带动用户的点击,留住老用户。在这里我们需要通过,小程序的后台去开通订阅消息,订阅消息企业、个人都可以开通,机关部门可以申请长期订阅模板、而其他的就只能选择一次性模板。
消息类型
一次性订阅消息
一次性订阅消息用于解决用户使用小程序后,后续服务环节的通知问题。用户自主订阅后,开发者可不限时间地下发一条对应的服务消息;每条消息可单独订阅或退订。
长期订阅消息
一次性订阅消息可满足小程序的大部分服务场景需求,但线下公共服务领域存在一次性订阅无法满足的场景,如航班延误,需根据航班实时动态来多次发送消息提醒。为便于服务,我们提供了长期性订阅消息,用户订阅一次后,开发者可长期下发多条消息。
目前长期性订阅消息仅向政务民生、医疗、交通、金融、教育等线下公共服务开放,后期将逐步支持到其他线下公共服务业务。
设备订阅消息
设备订阅消息是一种特殊类型的订阅消息,它属于长期订阅消息类型,且需要完成「设备接入」才能使用。
设备订阅消息用于在设备触发某些需要人工介入的事件时(例如设备发生故障、设备耗材不足等),向用户发送消息通知。详见设备订阅消息文档
何为一次性模板?
简明扼要来说,就是用户授权一次可以获取一次消息,开发者不可以一直推送消息打扰用户
订阅消息是不可以随便发送的,需要对应到格式,包括字数长度等等,可以看这个,这是一个签到模板。
看下他的详情
这里的thing1、thing5都由字数的规范,防止推送垃圾消息,引流之类的
wx.requestSubscribeMessage
代码:
wx.requestSubscribeMessage({
tmplIds: [],
})
上面的tmplIds里面填写的就是申请到的模板ID,例如我的
6io5lFLo4OEdNjl2_F********RZEm6RMdHLQ
这里之前做过测试多个模板id一次性授权,存在bug,只会取第一个有效,啥意思呢?就是像这样
tmplIds: [‘1’,‘2’],
这个大家自己去测试
<view style="height: 100rpx;"></view>
<button>抽奖</button>
<view style="height: 100rpx;"></view>
<button type="primary" bindtap="sign_up">签到</button>
<view style="height: 100rpx;"></view>
<button>购买</button>
<view style="height: 100rpx;"></view>
<button>分享</button>
注释:1每个人能每天能分享一次,重复分享积分不算入
2邀请新用户登录后加积分
新建js文件:
// pages/share/share.js
Page({
/**
* 页面的初始数据
*/
data: {
},
sign_up:function(){
wx.requestSubscribeMessage({
tmplIds: ['6io5lFLo4OEdNjl2_F********RZEm6RMdHLQ'],
})
},
/**
* 生命周期函数--监听页面加载
*/
onLoad(options) {
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady() {
},
/**
* 生命周期函数--监听页面显示
*/
onShow() {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide() {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload() {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh() {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom() {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage() {
}
})
测试下可以正常授权
<?php
// 微信小程序通知主要函数
//http_request 利用curl请求 两个参数 url连接地址 数据信息
function http_request($url,$data){
$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);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$output = curl_exec($ch);//执行
curl_close($ch);//关闭
return $output;//返回结果
}
//封装方法
//签到通知
function notify_sign($touser,$ACCESS_TOKEN,$order_num,$shop_name,$user_name9,$phone,$address)
{
$template=array(
'touser'=>"$touser",//接收方openid
'template_id'=>"8nHJ-TGMbPXBEROLpIEsba4ZMKt4lkJlJoEO5RcTYmk", //模板的id
'page'=>"pages/admin_order/admin_order",//点击小程序订阅消息跳转的页
'data'=>array(
// 'character_string1'=>array('value'=>"$out_trade_no",'color'=>"#00008B"),
'character_string12'=>array('value'=>"$order_num",'color'=>'#00008B'),
// 'amount4'=>array('value'=>"15",'color'=>'#00008B'),
'thing1'=>array('value'=>"$shop_name",'color'=>'#00008B'),
'thing8'=>array('value'=>"$user_name9",'color'=>'#00008B'),
'phone_number9'=>array('value'=>"$phone",'color'=>'#00008B'),
'thing11'=>array('value'=>"$address",'color'=>'#00008B')
)
// 'phrase1'=>array('value'=>urlencode($plan),'color'=>'#00008B'), //时间
);
$json_template=json_encode($template);
$url="https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=".$ACCESS_TOKEN;
$res=http_request($url,urldecode($json_template));
print_r($res);
}
?>
下载redis服务,记得开放6379端口
access_token 的存储至少要保留 512 个字符空间;access_token 的有效期目前为 2 个小时,需定时刷新,重复获取将导致上次获取的 access_token 失效;建议开发者使用中控服务器统一获取和刷新 access_token,其他业务逻辑服务器所使用的 access_token 均来自于该中控服务器,不应该各自去刷新,否则容易造成冲突,导致 access_token 覆盖而影响业务;
//access_token
$appid="wxe20298c8e087576e";//小程序id
$secret="*****";//密钥
$grant_type="client_credential";
$access_token=curl_get("https://api.weixin.qq.com/cgi-bin/token?appid=$appid&secret=$secret&grant_type=$grant_type");
echo $access_token;
function curl_get($url){
$header = array(
'Accept: application/json',
);
$curl = curl_init();
//设置抓取的url
curl_setopt($curl, CURLOPT_URL, $url);
//设置头文件的信息作为数据流输出
curl_setopt($curl, CURLOPT_HEADER, 0);
// 超时设置,以秒为单位
curl_setopt($curl, CURLOPT_TIMEOUT, 1);
// 超时设置,以毫秒为单位
// curl_setopt($curl, CURLOPT_TIMEOUT_MS, 500);
// 设置请求头
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
//设置获取的信息以文件流的形式返回,而不是直接输出。
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
//执行命令
$data = curl_exec($curl);
// 显示错误信息
if (curl_error($curl)) {
print "Error: " . curl_error($curl);
} else {
$result=json_decode($data,true);
// $ACCESS_TOKEN=$result['access_token'];
curl_close($curl);//关闭连接
// return $result['access_token'];
// //存入到redis
// // 如果未修改php.ini下面两行注释去掉
ini_set('session.save_handler', 'redis');
ini_set('session.save_path', 'tcp://127.0.0.1:6379');
$redis = new redis();
$redis->connect('127.0.0.1', 6379);
$redis->set('kuaiquyin_wx_token',$result['access_token']);
echo $redis->get('kuaiquyin_wx_token');
}
}
<?php
// 微信小程序通知主要函数
//http_request 利用curl请求 两个参数 url连接地址 数据信息
function http_request($url,$data){
$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);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$output = curl_exec($ch);//执行
curl_close($ch);//关闭
return $output;//返回结果
}
//封装方法
//签到
function notify_sign($touser,$ACCESS_TOKEN)
{
$template=array(
'touser'=>"$touser",//接收方openid
'template_id'=>"6io5lFL**********HLQ", //模板的id
'page'=>"pages/jifen/jifen",//点击小程序订阅消息跳转的页
'data'=>array(
// 'character_string1'=>array('value'=>"$out_trade_no",'color'=>"#00008B"),
'thing1'=>array('value'=>"积分签到提醒",'color'=>'#00008B'),
// 'amount4'=>array('value'=>"15",'color'=>'#00008B'),
'thing2'=>array('value'=>"签到获得10积分",'color'=>'#00008B'),
'thing5'=>array('value'=>"点击立即签到",'color'=>'#00008B'),
'phrase6'=>array('value'=>"今天还没签到哦",'color'=>'#00008B')
)
// 'phrase1'=>array('value'=>urlencode($plan),'color'=>'#00008B'), //时间
);
$json_template=json_encode($template);
$url="https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=".$ACCESS_TOKEN;
$res=http_request($url,urldecode($json_template));
print_r($res);
}
?>
通过定时计划我们先触发一次access_token的获取
<?php
//签到通知
header("Content-type:text/html;charset=utf-8");//字符编码设置
//通知
include 'notify.php';//引用通知模板文件
ini_set('session.save_handler', 'redis');
ini_set('session.save_path', 'tcp://127.0.0.1:6379');
$redis = new redis();
$redis->connect('127.0.0.1', 6379);
$redius_token=$redis->get('kuaiquyin_wx_token');//鉴权
// $name=mb_substr($name,0,10,'utf-8');
notify_sign("你的openid",$redius_token,$name);
改了之后:
如果您发现该资源为电子书等存在侵权的资源或对该资源描述不正确等,可点击“私信”按钮向作者进行反馈;如作者无回复可进行平台仲裁,我们会在第一时间进行处理!
加入交流群
请使用微信扫一扫!