ホームページ  >  記事  >  バックエンド開発  >  PHP WeChat API アクセスとキーワード自動応答

PHP WeChat API アクセスとキーワード自動応答

不言
不言オリジナル
2018-04-04 14:36:461811ブラウズ

この記事の内容は、PHP WeChat API アクセスとキーワード自動返信に関するものです。必要な友達はこの記事の内容を参照してください。

https://blog.csdn.net/self_realian/article /details/70849159


パブリックアカウントの使用モード分類

1. 編集モード: WeChatパブリックアカウントマネージャーにシンプルで視覚的な操作インターフェイスを提供するWeChatパブリックプラットフォームがあり、主に

にとって便利です。

WeChat パブリック アカウント マネージャーは、いくつかの簡単な WeChat 操作を実行します

2. 開発者モード: WeChat のいくつかのパブリック インターフェイスを呼び出して、独自のビジネスの一部を完了します

アプリケーションで API インターフェイスにアクセスする手順

1サーバー URL とトークンを入力します (注: ポート 80 のみをサポートします。つまり、送信されたメッセージを受信するには、http サービスをポート 80 で開く必要があります。

ここでの URL は、サードパーティ サーバーの URL を指します。その主な機能は、WeChat によってプッシュされたメッセージを受信することです

ここでのトークンは、開発者と WeChat パブリック プラットフォームの間で合意されたパスワードであり、主にサードパーティ サーバーの真の正当性を検証するために使用されます

2。サーバーアドレスの有効性、暗号化/検証 プロセスは次のとおりです:

(1) トークン、タイムスタンプ、ノンスの 3 つのパラメータを辞書順に並べ替えます (これら 3 つは、WeChat が get メソッドを通じて送信した 3 つのパラメータです。 3 つのパラメーターを使用して、リクエストが (WeChat 内) からのものであるかどうかを確認できます

(2) sha1 暗号化用に 3 つのパラメーター文字列を 1 つの文字列に結合します

(3) 開発者は、暗号化された文字列を署名と比較して、リクエストはWeChatから来ています

3、access_tokenについて

(1) access_tokenとappid、appsecredの関係

WeChatパブリックプラットフォームにWeChatパブリックアカウントを登録すると、WeChatパブリックプラットフォームはappidとappsecredを生成します。 appsecred は、WeChat パブリック プラットフォーム上の一意の識別子です

appid と appsecred (edd7d19a4d8c625ed1244d17f78a9165) は、実際には、時間に依存する動的パスワードです。

Access_token は、プラットフォームの一部のインターフェイスの WeChat 公開キーを呼び出すこととしても理解できます

特徴: (1) 固有の有効性 (2) グローバルな有効性 (access_token の詳細な説明については、WeChat を入力できます)そして「開発者向けドキュメント」を参照してください)

WeChat インターフェースを開きます

1、access_token を取得します

2、WeChat サーバーアドレスを取得します

ここまで述べた後、まず最初に思い出していただきたいのがコード部分です。これらの機能を独自に追加するには、まず独自のパブリック ネットワークからアクセスできるドメイン名を取得する必要があります。Tencent Cloud または Alibaba Cloud (フレームワーク) で申請することはできません。私が使用しているのは ThinkPHP3.2.2)



[php]ビュー plaincopy

