Envoi de messages modèles WeChat aux utilisateurs spécifiés en PHP

De nombreux développeurs demandent s'il est possible d'envoyer des messages aux utilisateurs via l'API des公众号 WeChat. Deux options existent : les messages de service client qui nécessitent une interaction avec l'utilisateur dans les 48 heures, et les messages modèles qui n'ont pas de contrainte temporelle mais nécessitent l'utilisation d'un modèle prédéfini. Voici un aperçu du résultat :

Comment mettre en place les messages modèles WeChat ?

Tout d'abord, accédez au menu "Fonctions" de la plateforme d'administration WeChat et sélectionnez "Messages modèles". Si cette option n'est pas visible, ajoutez le plugin depuis la section des plugins.

После добавления du plugin, vous pouvez choisir un modèle dans la bibliothèque ou en créer un personnalisé. Notez bien l'ID du modèle car il sera utilisé dans votre code PHP.

Règles d'appel de l'API :

http méthode: POST
https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN

Format des données à envoyer ? Les données doivent être au format JSON. Exemple :

JSON :

{
    "touser": "OPENID du destinataire",
    "template_id": "ID du modèle",
    "url": "URL de redirection après clic",
    "data": {
        "first": {
            "value": "Bonjour! Un visiteur vous a laissé un message.",
            "color": "#173177"
        },
        "user": {
            "value": "Jean",
            "color": "#FF0000"
        },
        "ask": {
            "value": "Bonjour, je m'intéresse à votre formation, avez-vous des tutoriels ?",
            "color": "#173177"
        },
        "remark": {
            "value": "Cet utilisateur est inscrit depuis 12 jours",
            "color": "blue"
        }
    }
}

Voici comment envoyer ces données via PHP. Au lieu d'utiliesr une chaîne JSON directe, vous pouvez utiliser un tableau PHP qui sera converti :

class MessageModeleWeChat
{
    const POINT_ACCES_API = 'https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=';
    
    /**
     * Récupère le jeton d'accès
     * @return string Jeton d'accès
     */
    private function recupererJeton(): string
    {
        // Implémentation selon votre système
        return $this->jetonAcces;
    }
    
    /**
     * Envoie un message modèle à un utilisateur
     * @param string $identifiantUtilisateur OpenID du destinataire
     * @return string Réponse de l'API
     */
    public function envoyer(string $identifiantUtilisateur): string
    {
        $jeton = $this->recupererJeton();
        $urlApi = self::POINT_ACCES_API . $jeton;
        
        $donnees = [
            'touser' => $identifiantUtilisateur,
            'template_id' => 'Oblr5uXH_fS79gMC8E0mYz0CpUAHnJtdvAC3PWABrsk',
            'url' => 'https://exemple.com/details',
            'data' => [
                'first' => [
                    'value' => 'Bonjour! Un visiteur vous a laissé un message.',
                    'color' => '#173177'
                ],
                'user' => [
                    'value' => 'Jean',
                    'color' => '#FF0000'
                ],
                'ask' => [
                    'value' => 'Bonjour, je m\'intéresse à votre formation',
                    'color' => '#173177'
                ],
                'remark' => [
                    'value' => 'Cet utilisateur est inscrit depuis 12 jours',
                    'color' => 'blue'
                ]
            ]
        ];
        
        $json = json_encode($donnees, JSON_UNESCAPED_UNICODE);
        return $this->executerRequeteCurl($urlApi, $json);
    }
    
    /**
     * Exécute une requête CURL POST
     * @param string $url URL de l'API
     * @param string $donnees Données JSON à envoyer
     * @return string Réponse de la requête
     */
    private function executerRequeteCurl(string $url, string $donnees): string
    {
        $gestionnaire = curl_init();
        
        $options = [
            CURLOPT_URL => $url,
            CURLOPT_HEADER => false,
            CURLOPT_SSL_VERIFYPEER => false,
            CURLOPT_SSL_VERIFYHOST => false,
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_POST => true,
            CURLOPT_POSTFIELDS => $donnees
        ];
        
        curl_setopt_array($gestionnaire, $options);
        $resultat = curl_exec($gestionnaire);
        curl_close($gestionnaire);
        
        return $resultat;
    }
}

// Utilisation
$messagerie = new MessageModeleWeChat();
$identifiant = 'openid_du_destinataire';
echo $messagerie->envoyer($identifiant);

Publié le 17 juillet à 09h41