搜尋
首頁微信小程式小程式開發如何實現小程式發送服務通知
如何實現小程式發送服務通知Jun 10, 2020 am 11:27 AM
小程式

如何實現小程式發送服務通知

如何實作小程式發送服務通知?

小程式給用戶發送訊息需要比較多的驗證,剛剛遇到這個需求可能會花較長時間研究測試,所以從基礎整理了一整套發送訊息的邏輯,為以後開發訊息通知功能提供想法,減少學習時間

發送範本訊息主要有以下幾個部分

一、取得access_token

##二、建立訊息範本

三、取得form_id

四、傳送訊息通知

五、設定定時任務

一、取得access_token

#向微信請求發送訊息時,會需要到access_token,access_token相當於是小程式的身份證,雖然有appid和appsecret這2個證明,但是微信為了保證安全性,就用了access_token這個有時效的身份證明來驗證,一條access_token只有2小時有效期,而且單個小程式1天只能請求1000次access_token,所以我們需要一套邏輯來保證access_token的可用性

https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET

只需要向上面這個地址請求就可以返回對應的access_token

根據這個介面,寫如下方法

public function test(){
$appId = '';
$appSecret = '';
$token = file_get_contents("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appId."&secret=".$appSecret);
$token = json_decode($token);
$token = $token->access_token;
db('token')->where('id',1)->update(['access_token'=>$token]);//覆盖上一条access_token
}

再設定一個定時器每小時觸發一次該介面,之後就可以隨意取出肯定能用的token了

$token = db('token')->find();
$token = $token['access_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表结构
form_id有2个条件,第一个是仅7天内有效,第二个是仅对创建form_id的用户有效,针对这2个要求建立如下表
创建时间用户id
idcreateTimeopenIdform_id
id作为主键自增不用解释
createTime作为找到过期form_id的标志,设置定时任务,删除过期form_id
openId用来找到用户自己的form_id来使用
②取到form_id
<!--pages/index/index.wxml-->
<form  report-submit=&#39;ture&#39; bindsubmit=&#39;form_id&#39;>
    <button form-type="submit">确定</button>
</form>
// pages/index/index.js
form_id: function(e) {
    wx.request({
        url: &#39;test.com/index/index/form_id&#39;,//自行替换接口
        method: "POST",
        data: {
            form_id: e.detail.formId,
            openId: openId//自行获取当前用户openId
        },
        header: {
            &#39;content-type&#39;: &#39;application/x-www-form-urlencoded&#39;
        }
    })
},
//test.com/index/index/form_id
public function form_id(){
    if (empty($_POST)) {die;}
    $form_id = $_POST[&#39;form_id&#39;];
    if ($form_id == &#39;the formId is a mock one&#39;){die;}//过滤开发工具生成的form_id
    $openId = $_POST[&#39;openId&#39;];
    if (!$openId) {die;}
    $data = compact(&#39;form_id&#39;,&#39;openId&#39;);
    db(&#39;form_id&#39;)->insert($data);
}
③使用form_id
public function test(){
    $openId = &#39;&#39;;
    $form_id = db(&#39;form_id&#39;)->where(&#39;openId&#39;,$openId)->order(&#39;id&#39;)->field(&#39;form_id&#39;)->find();
    $form_id = $form_id[&#39;form_id&#39;];
}
④定时删除过期form_id
public function test(){
    $time = time()-518400;//保证form_id可用性删除6天前的form_id
    db(&#39;form_id&#39;)->where(&#39;createTime&#39;,&#39;<&#39;,$time)->delete();
    //将该方法每天执行一次
}

四、發送訊息通知

當access_token和form_id都保證可用之後,就可以給用戶發送訊息通知了

public function message($data){
    //获取form_id
    $form_id = db(&#39;form_id&#39;)->where(&#39;openId&#39;,$openId)->order(&#39;id&#39;)->find();
    if (!$form_id) {die;}
    $form_id = $form_id[&#39;form_id&#39;];
    db(&#39;form_id&#39;)->where(&#39;form_id&#39;,$form_id)->delete();
    //获取access_token
    $access_token = db(&#39;token&#39;)->where(&#39;id&#39;,1)->find();
    $access_token = $access_token[&#39;access_token&#39;];
    //获取消息内容
    $openId = $data[&#39;openId&#39;];
    $title = $data[&#39;title&#39;];
    $data1 = $data[&#39;data1&#39;];
    $data2 = $data[&#39;data2&#39;];
    $request_url=&#39;https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token=&#39;.$access_token;
    $request_data=[
        &#39;touser&#39; => $openId,
        &#39;template_id&#39; => &#39;&#39;,//表id
        &#39;page&#39;  =>  &#39;pages/test/test?data1=&#39;.$data1.&#39;&data2=&#39;.$data2,//本消息点击后跳转到的页面
        "form_id"   =>  $form_id,
        &#39;data&#39;  =>  [
            &#39;keyword1&#39;  =>  [
                &#39;value&#39; =>  $title
            ],
            &#39;keyword2&#39;  =>  [
                &#39;value&#39; =>  $data1
            ],
            &#39;keyword3&#39;  =>  [
                &#39;value&#39; =>  $data2
            ]
        ],
        &#39;emphasis_keyword&#39;  =>  "keyword1.DATA"//消息中要放大的内容
    ];
    $return=json_decode($this->request($request_url,$request_data),true);//发送消息,并读取返回值
    return $return;
}
//上面的$this->request方法
public function request($url, $data=null)
{
    $headers=array(&#39;Content-type:application/json;charset=UTF-8&#39;,&#39;Accept:application/json&#39;,&#39;Cache-Control:no-cache&#39;,&#39;Pragma:no-cache&#39;);
    $curl=curl_init();
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
    if (!empty($data)) {
        $data=json_encode($data);
        curl_setopt($curl, CURLOPT_POST, 1);
        curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
    }
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
    $output=curl_exec($curl);
    curl_close($curl);
    return $output;
}

五、設定定時任務

為了保證上述操作都能順利進行,我們需要設定幾個定時任務來幫助訊息發送,先假設有幾個方法

getToken //每小時更新一次token

delForm_id //每天刪除一次6天前的form_id

message //每分鐘執行一次發送訊息

##首先連接上伺服器開啟定時任務設定
crontab -e

設定中的每一行就是一個定時任務,分成3個部分

1.* * * * *
这5个参数分别表示定时任务的执行时间,每个参数与上个参数隔一个空格,分别为(分)(时)(天)(月)(星期),下面举例子
* * * * *//每分钟执行一次
0 * * * *//每小时的第0分钟执行一次
*/5 * * * *//每5分钟执行一次
* 23 * * *//每天的23点执行一次
* * 1 * *//每月1号执行一次
* * * */2 *//每2个月执行一次
0 0 * * 6//每周6的0点0分执行一次

2.

/usr/bin/php

#這是php執行檔的路徑,如果cd到該路徑,給php執行檔路徑就會執行php檔,可以用來測試php檔是否可以設定定時任務

注意,這個路徑只是一個快捷方式,真正的php執行檔在

/usr/local/php/bin/php

/usr/local/php(版本號)/ bin/php,如果在bin下方沒有建立捷徑請自行建立3./專案路徑/執行檔

這是需要執行的php檔案路徑,如果寫的是原生php,直接指到該檔案即可,如果是用thinkphp框架寫的,那需要指到根目錄或是public目錄下的index.php,後邊跟上/模組/控制器/方法

#知道這3點我們就可以寫出上述3個定時任務

* */1 * * */usr/bin/php /项目路径/index.php /index/index/getToken
* 4 * * */usr/bin/php /项目路径/index.php /index/index/delForm_id
* * * * */usr/bin/php /项目路径/index.php /index/index/message

最後,重啟一下定時任務

//CentOS5/CentOS6
/sbin/service crond restart
//CentOS7
/bin/systemctl restart crond.service

相關推薦:

小程式教學

以上是如何實現小程式發送服務通知的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
使用Python开发微信小程序使用Python开发微信小程序Jun 17, 2023 pm 06:34 PM

随着移动互联网技术和智能手机的普及,微信成为了人们生活中不可或缺的一个应用。而微信小程序则让人们可以在不需要下载安装应用的情况下,直接使用小程序来解决一些简单的需求。本文将介绍如何使用Python来开发微信小程序。一、准备工作在使用Python开发微信小程序之前,需要安装相关的Python库。这里推荐使用wxpy和itchat这两个库。wxpy是一个微信机器

小程序能用react吗小程序能用react吗Dec 29, 2022 am 11:06 AM

小程序能用react,其使用方法:1、基于“react-reconciler”实现一个渲染器,生成一个DSL;2、创建一个小程序组件,去解析和渲染DSL;3、安装npm,并执行开发者工具中的构建npm;4、在自己的页面中引入包,再利用api即可完成开发。

Java语言中的微信小程序开发介绍Java语言中的微信小程序开发介绍Jun 09, 2023 pm 10:40 PM

微信小程序是一种轻量级的应用程序,可以在微信平台上运行,不需要下载安装,方便快捷。Java语言作为一种广泛应用于企业级应用开发的语言,也可以用于微信小程序的开发。在Java语言中,可以使用SpringBoot框架和第三方工具包来开发微信小程序。下面是一个简单的微信小程序开发过程。创建微信小程序首先,需要在微信公众平台上注册一个小程序。注册成功后,可以获取到

用Python编写简单的聊天程序教程用Python编写简单的聊天程序教程May 08, 2023 pm 06:37 PM

实现思路x01服务端的建立首先,在服务端,使用socket进行消息的接受,每接受一个socket的请求,就开启一个新的线程来管理消息的分发与接受,同时,又存在一个handler来管理所有的线程,从而实现对聊天室的各种功能的处理x02客户端的建立客户端的建立就要比服务端简单多了,客户端的作用只是对消息的发送以及接受,以及按照特定的规则去输入特定的字符从而实现不同的功能的使用,因此,在客户端这里,只需要去使用两个线程,一个是专门用于接受消息,一个是专门用于发送消息的至于为什么不用一个呢,那是因为,只

PHP与小程序的地理位置定位与地图显示PHP与小程序的地理位置定位与地图显示Jul 04, 2023 pm 04:01 PM

PHP与小程序的地理位置定位与地图显示地理位置定位与地图显示在现代科技中已经成为了必备的功能之一。随着移动设备的普及,人们对于定位和地图显示的需求也越来越高。在开发过程中,PHP和小程序是常见的两种技术选择。本文将为大家介绍PHP与小程序中的地理位置定位与地图显示的实现方法,并附上相应的代码示例。一、PHP中的地理位置定位在PHP中,我们可以使用第三方地理位

教你如何在小程序中用公众号模板消息(附详细思路)教你如何在小程序中用公众号模板消息(附详细思路)Nov 04, 2022 pm 04:53 PM

本篇文章给大家带来了关于微信小程序的相关问题,其中主要介绍了如何在小程序中用公众号模板消息,下面一起来看一下,希望对大家有帮助。

小程序中文件上传的PHP实现方法小程序中文件上传的PHP实现方法Jun 02, 2023 am 08:40 AM

随着小程序的广泛应用,越来越多的开发者需要将其与后台服务器进行数据交互,其中最常见的业务场景之一就是上传文件。本文将介绍在小程序中实现文件上传的PHP后台实现方法。一、小程序中的文件上传在小程序中实现文件上传,主要依赖于小程序APIwx.uploadFile()。该API接受一个options对象作为参数,其中包含了要上传的文件路径、需要传递的其他数据以及

苏州健康码的小程序叫什么苏州健康码的小程序叫什么Oct 24, 2022 am 09:47 AM

苏州健康码的小程序叫“苏康码”,它是苏州市疫情防控指挥部指定的通行服务码,疫情防控期间在全市范围内通用,可以作为广大民众日常出行的重要凭证,同时作为防疫人员查验的主要依据;也是省内所有来苏逗苏人员以及在苏工作学习生活,旅游或临时停留人员申报的键康申报数据为基础,结合相关数据比对后动态生成的个人电子健康凭证。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前By尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),