<?php  
namespace Home\Controller;  
use Think\Controller;  
class IndexController extends Controller {  
    public function index(){  
        $timestamp = $_GET[&#39;timestamp&#39;];//timestamp其实就是一个时间戳  
        $nonce     = $_GET[&#39;nonce&#39;];//nonce是一个随机参数  
        $token     = "weixin";//这个token填写你在微信公众平台上写的那个值  
        $signature = $_GET[&#39;signature&#39;];//这个signature其实就是在微信公众平台已经加密好的字符串  
        $echostr   = $_GET[&#39;echostr&#39;];  
        $array     = array( $timestamp, $nonce, $token);  
        sort($array);  
  
        $tmpstr = implode(&#39;&#39;, $array);  
        $tmpstr = sha1($tmpstr);  
  
    if( $tmpstr == $signature && $echostr){  
      
            echo $echostr;  
            exit;  
        }else{  
            $this->reponseMsg();  
        }  
    }  
    public function reponseMsg(){  
        $postArr = $GLOBALS[&#39;HTTP_RAW_POST_DATA&#39;];  
        $postObj = simplexml_load_string( $postArr );  
        if( strtolower( $postObj->MsgType) == &#39;event&#39;){  
            //如果是关注事件(subscribe)  
            if( strtolower($postObj->Event == &#39;subscribe&#39;) ){  
                //回复用户消息  
                $toUser   = $postObj->FromUserName;  
                $fromUser = $postObj->ToUserName;  
                $time     = time();  
                $msgType  =  &#39;text&#39;;  
                $content  = &#39;欢迎关注 书旅and良玉 微信公众账号&#39;.$postObj->FromUserName.&#39;-&#39;.$postObj->ToUserName;  
                $template = "<xml>  
                            <ToUserName><![CDATA[%s]]></ToUserName>  
                            <FromUserName><![CDATA[%s]]></FromUserName>  
                            <CreateTime>%s</CreateTime>  
                            <MsgType><![CDATA[%s]]></MsgType>  
                            <Content><![CDATA[%s]]></Content>  
                            </xml>";  
                $info     = sprintf($template, $toUser, $fromUser, $time, $msgType, $content);  
                echo $info;  
            }  
        }  
//回复纯文本或单图文消息  
        if(($postObj->MsgType) == &#39;text&#39; && trim($postObj->Content) == &#39;夏目友人帐&#39;){  
            $toUser   = $postObj->FromUserName;  
            $fromUser = $postObj->ToUserName;  
            $arr = array(  
                array(  
                    &#39;title&#39;=>&#39;夏目友人帐&#39;,  
                    &#39;description&#39;=>"此生无悔入夏目",  
                    &#39;picUrl&#39;=>&#39;http://img4.duitang.com/uploads/item/201508/16/20150816015528_X8dKY.jpeg&#39;,  
                    &#39;url&#39;=>&#39;http://www.shulvchen.cn&#39;,  
                ),  
            );    
            $template = "<xml>  
                        <ToUserName><![CDATA[%s]]></ToUserName>  
                        <FromUserName><![CDATA[%s]]></FromUserName>  
                        <CreateTime>%s</CreateTime>  
                        <MsgType><![CDATA[%s]]></MsgType>  
                        <ArticleCount>".count($arr)."</ArticleCount>  
                        <Articles>";  
            foreach($arr as $k=>$v){  
                $template .="<item>  
                            <Title><![CDATA[".$v[&#39;title&#39;]."]]></Title>   
                            <Description><![CDATA[".$v[&#39;description&#39;]."]]></Description>  
                            <PicUrl><![CDATA[".$v[&#39;picUrl&#39;]."]]></PicUrl>  
                            <Url><![CDATA[".$v[&#39;url&#39;]."]]></Url>  
                            </item>";  
            }  
            $template .="</Articles>  
                        </xml> ";  
            echo sprintf($template, $toUser, $fromUser, time(), &#39;news&#39;);  
        }else{  
            switch( trim($postObj->Content) ){  
                case &#39;bb&#39;:  
                    $content = &#39;我喜欢你&#39;;  
                break;  
                case &#39;良玉&#39;:  
                    $content = &#39;我喜欢你&#39;;  
                break;  
                case &#39;书旅&#39;:  
                    $content = &#39;加油&#39;;  
                break;  
                case &#39;dsdf&#39;:  
                    $content = &#39;不愿错过他&#39;;  
                break;  
                case &#39;垒哥&#39;:  
                    $content = &#39;垒哥已死,有事儿烧纸&#39;;  
                break;  
                case &#39;书旅and良玉&#39;:  
                    $content = &#39;Forever with you&#39;;  
                break;  
                case &#39;学弟&#39;:  
                    $content = &#39;书旅是你学长&#39;;  
                break;  
                default:  
                    $content = "<a href=&#39;http://www.baidu.com&#39;>百度一下,你就知道(点击文字,进入百度)</a>";  
  
            }     
                $template1 = "<xml>  
                            <ToUserName><![CDATA[%s]]></ToUserName>  
                            <FromUserName><![CDATA[%s]]></FromUserName>  
                            <CreateTime>%s</CreateTime>  
                            <MsgType><![CDATA[%s]]></MsgType>  
                            <Content><![CDATA[%s]]></Content>  
                            </xml>";  
                $fromUser = $postObj->ToUserName;//消息从哪里来  
                $toUser   = $postObj->FromUserName;//发送给谁  
                $time     = time();   
                //$content  = &#39;我喜欢你&#39;;  
                $msgType  = &#39;text&#39;;  
                echo sprintf($template1, $toUser, $fromUser,$time, $msgType, $content);  
        }  
    }     
}


このブログが私と同じように WeChat 開発が好きな初心者に役立つことを願っています


関連する推奨事項:

Python+Slack API の説明方法の詳細な例チャットボットのメソッドを実装

PHP呼び出しインターフェースAPI


以上がPHP WeChat API アクセスとキーワード自動応答の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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