Heim  >  Artikel  >  WeChat-Applet  >  So implementieren Sie ein Miniprogramm zum Versenden von Servicebenachrichtigungen

So implementieren Sie ein Miniprogramm zum Versenden von Servicebenachrichtigungen

WJ
WJOriginal
2020-06-10 11:27:546430Durchsuche

So implementieren Sie ein Miniprogramm zum Versenden von Servicebenachrichtigungen

Wie implementiert man das Miniprogramm zum Versenden von Servicebenachrichtigungen?

Das Senden von Nachrichten an Benutzer über kleine Programme erfordert viel Überprüfung. Wenn Sie nur auf diese Anforderung stoßen, müssen Sie möglicherweise lange recherchieren und testen. Daher habe ich eine vollständige Logik zusammengestellt zum Senden von Nachrichten aus den Grundlagen für die zukünftige Entwicklung. Die Nachrichtenbenachrichtigungsfunktion liefert Ideen und verkürzt die Lernzeit. Das Senden von Vorlagennachrichten besteht hauptsächlich aus den folgenden Teilen: 1. Erhalten Sie ein Zugriffstoken

2. Erstellen Sie eine Nachrichtenvorlage

4. Nachrichtenbenachrichtigung senden

1 access_token

Wenn Sie eine Nachricht an WeChat senden möchten, benötigen Sie access_token, das der ID-Karte des Miniprogramms entspricht, um dies sicherzustellen Aus Sicherheitsgründen verwendet WeChat zur Überprüfung ein Access_token, ein zeitlich begrenztes Identitätszertifikat. Ein Access_token ist nur 2 Stunden lang gültig und ein einzelnes Applet kann Access_token nur 1000 Mal am Tag anfordern. Daher benötigen wir eine Reihe von Logiken, um die Verfügbarkeit sicherzustellen von access_token

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

Sie müssen nur die obige Adresse anfordern, um das entsprechende access_token zurückzugeben

Schreiben Sie entsprechend dieser Schnittstelle die folgende Methode

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
}

und stellen Sie dann einen Timer ein Lösen Sie die Schnittstelle jede Stunde aus, und dann können Sie den Token herausnehmen, der sicher nach Belieben verwendet werden soll

$token = db('token')->find();
$token = $token['access_token'];

2 Erstellen Sie eine Nachrichtenvorlage

Es gibt eine Registerkarte „Vorlagennachricht“ in der linken Spalte der öffentlichen WeChat-Plattform des Miniprogramms. Sie müssen lediglich eine Vorlagennachricht gemäß dem Dokument hinzufügen, um die entsprechende Vorlagen-ID zu erhalten. Dieser Schritt wird grundsätzlich von der Webseite ohne weitere Anzeige ausgeführt

3. Formular-ID abrufen

Um zu verhindern, dass Miniprogramme den Benutzern zu viel antun, gibt es bei WeChat-Nachrichtenbenachrichtigungen eine Einschränkung für Nachrichtenbenachrichtigungen. Jedes Mal, wenn eine Nachrichtenbenachrichtigung gesendet wird. Es ist eine form_id oder prepay_id erforderlich. prepay_id ist die vom Benutzer nach Verwendung der WeChat-Zahlung zurückgegebene ID, die in diesem Artikel nicht im Detail erläutert wird.

form_id ist die an die Schaltfläche gebundene ID. Immer wenn der Benutzer auf die gebundene Schaltfläche klickt, wird eine form_id zurückgegeben. Die Gültigkeitsdauer einer form_id beträgt 7 Tage und die form_id jedes Benutzers kann nur für diesen Benutzer verwendet werden. Daher benötigen wir eine spezielle Logik zum Speichern und Verwenden von 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();
    //将该方法每天执行一次
}

4. Nachrichtenbenachrichtigung sendenWenn access_token und form_id garantiert verfügbar sind, können Sie eine Nachrichtenbenachrichtigung an den Benutzer senden

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;
}

5. Geplante Aufgaben einrichten

Um sicherzustellen, dass die oben genannten Vorgänge reibungslos ablaufen können, müssen wir mehrere geplante Aufgaben einrichten, die beim Senden von Nachrichten helfen. Nehmen wir zunächst an, dass es mehrere Methoden gibt

getToken //Token aktualisieren jede Stunde

delForm_id //Formular_id vor 6 Tagen einmal am Tag löschen

message //Nachricht einmal pro Minute senden

Zuerst eine Verbindung zum Server herstellen und öffnen Einstellungen für geplante Aufgaben

crontab -e
Jede Zeile in den Einstellungen ist eine geplante Aufgabe, unterteilt in 3 Teile

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

2.

Dies ist die PHP-Ausführung. Der Pfad der Wenn Sie auf diesen Pfad klicken, wird die PHP-Datei ausgeführt, wenn der Pfad zur PHP-Ausführungsdatei angegeben ist. Sie kann verwendet werden, um zu testen, ob die PHP-Datei eine geplante Aufgabe festlegen kann.

Beachten Sie, dass dieser Pfad ist nur eine Verknüpfung, die echte ausführbare PHP-Datei befindet sich in

oder

(Versionsnummer)

. Wenn unter bin keine Verknüpfung erstellt wurde, erstellen Sie sie bitte selbst

3./ Projektpfad/Ausführungsdatei /usr/bin/php

Dies ist der Pfad zur PHP-Datei, die ausgeführt werden muss. Wenn Sie natives PHP schreiben, verweisen Sie einfach auf die Datei. Wenn Sie mit dem thinkphp-Framework schreiben, benötigen Sie um auf index.php im Stammverzeichnis oder im öffentlichen Verzeichnis zu verweisen, gefolgt von /Module/Controller/Method

Wenn wir diese 3 Punkte kennen, können wir die oben genannten 3 geplanten Aufgaben schreiben

* */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
/usr/local/php/bin/phpSchließlich, Starten Sie die geplante Aufgabe neu/usr/local/php
//CentOS5/CentOS6
/sbin/service crond restart
//CentOS7
/bin/systemctl restart crond.service
/bin/phpVerwandte Empfehlungen:

Miniprogramm-Tutorial

Das obige ist der detaillierte Inhalt vonSo implementieren Sie ein Miniprogramm zum Versenden von Servicebenachrichtigungen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn