Maison  >  Article  >  Applet WeChat  >  Développement php Interface de plate-forme publique WeChat Exemple de code de réponse intelligente

Développement php Interface de plate-forme publique WeChat Exemple de code de réponse intelligente

高洛峰
高洛峰original
2017-03-20 14:10:302304parcourir

Cet article présente principalement le développement de la réponse intelligente de la version PHP de la plate-forme publique WeChat développement de l'interface Il analyse en détail le principe de la fonction de réponse uniquement et les techniques spécifiques de mise en œuvre de l'appel via le. Interface WeChat sous forme d'exemples. Les amis dans le besoin peuvent se référer à

Cet article décrit la méthode d'implémentation de la fonction de réponse intelligente dans la version PHP du développement de l'interface de la plateforme publique WeChat. Partagez-le avec tout le monde pour votre référence. Les détails sont les suivants :

La réponse intelligente consiste à transmettre les résultats à l'utilisateur en fonction des conditions saisies par l'utilisateur. Cet éditeur a déjà écrit et compilé quelques exemples pour votre. référence. Il est relativement complet. Il est introduit du côté du développement.

WeChat est devenu très populaire depuis son lancement, et le lancement de la fonction de paiement a poussé WeChat à une hauteur sans précédent, et les personnes qui ont demandé des comptes d'abonnement ou des comptes de service WeChat ont commencé à se joindre en masse. Je vais maintenant vous donner une brève explication de l'interface de développement de la plateforme publique WeChat.

Accédez d'abord à la plateforme publique WeChat pour demander un compte, puis suivez les instructions étape par étape. Lors du choix d'un compte d'abonnement et d'un compte de service, les particuliers ne peuvent demander qu'un compte d'abonnement, et celui-ci est limité aux fonctions de base, tandis que les entreprises peuvent demander les deux ; La différence entre un compte d'abonnement et un compte de service est qu'un compte d'abonnement peut envoyer un message par jour, tandis qu'un compte de service ne peut envoyer qu'un seul message par mois ; un compte d'abonnement a besoin d'une certification WeChat pour personnaliser le menu  ; (la certification est requise pour les entreprises et la certification coûte 300 yuans par fois), tandis que le compte de service dispose d'un menu personnalisé dès le début, mais il peut également être authentifié. Après authentification, le compte de service peut directement passer aux fonctions avancées. Veuillez vous référer à Baidu pour plus de différences...

J'ai demandé un compte d'abonnement parce que je suis un particulier. Envoyez simplement une photo de votre visage tenant votre carte d’identité, même si c’est un peu idiot. Attendez ensuite l'examen de l'enregistrement des informations (environ une journée). Après avoir réussi, entrez directement sur la plateforme publique WeChat, cliquez sur la fonction pour accéder à la fonction avancée, désactivez le mode édition, activez le mode développement, puis téléchargez la démo fournie par WeChat, décompressez-la, et récupère un fichier : wx_sample.php, le code est le suivant :

<?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;
 }
 }
}
?>

En fait, c'est une authentification, et ensuite envoie le message. Transférez le fichier sur votre serveur, je le mets dans le répertoire racine, puis modifiez les valeurs de l'url et du token en mode développement. Supposons que l'URL utilisée ici soit http://www.jb51.net/wx_sample.php et que le jeton soit le jeton défini ci-dessus. Cela peut être modifié, tant que les deux côtés sont cohérents, la valeur par défaut est weixin. Cliquez ensuite sur Soumettre et vous serez invité à indiquer que l'opération a réussi. Scannez ensuite le numéro que vous avez demandé et envoyez un message. Vous constaterez qu'il n'y a pas de réponse. Pour le moment, nous devons faire un petit ajustement. Désactivez la méthode d'authentification d'appel dans le document d'interface et activez la méthode d'appel. les informations de réponse :

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

Si vous envoyez un message à ce moment-là, vous recevrez : Bienvenue dans le monde Wechat !

Après avoir suivi certains comptes d'abonnement ou de service, vous recevrez un message immédiatement. Que répondre 1, comment et ainsi ; répondez 2, comment et ainsi de suite.

Comment y parvenir ? Entrez directement le code :

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;
    }
  }
}

Bien sûr, il ne s'agit que d'une simple implémentation. De simples modifications sont apportées au SDK fourni par la plateforme publique WeChat. En fait, il existe de nombreux types de messages. type est événement, il y a aussi abonnement, LOCATION, etc. Si vous souhaitez l'affiner, utilisez Event comme abonnement pour gérer le premier événement qui vous intéresse. Le code est le suivant :

<?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;
  }
}

Pour être honnête. , je veux vraiment avoir un compte de service avec lequel jouer. Le menu personnalisé est Il n'y a pas de contenu technique, mais les services suivants tels que le paiement WeChat et le seul compte de service valent la peine d'être essayés

.

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