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 Nachrichtenvorlage4. Nachrichtenbenachrichtigung senden2 Erstellen Sie eine Nachrichtenvorlage1 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_tokenSie müssen nur die obige Adresse anfordern, um das entsprechende access_token zurückzugebenSchreiben Sie entsprechend dieser Schnittstelle die folgende Methodehttps://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRETNach dem Login kopierenund 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 sollpublic 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 }Nach dem Login kopieren$token = db('token')->find(); $token = $token['access_token'];Nach dem Login kopieren
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 abrufenUm 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='ture' bindsubmit='form_id'> <button form-type="submit">确定</button> </form> // 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' } }) }, //test.com/index/index/form_id public function form_id(){ if (empty($_POST)) {die;} $form_id = $_POST['form_id']; if ($form_id == 'the formId is a mock one'){die;}//过滤开发工具生成的form_id $openId = $_POST['openId']; if (!$openId) {die;} $data = compact('form_id','openId'); db('form_id')->insert($data); } ③使用form_id public function test(){ $openId = ''; $form_id = db('form_id')->where('openId',$openId)->order('id')->field('form_id')->find(); $form_id = $form_id['form_id']; } ④定时删除过期form_id public function test(){ $time = time()-518400;//保证form_id可用性删除6天前的form_id db('form_id')->where('createTime','<',$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('form_id')->where('openId',$openId)->order('id')->find(); if (!$form_id) {die;} $form_id = $form_id['form_id']; db('form_id')->where('form_id',$form_id)->delete(); //获取access_token $access_token = db('token')->where('id',1)->find(); $access_token = $access_token['access_token']; //获取消息内容 $openId = $data['openId']; $title = $data['title']; $data1 = $data['data1']; $data2 = $data['data2']; $request_url='https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token='.$access_token; $request_data=[ 'touser' => $openId, 'template_id' => '',//表id 'page' => 'pages/test/test?data1='.$data1.'&data2='.$data2,//本消息点击后跳转到的页面 "form_id" => $form_id, 'data' => [ 'keyword1' => [ 'value' => $title ], 'keyword2' => [ 'value' => $data1 ], 'keyword3' => [ 'value' => $data2 ] ], 'emphasis_keyword' => "keyword1.DATA"//消息中要放大的内容 ]; $return=json_decode($this->request($request_url,$request_data),true);//发送消息,并读取返回值 return $return; } //上面的$this->request方法 public function request($url, $data=null) { $headers=array('Content-type:application/json;charset=UTF-8','Accept:application/json','Cache-Control:no-cache','Pragma:no-cache'); $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 StundedelForm_id //Formular_id vor 6 Tagen einmal am Tag löschenmessage //Nachricht einmal pro Minute sendenZuerst 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 TeileBeachten Sie, dass dieser Pfad ist nur eine Verknüpfung, die echte ausführbare PHP-Datei befindet sich in2.1.* * * * * 这5个参数分别表示定时任务的执行时间,每个参数与上个参数隔一个空格,分别为(分)(时)(天)(月)(星期),下面举例子 * * * * *//每分钟执行一次 0 * * * *//每小时的第0分钟执行一次 */5 * * * *//每5分钟执行一次 * 23 * * *//每天的23点执行一次 * * 1 * *//每月1号执行一次 * * * */2 *//每2个月执行一次 0 0 * * 6//每周6的0点0分执行一次Nach dem Login kopierenDies 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.
oder
(Versionsnummer). Wenn unter bin keine Verknüpfung erstellt wurde, erstellen Sie sie bitte selbst
3./ Projektpfad/Ausführungsdatei /usr/bin/php
* */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/php
Schließlich, Starten Sie die geplante Aufgabe neu/usr/local/php
//CentOS5/CentOS6 /sbin/service crond restart //CentOS7 /bin/systemctl restart crond.service
/bin/php
Verwandte 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!