小程序服务通知功能实现步骤详解

如何实现小程序发送服务通知?

  小程序给用户发送消息需要经过一系列验证,初次接触这个需求时可能会花费较长时间去研究和测试。为了帮助大家更好地理解并减少学习时间,我整理了一套完整的发送消息逻辑,方便以后消息通知功能时参考。

发送模板消息的步骤

  发送模板消息主要分为以下几个步骤:获取access_token、建立消息模板、获取form_id、发送消息通知以及设定定时任务。下面我们逐一讲解。

一、获取access_token

  在向微信请求发送消息时,需要使用到access_token。access_token相当于小程序的身份证,虽然有appid和appsecret这两个凭证,但微信为了安全性,采用了access_token这个有时效的身份证明。一条access_token的有效期只有2小时,而且单个小程序每天只能请求1000次access_token。因此,我们需要一套逻辑来确保access_token的可用性。

  通过向指定地址请求,可以返回对应的access_token。我们可以编写一个方法来获取access_token,并设置一个定时器,每小时触发一次该接口,确保随时都能获取到有效的token。

二、建立消息模板

  在小程序微信公众平台的左侧栏中,有一个模板消息的选项卡。按照文档添加一个模板消息后,就可以得到对应的模板ID。这一步基本是网页操作,比较简单,不再赘述。

三、获取form_id

  为了防止小程序对用户发送过多的消息通知,微信对消息通知进行了限制。每发送一条消息通知,都需要一条form_id或prepay_id。prepay_id是用户使用微信支付后返回的ID,本文不做详细解释。

  form_id是与button绑定的ID,每当用户点击绑定过的button时,就会返回一条form_id。一条form_id的有效期是7天,且每个用户的form_id只能对该用户使用。因此,我们需要一个专门的逻辑来保存和使用form_id。

  以下是一个获取form_id的示例代码

  ```javascript
// pages/index/index.js
form_id: function(e) {
  wx.request({
    url: 'test.com/index/index/form_id', // 自行替换接口
    method: "POST",
    data: {
      form_id: e.detail.formId,
      openId: openId // 自行获取当前用户openId
    },
    header: {
      'content-type': 'application/x-www-form-urlencoded'
    }
  })
}
```

  在服务器端,我们可以通过以下代码来处理form_id的保存:

  ```php
public function form_id(){
  if (empty($_POST)) {;}
  $form_id = $_POST['form_id'];
  if ($form_id == 'the formId is a mock one'){;} // 过滤工具生成的form_id
  $openId = $_POST['openId'];
  if (!$openId) {;}
  $data = compact('form_id','openId');
  db('form_id')->insert($data);
}
```

  此外,我们还需要定时删除过期的form_id,确保数据库中的form_id都是有效的:

  ```php
public function test(){
  $time = time()-518400; // 保证form_id可用性,删除6天前的form_id
  db('form_id')->where('createTime','delete();
  // 将该方法每天执行一次
}
```

四、发送消息通知

  当access_token和form_id都确保可用后,就可以给用户发送消息通知了。具体发送逻辑可以根据业务需求进行调整。

五、设定定时任务

  为了保证上述操作顺利进行,我们需要设定几个定时任务来辅助消息发送。假设我们有以下几个方法:

  - getToken:每小时更新一次token
- delForm_id:每天删除一次6天前的form_id
- message:每分钟执行一次发送消息

  首先,连接上服务器并打开定时任务设置。设置中的每一行就是一个定时任务,分为3个部分:

  1. 定时任务的执行时间
2. PHP执行文件的路径
3. 需要执行的PHP文件路径

  如果使用的是原生PHP,直接指向该文件即可;如果是使用ThinkPHP框架,则需要指向根目录或public目录下的index.php,后边跟上/模块/控制器/方法。

  最后,重启一下定时任务,确保所有任务正常运行。

  通过以上步骤,你就可以顺利实现小程序发送服务通知的功能了。

© 版权声明
THE END
分享