Heim > WeChat-Applet > WeChat-Entwicklung > Ausführliche Erklärung und Beispiele des Entwicklungsprozesses des PHP-Andockens der Nachrichtenschnittstelle der öffentlichen WeChat-Plattform

Ausführliche Erklärung und Beispiele des Entwicklungsprozesses des PHP-Andockens der Nachrichtenschnittstelle der öffentlichen WeChat-Plattform

高洛峰
Freigeben: 2018-05-15 14:59:40
Original
21927 Leute haben es durchsucht

Dieser Artikel stellt hauptsächlich den Entwicklungsprozess des PHP-Andockens der WeChat-Nachrichtenschnittstelle für öffentliche Plattformen vor 1. Schreiben Sie ein gutes Schnittstellenprogramm

Laden Sie eine Schnittstellenprogrammdatei mit folgendem Inhalt auf Ihren Server hoch:

Der Code lautet wie folgt:

2. Konfigurieren Sie die Antwortschnittstelle der öffentlichen WeChat-Plattform
<?php
define("TOKEN", "weixin");//自己定义的token 就是个通信的私钥
$wechatObj = new wechatCallbackapiTest();
$wechatObj->valid();
//$wechatObj->responseMsg();
class wechatCallbackapiTest
{
    public function valid()
    {
        $echoStr = $_GET["echostr"];
        if($this->checkSignature()){
            echo $echoStr;
            exit;
        }
    }
    public function responseMsg()
    {
        $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
        if (!empty($postStr)){
            $postObj = simplexml_load_string($postStr, &#39;SimpleXMLElement&#39;, LIBXML_NOCDATA);
            $fromUsername = $postObj->FromUserName;
            $toUsername = $postObj->ToUserName;
            $keyword = trim($postObj->Content);
            $time = time();
            $textTpl = "<xml>
            <ToUserName><![CDATA[%s]]></ToUserName>
            <FromUserName><![CDATA[%s]]></FromUserName>
            <CreateTime>%s</CreateTime>
            <MsgType><![CDATA[%s]]></MsgType>
            <Content><![CDATA[%s]]></Content>
            <FuncFlag>0<FuncFlag>
            </xml>";
            if(!empty( $keyword ))
            {
                $msgType = "text";
                $contentStr = &#39;你好啊,屌丝&#39;;
                $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
                echo $resultStr;
            }else{
                echo &#39;咋不说哈呢&#39;;
            }
        }else {
            echo &#39;咋不说哈呢&#39;;
            exit;
        }
    }
    private function checkSignature()
    {
        $signature = $_GET["signature"];
        $timestamp = $_GET["timestamp"];
        $nonce = $_GET["nonce"];
        $token =TOKEN;
        $tmpArr = array($token, $timestamp, $nonce);
        sort($tmpArr);
        $tmpStr = implode( $tmpArr );
        $tmpStr = sha1( $tmpStr );
        if( $tmpStr == $signature ){
            return true;
        }else{
            return false;
        }
    }
}
?>
Nach dem Login kopieren

Stellen Sie die Antwortschnittstelle ein, geben Sie die URL und das Token ein (die URL wird unter http://www.yourdomain.com/weixin ausgefüllt). php oben, und das Token muss mit dem im obigen Programm definierten Token übereinstimmen)

3. Verwenden Sie Ihren persönlichen WeChat Um Ihrem öffentlichen Konto zu folgen, senden Sie eine Nachricht an dieses Konto und empfangen Sie. Wenn die ursprüngliche Nachricht zurückgegeben wird, ist die Überprüfung erfolgreich. Ausführliche Erklärung und Beispiele des Entwicklungsprozesses des PHP-Andockens der Nachrichtenschnittstelle der öffentlichen WeChat-Plattform
4. Beginnen Sie mit der Anpassung der Antwort

Kommentieren Sie die Zeile $wechatObj->valid(); aus und entfernen Sie //$wechatObj->responseMsg() ; Kommentare zu dieser Zeile.

Sie können den Code in der Funktion „responsMsg“ ändern, um dem Benutzer je nach Nachrichtentyp („Text“, „Bild“, „Standort“) und Nachrichteninhalt mit unterschiedlichen Inhalten zu antworten.

Die Nachrichtenschnittstelle ist einsatzbereit. Versuchen wir, eine Nachricht zu senden?

1. Kapseln Sie weixin.class.php



Da die Kommunikation auf der öffentlichen WeChat-Plattform XML-Daten in einem bestimmten Format verwendet, muss dies jedes Mal erfolgen, wenn Sie akzeptieren und antworten Viel Datenverarbeitung.

Wir werden erwägen, eine Kapselung auf dieser Basis zu erstellen, weixin.class.php. Der Code lautet wie folgt:

Der Code lautet wie folgt:



2. Rufen Sie weixin.class.php auf

Fügen Sie die Hauptschnittstellendatei Ihrer öffentlichen WeChat-Plattform ein und ändern Sie den Code wie folgt:
<?php
class Weixin
{
    public $token = &#39;&#39;;//token
    public $debug =  false;//是否debug的状态标示,方便我们在调试的时候记录一些中间数据
    public $setFlag = false;
    public $msgtype = &#39;text&#39;;   //(&#39;text&#39;,&#39;image&#39;,&#39;location&#39;)
    public $msg = array();
    public function __construct($token,$debug)
    {
        $this->token = $token;
        $this->debug = $debug;
    }
    //获得用户发过来的消息(消息内容和消息类型  )
    public function getMsg()
    {
        $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
        if ($this->debug) {
                        $this->write_log($postStr);
        }
        if (!empty($postStr)) {
            $this->msg = (array)simplexml_load_string($postStr, &#39;SimpleXMLElement&#39;, LIBXML_NOCDATA);
            $this->msgtype = strtolower($this->msg[&#39;MsgType&#39;]);
        }
    }
  //回复文本消息
    public function makeText($text=&#39;&#39;)
    {
        $CreateTime = time();
        $FuncFlag = $this->setFlag ? 1 : 0;
        $textTpl = "<xml>
            <ToUserName><![CDATA[{$this->msg[&#39;FromUserName&#39;]}]]></ToUserName>
            <FromUserName><![CDATA[{$this->msg[&#39;ToUserName&#39;]}]]></FromUserName>
            <CreateTime>{$CreateTime}</CreateTime>
            <MsgType><![CDATA
            1  
            ]></MsgType>
            <Content><![CDATA[%s]]></Content>
            <FuncFlag>%s</FuncFlag>
            </xml>";
        return sprintf($textTpl,$text,$FuncFlag);
    }
    //根据数组参数回复图文消息
    public function makeNews($newsData=array())
    {
        $CreateTime = time();
        $FuncFlag = $this->setFlag ? 1 : 0;
        $newTplHeader = "<xml>
            <ToUserName><![CDATA[{$this->msg[&#39;FromUserName&#39;]}]]></ToUserName>
            <FromUserName><![CDATA[{$this->msg[&#39;ToUserName&#39;]}]]></FromUserName>
            <CreateTime>{$CreateTime}</CreateTime>
            <MsgType><![CDATA[news]]></MsgType>
            <Content><![CDATA[%s]]></Content>
            <ArticleCount>%s</ArticleCount><Articles>";
        $newTplItem = "<item>
            <Title><![CDATA[%s]]></Title>
            <Description><![CDATA[%s]]></Description>
            <PicUrl><![CDATA[%s]]></PicUrl>
            <Url><![CDATA[%s]]></Url>
            </item>";
        $newTplFoot = "</Articles>
            <FuncFlag>%s</FuncFlag>
            </xml>";
        $Content = &#39;&#39;;
        $itemsCount = count($newsData[&#39;items&#39;]);
        $itemsCount = $itemsCount < 10 ? $itemsCount : 10;//微信公众平台图文回复的消息一次最多10条
        if ($itemsCount) {
            foreach ($newsData[&#39;items&#39;] as $key => $item) {
                if ($key<=9) {
                    $Content .= sprintf($newTplItem,$item[&#39;title&#39;],$item[&#39;description&#39;],$item[&#39;picurl&#39;],$item[&#39;url&#39;]);
                }
            }
        }
        $header = sprintf($newTplHeader,$newsData[&#39;content&#39;],$itemsCount);
        $footer = sprintf($newTplFoot,$FuncFlag);
        return $header . $Content . $footer;
    }
    public function reply($data)
    {
        if ($this->debug) {
                    $this->write_log($data);
        }
        echo $data;
    }
    public function valid()
    {
        if ($this->checkSignature()) {
            if( $_SERVER[&#39;REQUEST_METHOD&#39;]==&#39;GET&#39; )
            {
                echo $_GET[&#39;echostr&#39;];
                exit;
            }
        }else{
            write_log(&#39;认证失败&#39;);
            exit;
        }
    }
    private function checkSignature()
    {
        $signature = $_GET["signature"];
        $timestamp = $_GET["timestamp"];
        $nonce = $_GET["nonce"];
        $tmpArr = array($this->token, $timestamp, $nonce);
        sort($tmpArr);
        $tmpStr = implode( $tmpArr );
        $tmpStr = sha1( $tmpStr );
        if( $tmpStr == $signature ){
            return true;
        }else{
            return false;
        }
    }
    private function write_log($log){
        //这里是你记录调试信息的地方  请自行完善   以便中间调试
    }
}
?>
Nach dem Login kopieren

Der Code lautet wie folgt:


3. Abfragecode

Sie müssen auch die Abfrageergebnisse in der Datenbank in eine bestimmte Form formatieren
<?php
include_once(&#39;weixin.class.php&#39;);//引用刚定义的微信消息处理类
define("TOKEN", "mmhelper");
define(&#39;DEBUG&#39;, true);
$weixin = new Weixin(TOKEN,DEBUG);//实例化
$weixin->getMsg();
$type = $weixin->msgtype;//消息类型
$username = $weixin->msg[&#39;FromUserName&#39;];//哪个用户给你发的消息,这个$username是微信加密之后的,但是每个用户都是一一对应的
if ($type===&#39;text&#39;) {
    if ($weixin->msg[&#39;Content&#39;]==&#39;Hello2BizUser&#39;) {//微信用户第一次关注你的账号的时候,你的公众账号就会受到一条内容为&#39;Hello2BizUser&#39;的消息
        $reply = $weixin->makeText(&#39;欢迎你关注哦,屌丝&#39;);
    }else{//这里就是用户输入了文本信息
        $keyword = $weixin->msg[&#39;Content&#39;];   //用户的文本消息内容
                include_once("chaxun.php");//文本消息 调用查询程序 
                $chaxun= new chaxun(DEBUG,$keyword,$username);
                $results[&#39;items&#39;] =$chaxun->search();//查询的代码
                $reply = $weixin->makeNews($results);
    }
}elseif ($type===&#39;location&#39;) {
      //用户发送的是位置信息  稍后的文章中会处理                 
}elseif ($type===&#39;image&#39;) {
      //用户发送的是图片 稍后的文章中会处理
}elseif ($type===&#39;voice&#39;) {    
      //用户发送的是声音 稍后的文章中会处理
}
$weixin->reply($reply);
?>
Nach dem Login kopieren

Der Code ist wie folgt:

Das obige ist der detaillierte Inhalt vonAusführliche Erklärung und Beispiele des Entwicklungsprozesses des PHP-Andockens der Nachrichtenschnittstelle der öffentlichen WeChat-Plattform. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage