Maison  >  Article  >  développement back-end  >  PHP implémente la méthode d'envoi de messages modèles dans l'applet WeChat (code)

PHP implémente la méthode d'envoi de messages modèles dans l'applet WeChat (code)

不言
不言original
2018-08-20 15:56:163129parcourir

Le contenu de cet article concerne la méthode (code) d'implémentation de l'applet WeChat pour envoyer des modèles de messages en PHP. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.

L'adresse de WeChat est :

https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token=ACCESS_TOKEN

Les paramètres pertinents sont

参数 必填 说明
touser 接收者(用户)的 openid
template_id 所需下发的模板消息的id
page 点击模板卡片后的跳转页面,仅限本小程序内的页面。支持带参数,(示例index?foo=bar)。该字段不填则模板无跳转。
form_id 表单提交场景下,为 submit 事件带上的 formId;支付场景下,为本次支付的 prepay_id
data 模板内容,不填则下发空模板
color 模板内容字体的颜色,不填默认黑色 【废弃】
emphasis_keyword 模板需要放大的关键词,不填则默认无放大

Les paramètres et adresses de base sont ceux testés ci-dessus. Certaines personnes peuvent s'interroger. form_id, openid, Parlons brièvement de l'endroit où obtenir tmeplate_id.

form_id peut être fourni par le front-end. Le front-end peut soumettre le formulaire sur chaque bouton pour obtenir le form_id et le donner au back-end. Dans le même temps, le back-end obtient l’openid correspondant. Ce qui est recommandé ici, c'est que le front-end fournisse autant que possible au back-end, c'est-à-dire que chaque bouton fournit un identifiant au back-end. Le form_id est valable 7 jours, que l'opérateur l'utilise ou non. il vaut mieux avoir plus que moins.

template_id est l'identifiant du modèle, qui peut être obtenu à partir du modèle de message en vous connectant à l'arrière-plan de l'applet WeChat.

Lorsque nous connaîtrons ces paramètres, le développeur voudra certainement le tester immédiatement, puis laisser le front-end fournir le form_id. Voici les deux prochains pièges

. Premier écueil : le form_id obtenu par l'ordinateur ne peut pas être utilisé

Le deuxième écueil : le form_id doit être obtenu à partir d'un vrai téléphone, mais le vrai téléphone doit également en ligne. Pour les projets, si le test local n'est pas lancé en ligne, vous serez invité à vérifier que le form_id n'explique pas ce point d'attention, c'est-à-dire qu'il doit être testé en ligne une fois l'examen publié avec succès. .

Parlons ensuite du code backend

<?php
 //获取accesstoken
    public function getAccessToken($appid,secret){
       $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$appid}&secret={$secret}";
        $res = $this->curl_get($url);
        $res = json_decode($res,1);
        return $res[&#39;access_token&#39;];
    }
//获取模板消息内容主体
//因为是测试所以写死,大家可以通过传参的方式获取
    public function getMsg($openid,$template_id,$form_id,$emphasis_keyword=&#39;keyword1&#39;){
        $data[&#39;data&#39;]= [&#39;keyword1&#39;=>[&#39;value&#39;=>&#39;test1&#39;,&#39;color&#39;=>&#39;&#39;],&#39;keyword2&#39;=>[&#39;value&#39;=>&#39;test2&#39;,&#39;color&#39;=>&#39;&#39;],&#39;keyword3&#39;=>[&#39;value&#39;=>&#39;test1&#39;,&#39;color&#39;=>&#39;&#39;]];//内容主体
        $data[&#39;touser&#39;] = $openid;//用户的openid
        $data[&#39;template_id&#39;] = $template_id;//从微信后台获取的模板id
        $data[&#39;form_id&#39;] = $form_id;//前端提供给后端的form_id
        $data[&#39;page&#39;] = &#39;pages/index/index&#39;;//小程序跳转页面
        $data[&#39;emphasis_keyword&#39;] = $emphasis_keyword;//选择放大的字体
        return $data;
    }
    public function send($appid,secret,$openid,$template_id,$form_id){
        $access_token = $this->getAccessToken($appid,secret);
        $send_url = &#39;https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?    access_token=&#39; . $access_token;
        $data = $this->getMsg($openid,$template_id,$form_id);
        $str = $this->curl_post($send_url,json_encode($data));
        $str = json_decode($str,1);
        return $str;
    }
    public function curl_post($url, $fields, $data_type=&#39;text&#39;)
    {
        $cl = curl_init();
        if(stripos($url, &#39;https://&#39;) !== FALSE) {
            curl_setopt($cl, CURLOPT_SSL_VERIFYPEER, FALSE);
            curl_setopt($cl, CURLOPT_SSL_VERIFYHOST, FALSE);
            curl_setopt($cl, CURLOPT_SSLVERSION, 1);
        }
        curl_setopt($cl, CURLOPT_URL, $url);
        curl_setopt($cl, CURLOPT_RETURNTRANSFER, 1 );
        curl_setopt($cl, CURLOPT_POST, true);        
        curl_setopt($cl, CURLOPT_POSTFIELDS, $fields);
        $content = curl_exec($cl);
        $status = curl_getinfo($cl);
        curl_close($cl);
        if (isset($status[&#39;http_code&#39;]) && $status[&#39;http_code&#39;] == 200) {
            if ($data_type == &#39;json&#39;) {
                $content = json_decode($content);
            }
            return $content;
        } else {
            return FALSE;
        }
    }
    public function curl_get($url, $data_type=&#39;text&#39;)
    {
        $cl = curl_init();
        if(stripos($url, &#39;https://&#39;) !== FALSE) {
            curl_setopt($cl, CURLOPT_SSL_VERIFYPEER, FALSE);
            curl_setopt($cl, CURLOPT_SSL_VERIFYHOST, FALSE);
            curl_setopt($cl, CURLOPT_SSLVERSION, 1);
        }
        curl_setopt($cl, CURLOPT_URL, $url);
        curl_setopt($cl, CURLOPT_RETURNTRANSFER, 1 );
        $content = curl_exec($cl);
        $status = curl_getinfo($cl);
        curl_close($cl);
        if (isset($status[&#39;http_code&#39;]) && $status[&#39;http_code&#39;] == 200) {
            if ($data_type == &#39;json&#39;) {
                $content = json_decode($content);
            }
            return $content;
        } else {
            return FALSE;
        }        
    }
    punblic function index(){
           $appid = &#39;xxx&#39;;//小程序appid
           $openid = &#39;xxx&#39;;//接收用户的openid
           $template_id  = &#39;xxx&#39;;//从微信后台获取的模板id
           $form_id = &#39;xxx&#39;;//七天内的formid
           $data = $this->send($appid,secret,$openid,$template_id,$form_id);
           var_dump($data);//打印测试结果
    }

Ce qui précède est le code pour envoyer des messages modèles. En fait, tant que vous obtenez quelques correspondants. paramètres, vous pouvez faire attention aux paramètres pertinents La fosse peut être testée et envoyée avec succès

Recommandations associées :

Méthode php pour implémenter l'envoi de message de modèle WeChat, message de modèle de lettre php

Réponse au message du modèle de développement PHP WeChat, réponse au message du modèle php_Tutoriel PHP

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn