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, 'SimpleXMLElement', 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 = '你好啊,屌丝'; $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr); echo $resultStr; }else{ echo '咋不说哈呢'; } }else { echo '咋不说哈呢'; 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; } } } ?>
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.
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.
Der Code lautet wie folgt:
2. Rufen Sie weixin.class.php auf
<?php class Weixin { public $token = '';//token public $debug = false;//是否debug的状态标示,方便我们在调试的时候记录一些中间数据 public $setFlag = false; public $msgtype = 'text'; //('text','image','location') 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, 'SimpleXMLElement', LIBXML_NOCDATA); $this->msgtype = strtolower($this->msg['MsgType']); } } //回复文本消息 public function makeText($text='') { $CreateTime = time(); $FuncFlag = $this->setFlag ? 1 : 0; $textTpl = "<xml> <ToUserName><![CDATA[{$this->msg['FromUserName']}]]></ToUserName> <FromUserName><![CDATA[{$this->msg['ToUserName']}]]></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['FromUserName']}]]></ToUserName> <FromUserName><![CDATA[{$this->msg['ToUserName']}]]></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 = ''; $itemsCount = count($newsData['items']); $itemsCount = $itemsCount < 10 ? $itemsCount : 10;//微信公众平台图文回复的消息一次最多10条 if ($itemsCount) { foreach ($newsData['items'] as $key => $item) { if ($key<=9) { $Content .= sprintf($newTplItem,$item['title'],$item['description'],$item['picurl'],$item['url']); } } } $header = sprintf($newTplHeader,$newsData['content'],$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['REQUEST_METHOD']=='GET' ) { echo $_GET['echostr']; exit; } }else{ write_log('认证失败'); 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){ //这里是你记录调试信息的地方 请自行完善 以便中间调试 } } ?>
Der Code lautet wie folgt:
3. Abfragecode
<?php include_once('weixin.class.php');//引用刚定义的微信消息处理类 define("TOKEN", "mmhelper"); define('DEBUG', true); $weixin = new Weixin(TOKEN,DEBUG);//实例化 $weixin->getMsg(); $type = $weixin->msgtype;//消息类型 $username = $weixin->msg['FromUserName'];//哪个用户给你发的消息,这个$username是微信加密之后的,但是每个用户都是一一对应的 if ($type==='text') { if ($weixin->msg['Content']=='Hello2BizUser') {//微信用户第一次关注你的账号的时候,你的公众账号就会受到一条内容为'Hello2BizUser'的消息 $reply = $weixin->makeText('欢迎你关注哦,屌丝'); }else{//这里就是用户输入了文本信息 $keyword = $weixin->msg['Content']; //用户的文本消息内容 include_once("chaxun.php");//文本消息 调用查询程序 $chaxun= new chaxun(DEBUG,$keyword,$username); $results['items'] =$chaxun->search();//查询的代码 $reply = $weixin->makeNews($results); } }elseif ($type==='location') { //用户发送的是位置信息 稍后的文章中会处理 }elseif ($type==='image') { //用户发送的是图片 稍后的文章中会处理 }elseif ($type==='voice') { //用户发送的是声音 稍后的文章中会处理 } $weixin->reply($reply); ?>
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!