ホームページ  >  記事  >  WeChat アプレット  >  php 開発 WeChat パブリック プラットフォーム インターフェイス インテリジェントな応答サンプル コード

php 開発 WeChat パブリック プラットフォーム インターフェイス インテリジェントな応答サンプル コード

高洛峰
高洛峰オリジナル
2017-03-20 14:10:302273ブラウズ

この記事では、主に WeChat パブリック プラットフォームインターフェース の PHP バージョンのインテリジェントな返信開発について、例の形式で WeChat インターフェースを介した返信専用機能の原理と具体的な実装テクニックを詳細に分析します。必要な場合は、以下を参照してください

この記事の例では、WeChat パブリック プラットフォーム インターフェイスの PHP バージョンの開発におけるスマート リプライ機能の実装方法について説明します。詳細は次のとおりです。

スマート リプライは、ユーザーが入力した条件に基づいて結果をユーザーにフィードバックするものです。このエディターは、参考のためにいくつかの例を作成しました。比較的完成度が高く、主に開発プロセスを紹介しています。

WeChat はサービス開始以来非常に人気があり、支払い機能の開始により WeChat は比類のない高みに達し、WeChat サブスクリプション アカウントやサービス アカウントを申請する人々が大挙して参加し始めました。ここで、WeChat パブリック プラットフォームの開発インターフェイスについて簡単に説明します。

まず、WeChat パブリック プラットフォームにアクセスしてアカウントを申請し、プロンプトに従って段階的に進みます。サブスクリプション アカウントとサービス アカウントを選択する場合、個人は基本的な機能に限定されるサブスクリプション アカウントのみを申請できますが、企業は両方を申請できます。サブスクリプション アカウントとサービス アカウントの違いは、サブスクリプション アカウントでは 1 日に 1 つのメッセージを送信できるのに対し、サービス アカウントでは 1 か月に 1 つのメッセージしか送信できないことです。サービス アカウントには最初からカスタマイズされたメニューがありますが、認証後にサービス アカウントを直接高度な機能にアップグレードすることもできます。詳しい違いについてはBaiduをご参照ください...個人なのでサブスクリプションアカウントを申請しました。少しばかげていますが、ID カードを持った顔写真を送信してください。その後、情報登録審査(約1日)を待ちます。合格後、WeChatパブリックプラットフォームに直接入り、機能をクリックして高度な機能に入り、

編集モード

をオフにし、開発モードをオンにして、WeChatが提供するデモをダウンロードして解凍します。ファイルは1つだけです: wx_sample.php、コードは次のとおりです:

<?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;
 }
 }
}
?>
実際には、これは認証であり、その後、

メッセージを送信します

。ファイルをサーバーに転送し、ルート ディレクトリに置き、開発モードで URL とトークンの値を変更します。ここで使用される URL は http://www.jb51.net/wx_sample.php であり、トークンは上で定義されたトークンであると仮定します。これは、両方が一貫している限り変更できます。デフォルトは weixin です。次に、「送信」をクリックすると、成功したことを示すメッセージが表示されます。次に、申請した番号をスキャンしてメッセージを送信します。この時点では、インターフェイス文書で認証の呼び出し方法をオフにし、呼び出し方法を有効にする必要があります。返信情報:

//$wechatObj->valid();
$wechatObj->responseMsg();
この時点で、メッセージを送信すると、次のメッセージが届きます: wechat 世界へようこそ!

いくつかのサブスクリプション アカウントまたはサービス アカウントをフォローすると、すぐにメッセージが届きます。何を返信するか 1、どのように返信するか 2、どのように返信するかなど。

これを達成するにはどうすればよいですか?コードに直接移動します:

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

もちろん、これは WeChat パブリック プラットフォームによって提供される SDK に単純な変更が加えられただけです。実際には、メッセージ タイプがイベントであっても、さまざまなタイプがあります。 、subscribe、LOCATION なども含まれており、それを絞り込みたい場合は、Event を submit として使用して、対象の最初のイベントを処理します。コードは次のとおりです。

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

正直に言うと、私は本当にカスタムメニューには技術的な内容はありませんが、次のWeChat支払いなど、サービスアカウントによって提供される唯一のサービスは試す価値があります。

以上がphp 開発 WeChat パブリック プラットフォーム インターフェイス インテリジェントな応答サンプル コードの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。