Heim  >  Artikel  >  WeChat-Applet  >  PHP-Entwicklung WeChat-Beispielcode für die öffentliche Plattformschnittstelle Smart Reply

PHP-Entwicklung WeChat-Beispielcode für die öffentliche Plattformschnittstelle Smart Reply

高洛峰
高洛峰Original
2017-03-20 14:10:302245Durchsuche

In diesem Artikel wird hauptsächlich die intelligente Antwortentwicklung der PHP-Version der Schnittstelle der öffentlichen WeChat-Plattform vorgestellt. Er kombiniert das Beispielformular mit einer detaillierteren Analyse des Prinzips der Nur-Antwort-Funktion und der Spezifische Implementierungstechniken für Anrufe über die WeChat-Schnittstelle. Freunde in Not können sich auf

Dieser Artikel beschreibt die Implementierungsmethode der Smart-Reply-Funktion in der PHP-Version der WeChat-Schnittstellenentwicklung für öffentliche Plattformen. Teilen Sie es als Referenz mit allen. Die Details lauten wie folgt:

Eine intelligente Antwort besteht darin, dem Benutzer eine Rückmeldung über die Ergebnisse zu geben, die auf den vom Benutzer eingegebenen Bedingungen basiert. Dieser Editor hat zuvor einige Beispiele für Sie geschrieben und zusammengestellt Referenz. Es ist relativ vollständig.

WeChat erfreut sich seit seiner Einführung großer Beliebtheit, und die Einführung der Zahlungsfunktion hat WeChat auf eine beispiellose Höhe gebracht, und Menschen, die sich für WeChat-Abonnementkonten oder -Dienstkonten beworben haben, schlossen sich in Scharen an. Jetzt werde ich Ihnen kurz die Entwicklungsschnittstelle der öffentlichen WeChat-Plattform erläutern.

Gehen Sie zunächst zur öffentlichen WeChat-Plattform, um ein Konto zu beantragen, und folgen Sie dann den Anweisungen Schritt für Schritt. Bei der Auswahl eines Abonnementkontos und eines Dienstkontos können Einzelpersonen nur ein Abonnementkonto beantragen, das auf grundlegende Funktionen beschränkt ist, während Unternehmen beides beantragen können. Der Unterschied zwischen einem Abonnementkonto und einem Dienstkonto besteht darin, dass ein Abonnementkonto eine Nachricht pro Tag senden kann, während ein Abonnementkonto nur eine Nachricht pro Monat senden kann, um das Menü anzupassen (Für Unternehmen ist eine Zertifizierung erforderlich, und die Zertifizierung kostet 300 Yuan pro Mal.) Das Dienstkonto verfügt zwar von Anfang an über ein benutzerdefiniertes Menü, kann aber auch authentifiziert werden. Nach der Authentifizierung kann das Dienstkonto direkt auf erweiterte Funktionen aktualisiert werden. Weitere Unterschiede finden Sie bei Baidu...

Ich habe ein Abonnementkonto beantragt, weil ich eine Einzelperson bin. Schicken Sie einfach ein Foto von Ihrem Gesicht, auf dem Sie Ihren Ausweis halten, obwohl es etwas albern ist. Warten Sie dann auf die Überprüfung der Informationsregistrierung (etwa einen Tag). Rufen Sie nach dem Bestehen direkt die öffentliche WeChat-Plattform auf, klicken Sie auf die Funktion, um die erweiterte Funktion aufzurufen, deaktivieren Sie den Bearbeitungsmodus, aktivieren Sie den Entwicklungsmodus, laden Sie dann die von WeChat bereitgestellte Demo herunter, entpacken Sie sie und Holen Sie sich eine Datei: wx_sample.php, der Code lautet wie folgt:

<?php
/**
 * wechat php test
 */
