Maison  >  Article  >  développement back-end  >  Accès à l'API PHP WeChat et réponse automatique par mot clé

Accès à l'API PHP WeChat et réponse automatique par mot clé

不言
不言original
2018-04-04 14:36:461820parcourir

Le contenu de cet article concerne l'accès à l'API PHP WeChat et la réponse automatique par mot clé. Maintenant, je le partage avec tout le monde. Les amis dans le besoin peuvent se référer au contenu de cet article

https:// blog.csdn. .net/self_realian/article/details/70849159


Classification des modes d'utilisation des comptes publics

1, mode édition : Il y a une plate-forme publique WeChat qui fournit une interface d'opération simple et visuelle pour les gestionnaires de comptes publics WeChat, principalement pour permettre aux

gestionnaires de comptes publics WeChat d'effectuer certaines opérations WeChat simples

2. appeler certaines interfaces publiques de WeChat pour terminer certaines de ses propres affaires

Étapes pour accéder à l'interface API dans l'application

1 Remplissez l'URL du serveur, jeton. (remarque : ne prend en charge que le port 80), c'est-à-dire que le service http doit être ouvert sur le port 80 pour recevoir les messages envoyés

L'url ici fait référence à l'url du serveur tiers, et sa fonction est principalement pour recevoir WeChat push Le message

Le jeton ici est le mot de passe convenu entre le développeur et la plateforme publique WeChat. Il est principalement utilisé pour vérifier la véritable légitimité du serveur tiers

. 2. Vérifiez l'adresse du serveur. Le processus de validité, de cryptage/vérification est le suivant :

(1) Triez les trois paramètres token, timestamp et nonce par ordre lexicographique (ces trois sont transmise par WeChat via la méthode get Paramètres, grâce à ces trois paramètres, vous pouvez vérifier si la demande provient de WeChat)

(2) Réunissez les trois chaînes de paramètres en une seule chaîne pour le cryptage sha1

(3) Développement La chaîne cryptée obtenue par l'utilisateur peut être comparée à la signature, indiquant que la demande provient de WeChat

3, à propos d'access_token

(1) access_token Relation avec appid et appsecre

Lorsque vous enregistrez un compte public WeChat sur la plateforme publique WeChat, la plateforme publique WeChat génère un appid et appsecred pour vous. sont vos uniques sur la plateforme publique WeChat. Identification

appid et appsecred (edd7d19a4d8c625ed1244d17f78a9165) sont utilisés pour générer access_token Access_token est en fait un mot de passe dynamique. Il est sensible au temps et valable pour une période de temps

Access_token peut également être compris comme appelant les clés publiques WeChat de certaines interfaces de la plateforme

Caractéristiques : (1) Validité unique (2) Validité globale (Quant à l'explication détaillée d'access_token, vous pouvez saisir WeChat et consultez la "Documentation du développeur")

Interface ouverte WeChat

1, obtenez access_token

2, obtenez l'adresse du serveur WeChat

