小程序如何使用订阅消息(PHP代码+小程序js代码)

27 篇文章 0 订阅
25 篇文章 1 订阅

??? 茫茫人海千千万万,感谢这一刻你看到了我的文章,感谢观赏,大家好呀,欢迎加入人工智能交流群(看我的动态),更多周边福利等你???

在这里插入图片描述

欢迎订阅本专栏或者关注我,大家一起努力每天一题算法题

最后,希望我的这篇文章能对你的有所帮助!

愿自己还有你在未来的日子,保持学习,保持进步,保持热爱,奔赴山海!

前景

本次开发时又再次用到,结合之前的摸爬滚打的经验,我给大家整理下,做到一文就能让你明白[什么是订阅消息?]、[如何使用订阅消息]、[开发订阅消息],还在等什么?小程序学习订阅本专栏不香嘛?!,顺便关注走一走[滑稽]

目录

什么是小程序订阅消息?

在这里插入图片描述

可以实现给授权了的用户进行消息推送,推送一些指定的消息,带动用户的点击,例如提醒用户签到,或者发送一些奖励到账等通知,目的就是一个,带动用户的点击,留住老用户。在这里我们需要通过,小程序的后台去开通订阅消息,订阅消息企业个人都可以开通,机关部门可以申请长期订阅模板、而其他的就只能选择一次性模板
消息类型

1. 一次性订阅消息

一次性订阅消息用于解决用户使用小程序后,后续服务环节的通知问题。用户自主订阅后,开发者可不限时间地下发一条对应的服务消息;每条消息可单独订阅或退订。

2. 长期订阅消息

一次性订阅消息可满足小程序的大部分服务场景需求,但线下公共服务领域存在一次性订阅无法满足的场景,如航班延误,需根据航班实时动态来多次发送消息提醒。为便于服务,我们提供了长期性订阅消息,用户订阅一次后,开发者可长期下发多条消息。

目前长期性订阅消息仅向政务民生、医疗、交通、金融、教育等线下公共服务开放,后期将逐步支持到其他线下公共服务业务。

3. 设备订阅消息

设备订阅消息是一种特殊类型的订阅消息,它属于长期订阅消息类型,且需要完成「设备接入」才能使用。

设备订阅消息用于在设备触发某些需要人工介入的事件时(例如设备发生故障、设备耗材不足等),向用户发送消息通知。详见设备订阅消息文档

何为一次性模板?

简明扼要来说,就是用户授权一次可以获取一次消息,开发者不可以一直推送消息打扰用户

订阅消息的格式

订阅消息是不可以随便发送的,需要对应到格式,包括字数长度等等,可以看这个,这是一个签到模板
在这里插入图片描述

看下他的详情

在这里插入图片描述

活动名称

{{thing1.DATA}}

温馨提示

{{thing2.DATA}}

签到方式

{{thing5.DATA}}

签到状态

{{phrase6.DATA}}

这里的thing1、thing5都由字数的规范,防止推送垃圾消息,引流之类的

运行基本流程

前端通过组件接口用户进行授权,后端通过定时触发,将模板消息触发
可以通过宝塔的定时计划来进行触发,用到的各种鉴权,我们通过redis来存储

开发步骤

第一步开通订阅消息

在这里插入图片描述

选择消息模板

在这里插入图片描述
注意:如果没有想要的模板,去把小程序的服务类目多加几个
在这里插入图片描述

小程序申请授权

一次性订阅消息、长期订阅消息,接口

wx.requestSubscribeMessage

代码:

wx.requestSubscribeMessage({
      tmplIds: [],
    })

上面的tmplIds里面填写的就是申请到的模板ID,例如我的

6io5lFLo4OEdNjl2_F********RZEm6RMdHLQ

这里之前做过测试多个模板id一次性授权,存在bug,只会取第一个有效,啥意思呢?就是像这样

tmplIds: [‘1’,‘2’],
这个大家自己去测试


我们新建wxml文件:

<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封装、redis配置

在api目录下新建文件notify.php

<?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.php文件
通过定时任务对access_token的存储,在快过期时调用更新,这里说一次为啥不调用一次刷新一次access_token就好了,弄这么麻烦?因为当access_token刷新后已经通知过的模板消息就会失效,为了防止以前发的模板消息失效,能最大程度降低失效,可以用定时器的方法更新access_token即可

再看下官方怎么说的:

access_token 的存储至少要保留 512 个字符空间;
access_token 的有效期目前为 2 个小时,需定时刷新,重复获取将导致上次获取的 access_token 失效;
建议开发者使用中控服务器统一获取和刷新 access_token,其他业务逻辑服务器所使用的 access_token 均来自于该中控服务器,不应该各自去刷新,否则容易造成冲突,导致 access_token 覆盖而影响业务;