//define your token
define("TOKEN", "weixin");
$wechatObj = new wechatCallbackapiTest();
$wechatObj->valid();
class wechatCallbackapiTest
{
 public function valid()
  {
    $echoStr = $_GET["echostr"];
    //valid signature , option
    if($this->checkSignature()){
     echo $echoStr;
     exit;
    }
  }
  public function responseMsg()
  {
 //get post data, May be due to the different environments
 $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
    //extract post data
 if (!emptyempty($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(!emptyempty( $keyword ))
        {
        $msgType = "text";
         $contentStr = "Welcome to wechat world!";
         $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
         echo $resultStr;
        }else{
         echo "Input something...";
        }
    }else {
     echo "";
     exit;
    }
  }
 private function checkSignature()
 {
    $signature = $_GET["signature"];
    $timestamp = $_GET["timestamp"];
    $nonce = $_GET["nonce"];
 $token = TOKEN;
 $tmpArr = array($token, $timestamp, $nonce);
 sort($tmpArr, SORT_STRING);
 $tmpStr = implode( $tmpArr );
 $tmpStr = sha1( $tmpStr );
 if( $tmpStr == $signature ){
  return true;
 }else{
  return false;
 }
 }
}
?>

Tatsächlich handelt es sich um eine Authentifizierung und sendet dann die Nachricht. Übertragen Sie die Datei auf Ihren Server, lege sie im Stammverzeichnis ab und ändere dann die URL- und Token-Werte im Entwicklungsmodus. Angenommen, die hier verwendete URL ist http://www.jb51.net/wx_sample.php und das Token ist das oben definierte Token. Dies kann geändert werden, solange beide Seiten konsistent sind. Der Standardwert ist weixin. Klicken Sie dann auf „Senden“ und Sie erhalten die Meldung, dass der Vorgang erfolgreich war. Scannen Sie dann die von Ihnen beantragte Nummer und senden Sie eine Nachricht. Zu diesem Zeitpunkt müssen wir die Anrufauthentifizierungsmethode deaktivieren und die Anrufmethode aktivieren die Antwortinformationen:

//$wechatObj->valid();
$wechatObj->responseMsg();

Wenn Sie zu diesem Zeitpunkt eine Nachricht senden, erhalten Sie: Willkommen in der Wechat-Welt!

Nachdem Sie einigen Abonnementkonten oder Dienstkonten gefolgt sind, erhalten Sie eine Nachricht sofort. Was soll ich antworten 1, wie und so weiter; Antwort 2, wie und so weiter.

Wie erreicht man das? Geben Sie den Code direkt ein:

checkSignature()){
      echo $echoStr;
      exit;
    }
  }
  public function responseMsg()
  {
    //get post data, May be due to the different environments
    $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
    //extract 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();
      $MsgType = $postObj->MsgType; //add
      $textTpl = "
        
        
        %s
        
        
        0
        ";
      if($MsgType != 'event') {
        if(!empty( $keyword ))
        {
          $msgType = "text";
          $contentStr = "Welcome to wechat world!";
        }else{
          echo "Input something...";
        }
      } else {
        $msgType = "text";
        $contentStr = "感谢您关注AndyYang个人博客微信小助手。\r\n".
          "回复【1】返回两篇最新文章\r\n".
          "回复【2】返回两篇人气文章\r\n".
          "回复【3】返回两篇热评文章\r\n".
          "回复【4】返回两篇最新技术文章\r\n".
          "回复【5】返回两篇最新写作文章\r\n".
          "回复其他返回搜索关键字的两篇文章\r\n".
          "更多精彩内容,尽在:www.jb51.net。亲们,请多多支持哦,谢谢~";
        ;
      }
      $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
      echo $resultStr;
    }else {
      echo "";
      exit;
    }
  }
  private function checkSignature()
  {
    $signature = $_GET["signature"];
    $timestamp = $_GET["timestamp"];
    $nonce = $_GET["nonce"];
    $token = TOKEN;
    $tmpArr = array($token, $timestamp, $nonce);
    sort($tmpArr, SORT_STRING); //这个在新的sdk中添加了第二个参数(compare items as strings)
    $tmpStr = implode( $tmpArr );
    $tmpStr = sha1( $tmpStr );
    if( $tmpStr == $signature ){
      return true;
    }else{
      return false;
    }
  }
}