Après avoir dit cela, voici la partie code. Tout d'abord, je tiens à rappeler à tous que si vous souhaitez ajouter ces fonctions par vous-même, vous devez d'abord disposer d'un nom de domaine accessible par votre propre réseau public. Si vous n'en avez pas, vous pouvez postuler. pour un sur Tencent Cloud ou Alibaba Cloud (le framework que j'utilise est ThinkPHP3.2.2)



[php] vue simple copie

<?php  
namespace Home\Controller;  
use Think\Controller;  
class IndexController extends Controller {  
    public function index(){  
        $timestamp = $_GET[&#39;timestamp&#39;];//timestamp其实就是一个时间戳  
        $nonce     = $_GET[&#39;nonce&#39;];//nonce是一个随机参数  
        $token     = "weixin";//这个token填写你在微信公众平台上写的那个值  
        $signature = $_GET[&#39;signature&#39;];//这个signature其实就是在微信公众平台已经加密好的字符串  
        $echostr   = $_GET[&#39;echostr&#39;];  
        $array     = array( $timestamp, $nonce, $token);  
        sort($array);  
  
        $tmpstr = implode(&#39;&#39;, $array);  
        $tmpstr = sha1($tmpstr);  
  
    if( $tmpstr == $signature && $echostr){  
      
            echo $echostr;  
            exit;  
        }else{  
            $this->reponseMsg();  
        }  
    }  
    public function reponseMsg(){  
        $postArr = $GLOBALS[&#39;HTTP_RAW_POST_DATA&#39;];  
        $postObj = simplexml_load_string( $postArr );  
        if( strtolower( $postObj->MsgType) == &#39;event&#39;){  
            //如果是关注事件(subscribe)  
            if( strtolower($postObj->Event == &#39;subscribe&#39;) ){  
                //回复用户消息  
                $toUser   = $postObj->FromUserName;  
                $fromUser = $postObj->ToUserName;  
                $time     = time();  
                $msgType  =  &#39;text&#39;;  
                $content  = &#39;欢迎关注 书旅and良玉 微信公众账号&#39;.$postObj->FromUserName.&#39;-&#39;.$postObj->ToUserName;  
                $template = "<xml>  
                            <ToUserName><![CDATA[%s]]></ToUserName>  
                            <FromUserName><![CDATA[%s]]></FromUserName>  
                            <CreateTime>%s</CreateTime>  
                            <MsgType><![CDATA[%s]]></MsgType>  
                            <Content><![CDATA[%s]]></Content>  
                            </xml>";  
                $info     = sprintf($template, $toUser, $fromUser, $time, $msgType, $content);  
                echo $info;  
            }  
        }  
//回复纯文本或单图文消息  
        if(($postObj->MsgType) == &#39;text&#39; && trim($postObj->Content) == &#39;夏目友人帐&#39;){  
            $toUser   = $postObj->FromUserName;  
            $fromUser = $postObj->ToUserName;  
            $arr = array(  
                array(  
                    &#39;title&#39;=>&#39;夏目友人帐&#39;,  
                    &#39;description&#39;=>"此生无悔入夏目",  
                    &#39;picUrl&#39;=>&#39;http://img4.duitang.com/uploads/item/201508/16/20150816015528_X8dKY.jpeg&#39;,  
                    &#39;url&#39;=>&#39;http://www.shulvchen.cn&#39;,  
                ),  
            );    
            $template = "<xml>  
                        <ToUserName><![CDATA[%s]]></ToUserName>  
                        <FromUserName><![CDATA[%s]]></FromUserName>  
                        <CreateTime>%s</CreateTime>  
                        <MsgType><![CDATA[%s]]></MsgType>  
                        <ArticleCount>".count($arr)."</ArticleCount>  
                        <Articles>";  
            foreach($arr as $k=>$v){  
                $template .="<item>  
                            <Title><![CDATA[".$v[&#39;title&#39;]."]]></Title>   
                            <Description><![CDATA[".$v[&#39;description&#39;]."]]></Description>  
                            <PicUrl><![CDATA[".$v[&#39;picUrl&#39;]."]]></PicUrl>  
                            <Url><![CDATA[".$v[&#39;url&#39;]."]]></Url>  
                            </item>";  
            }  
            $template .="</Articles>  
                        </xml> ";  
            echo sprintf($template, $toUser, $fromUser, time(), &#39;news&#39;);  
        }else{  
            switch( trim($postObj->Content) ){  
                case &#39;bb&#39;:  
                    $content = &#39;我喜欢你&#39;;  
                break;  
                case &#39;良玉&#39;:  
                    $content = &#39;我喜欢你&#39;;  
                break;  
                case &#39;书旅&#39;:  
                    $content = &#39;加油&#39;;  
                break;  
                case &#39;dsdf&#39;:  
                    $content = &#39;不愿错过他&#39;;  
                break;  
                case &#39;垒哥&#39;:  
                    $content = &#39;垒哥已死,有事儿烧纸&#39;;  
                break;  
                case &#39;书旅and良玉&#39;:  
                    $content = &#39;Forever with you&#39;;  
                break;  
                case &#39;学弟&#39;:  
                    $content = &#39;书旅是你学长&#39;;  
                break;  
                default:  
                    $content = "<a href=&#39;http://www.baidu.com&#39;>百度一下,你就知道(点击文字,进入百度)</a>";  
  
            }     
                $template1 = "<xml>  
                            <ToUserName><![CDATA[%s]]></ToUserName>  
                            <FromUserName><![CDATA[%s]]></FromUserName>  
                            <CreateTime>%s</CreateTime>  
                            <MsgType><![CDATA[%s]]></MsgType>  
                            <Content><![CDATA[%s]]></Content>  
                            </xml>";  
                $fromUser = $postObj->ToUserName;//消息从哪里来  
                $toUser   = $postObj->FromUserName;//发送给谁  
                $time     = time();   
                //$content  = &#39;我喜欢你&#39;;  
                $msgType  = &#39;text&#39;;  
                echo sprintf($template1, $toUser, $fromUser,$time, $msgType, $content);  
        }  
    }     
}

J'espère que ce blog sera utile aux débutants qui aiment le développement WeChat comme moi


Recommandations associées :

Exemple détaillé de la façon d'implémenter un chatbot à l'aide de l'API Python+Slack

Méthode php d'appel de l'API d'interface


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