<?php
//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');
    }
}
 ?>

我们访问测试下:
在这里插入图片描述

设计定时器触发更新access_token
在这里插入图片描述

修改notify.php文件

打开小程序模板的详情我们进行替换,例如我的:
在这里插入图片描述

那就需要把内容的数据替换

替换后notify.php文件如下:
在这里插入图片描述

<?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的获取
在这里插入图片描述
然后新建sign.php文件

写入代码

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

openid是小程序登陆后给的,可以去参考其他文章,这里不做说明
例如我的openid
在这里插入图片描述
写入后,去小程序点击签到授权
在这里插入图片描述
访问后报错:
在这里插入图片描述
我们看一下是啥错误
在这里插入图片描述
不好意思??忘记改了,忘记改openid了

改了之后:

在这里插入图片描述
微信成功收到消息
在这里插入图片描述

总结

以上就是今天的教程,做一个简单的记录,方便自己以后能用到,也希望能帮助到屏幕中困扰的你,谢谢支持

先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
注:由于该资源较大,故分为两个部分上传,资源共10积分,两个压缩包平均5积分。需要两部分同时下载,同时解压才能获得完整资源。(该部分为part1,part2也已上传至我的资源,可在我主页内下载) 本资源是《微信公众平台与小程序开发 从零搭建套系统》高清PDF扫描版。该书由张剑明著,中国工信出版集团和人民邮电出版社联合出版,有需要的小伙伴可以下载学习参考。 本书目录如下: 第1章 微信生态 1.1 微信:是一个生活方式 1 1.2 微信公众平台 6 1.2.1 公众平台简介 6 1.2.2 服务号和订阅号 7 1.3 企业号 8 1.4 小程序 8 1.5 微信开放平台 9 1.6 微信支付 10 1.7 表情开放平台 12 1.8 微信广告 12 1.9 小结 13 第2章 开发环境及技术介绍 2.1 集成软件包介绍 14 2.2 XAMPP的安装与配置 15 2.3 PhpStorm的安装及配置 20 2.4 相关技术介绍 23 2.4.1 HTTP 23 2.4.2 HTML5 25 2.5 小结 26 第3章 开发前的准备 3.1 开发概述 27 3.1.1 OpenID 27 3.1.2 公众号使用场景 28 3.2 公众号消息会话流程 30 3.3 接入指南 31 3.4 接口权限及调用频率 33 3.5 微信网页开发样式库 35 3.6 小结 37 第4章 常用调试方法及工具 4.1 微信测试号 38 4.2 接口在线调试 41 4.3 微信Web开发者工具 42 4.3.1 微信网页授权调试 43 4.3.2 JS-SDK权限校验 45 4.3.3 网页远程调试 45 4.4 前端调试工具 46 4.4.1 谷歌浏览器开发者工具 48 4.5 移动端抓包与调试 50 4.5.1 Charles抓包工具 55 4.6 小结 56 第5章 基于CodeIgniter的微信公众平台开发框架 5.1 CodeIgniter简介 57 5.2 工程代码改造 59 5.3 微信公众号开发配置 60 5.4 小结 63 第6章 微信网页开发 6.1 微信网页授权原理 64 6.1.1 网页授权注意事项 65 6.1.2 网页授权流程 66 6.2 微信网页授权实例 67 6.3 微信网页多域名授权 74 6.3.1 原理分析 74 6.3.2 代码实现 76 6.4 微信JS-SDK 78 6.4.1 接入准备 79 6.4.2 JS-SDK接口实例 80 6.5 小结 85 第7章 微信支付 7.1 微信支付接入方式 86 7.2 微信支付准备工作 88 7.3 微信支付实践 89 7.3.1 示例代码解析 90 7.3.2 支付示例 91 7.3.3 支付结果通知 96 7.4 聚合支付 99 7.4.1 聚合支付接入示例 101 7.5 小结 105 第8章 微信登录 8.1 微信开放平台 107 8.1.1 UnionID机制 108 8.2 微信自动登录 109 8.2.1 数据结构设计 110 8.2.2 代码实现 112 8.2.3 使用UnionID登录 117 8.2.4 如何应用到现有站点 118 8.3 小结 120 第9章 微信小程序 9.1 小程序简介 121 9.2 开发环境及框架 122 9.2.1 开发配置 125 9.2.2 HTTPS配置 126 9.3.1 iOS/Android开发者 129 9.3 如何着手开发小程序 129 9.4 页面生命周期 130 9.3.2 前端开发者 130 9.3.3 后端开发者 130 9.5 小程序组件和API 134 9.6 小程序登录 134 9.7 小程序微信支付 140 9.8 小结 145 第10章 案例:第一个echo server程序 10.1 接入开发者模式 146 10.2 消息响应 147 10.2.1 公众号会话保存Session 153 10.3 自定义菜单 154 10.4 小结 157 第11章 案例:微信随手记 11.1 需求描述 159 11.2 数据库设计 159 11.3 代码实现 161 11.3.1 添加主题 161 11.3.3 主题查看 163 11.3.4 图片下载 166 11.3.5 图片预览 169 11.3.6 聊天机器人 170 11.3.7 入口函数 174 11.4 运行效果 175 11.5 小结 177
注:由于该资源较大,故分为两个部分上传,资源共10积分,两个压缩包平均5积分。需要两部分同时下载,同时解压才能获得完整资源。(该部分为part2,part1也已上传至我的资源,可在我主页内下载) 本资源是《微信公众平台与小程序开发 从零搭建套系统》高清PDF扫描版。该书由张剑明著,中国工信出版集团和人民邮电出版社联合出版,有需要的小伙伴可以下载学习参考。 本书目录如下: 第1章 微信生态 1.1 微信:是一个生活方式 1 1.2 微信公众平台 6 1.2.1 公众平台简介 6 1.2.2 服务号和订阅号 7 1.3 企业号 8 1.4 小程序 8 1.5 微信开放平台 9 1.6 微信支付 10 1.7 表情开放平台 12 1.8 微信广告 12 1.9 小结 13 第2章 开发环境及技术介绍 2.1 集成软件包介绍 14 2.2 XAMPP的安装与配置 15 2.3 PhpStorm的安装及配置 20 2.4 相关技术介绍 23 2.4.1 HTTP 23 2.4.2 HTML5 25 2.5 小结 26 第3章 开发前的准备 3.1 开发概述 27 3.1.1 OpenID 27 3.1.2 公众号使用场景 28 3.2 公众号消息会话流程 30 3.3 接入指南 31 3.4 接口权限及调用频率 33 3.5 微信网页开发样式库 35 3.6 小结 37 第4章 常用调试方法及工具 4.1 微信测试号 38 4.2 接口在线调试 41 4.3 微信Web开发者工具 42 4.3.1 微信网页授权调试 43 4.3.2 JS-SDK权限校验 45 4.3.3 网页远程调试 45 4.4 前端调试工具 46 4.4.1 谷歌浏览器开发者工具 48 4.5 移动端抓包与调试 50 4.5.1 Charles抓包工具 55 4.6 小结 56 第5章 基于CodeIgniter的微信公众平台开发框架 5.1 CodeIgniter简介 57 5.2 工程代码改造 59 5.3 微信公众号开发配置 60 5.4 小结 63 第6章 微信网页开发 6.1 微信网页授权原理 64 6.1.1 网页授权注意事项 65 6.1.2 网页授权流程 66 6.2 微信网页授权实例 67 6.3 微信网页多域名授权 74 6.3.1 原理分析 74 6.3.2 代码实现 76 6.4 微信JS-SDK 78 6.4.1 接入准备 79 6.4.2 JS-SDK接口实例 80 6.5 小结 85 第7章 微信支付 7.1 微信支付接入方式 86 7.2 微信支付准备工作 88 7.3 微信支付实践 89 7.3.1 示例代码解析 90 7.3.2 支付示例 91 7.3.3 支付结果通知 96 7.4 聚合支付 99 7.4.1 聚合支付接入示例 101 7.5 小结 105 第8章 微信登录 8.1 微信开放平台 107 8.1.1 UnionID机制 108 8.2 微信自动登录 109 8.2.1 数据结构设计 110 8.2.2 代码实现 112 8.2.3 使用UnionID登录 117 8.2.4 如何应用到现有站点 118 8.3 小结 120 第9章 微信小程序 9.1 小程序简介 121 9.2 开发环境及框架 122 9.2.1 开发配置 125 9.2.2 HTTPS配置 126 9.3.1 iOS/Android开发者 129 9.3 如何着手开发小程序 129 9.4 页面生命周期 130 9.3.2 前端开发者 130 9.3.3 后端开发者 130 9.5 小程序组件和API 134 9.6 小程序登录 134 9.7 小程序微信支付 140 9.8 小结 145 第10章 案例:第一个echo server程序 10.1 接入开发者模式 146 10.2 消息响应 147 10.2.1 公众号会话保存Session 153 10.3 自定义菜单 154 10.4 小结 157 第11章 案例:微信随手记 11.1 需求描述 159 11.2 数据库设计 159 11.3 代码实现 161 11.3.1 添加主题 161 11.3.3 主题查看 163 11.3.4 图片下载 166 11.3.5 图片预览 169 11.3.6 聊天机器人 170 11.3.7 入口函数 174 11.4 运行效果 175 11.5 小结 177

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值