Dies ist natürlich nur eine einfache Implementierung, die auf der öffentlichen WeChat-Plattform vorgenommen wird. Tatsächlich gibt es viele msgtype-Typen Typ ist Ereignis, es gibt auch Abonnement, STANDORT usw. Wenn Sie es verfeinern möchten, verwenden Sie Ereignis als Abonnement, um das erste Ereignis von Interesse zu verarbeiten. Der Code lautet wie folgt:

<?php
define("TOKEN", "weixin");
$wechatObj = new wechatCallbackapiTest();
$wechatObj->weixin_run();
class wechatCallbackapiTest {
  private $fromUsername;
  private $toUsername;
  private $times;
  private $keyword;
  private $MsgType;
  public function responseMsg() {
 $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
 if (!emptyempty($postStr)) {
      $postObj = simplexml_load_string($postStr, &#39;SimpleXMLElement&#39;, LIBXML_NOCDATA);
      $this->fromUsername = $postObj->FromUserName;
      $this->toUsername  = $postObj->ToUserName;
      $this->keyword   = trim($postObj->Content);
      $this->time     = time();
      $this->MsgType   = $postObj->MsgType;
    } else {
     echo "Pay attention to <a href=&#39;http://{$_SERVER[&#39;HTTP_HOST&#39;]}&#39;>http://{$_SERVER[&#39;HTTP_HOST&#39;]}</a>,thanks!";
     exit;
    }
  }
  public function weixin_run() {
    $this->responseMsg();
    if($this->MsgType != &#39;event&#39;) { //attention
      $data = $this->getData();
     $this->fun_xml("news", $data, count($data));
    } else {
      $data = $this->getWelData();
     $this->fun_xml("text", $data, 1);
    }
  }
 //type: text 文本类型, news 图文类型
 //text,array(内容),array(ID)
 //news,array(array(标题,介绍,图片,超链接),...小于10条),条数
 private function fun_xml($type, $value_arr, $count) {
   $con="<xml>
   <ToUserName><![CDATA[{$this->fromUsername}]]></ToUserName>
   <FromUserName><![CDATA[{$this->toUsername}]]></FromUserName>
   <CreateTime>{$this->times}</CreateTime>
   <MsgType><![CDATA[{$type}]]></MsgType>";
    switch($type) {
     case "text" :
   $con.="<Content><![CDATA[$value_arr]]></Content>";
     break;
   case "news" :
   $con.="<ArticleCount>{$count}</ArticleCount>
    <Articles>";
   foreach($value_arr as $key => $v) {
      $con.="<item>
       <Title><![CDATA[{$v[0]}]]></Title>
       <Description><![CDATA[{$v[1]}]]></Description>
       <PicUrl><![CDATA[{$v[2]}]]></PicUrl>
       <Url><![CDATA[{$v[3]}]]></Url>
       </item>";
   }
   $con.="</Articles>";
     break;
   }
   echo $con."</xml>";
 }
  private function getData() {
    //数据库通过关键字查询文章
    //。。。。。。。。。。。。
    //。。。。。。。。。。。。
    //返回文章结果的数组
    return $data;
  }
  private function getWelData() {
    $data = "感谢您关注AndyYang个人博客微信小助手。\r\n".
          "回复【1】返回两篇最新文章\r\n".
          "回复【2】返回两篇人气文章\r\n".
          "回复【3】返回两篇热评文章\r\n".
          "回复【4】返回两篇最新技术文章\r\n".
          "回复【5】返回两篇最新写作文章\r\n".
          "回复其他返回搜索关键字的两篇文章\r\n".
          "更多精彩内容,尽在:<a href=&#39;http://www.jb51.net/&#39;>www.jb51.net</a>。亲们,请多多支持哦,谢谢~";
        ;
    return $data;
  }
}

Um ehrlich zu sein Ich möchte unbedingt ein Dienstkonto zum Spielen haben. Es gibt keinen technischen Inhalt, aber die folgenden Dienste wie WeChat-Zahlung und das einzige Dienstkonto sind einen Versuch wert

Das obige ist der detaillierte Inhalt vonPHP-Entwicklung WeChat-Beispielcode für die öffentliche Plattformschnittstelle Smart Reply. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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