首頁  >  文章  >  後端開發  >  PHP微信API的存取和關鍵字自動回复

PHP微信API的存取和關鍵字自動回复

不言
不言原創
2018-04-04 14:36:461756瀏覽

本篇文章的內容是PHP微信API的接入和關鍵字自動回复,現在分享給大家,有需要的朋友就可以參考一下本篇文章的內容了

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


##公眾帳號的使用模式分類

#1,編輯模式:有微信公眾平台,提供給微信公眾帳號管理者的一個簡單的,可視化操作的介面,主要是方便

微信公眾帳號管理者,能夠進行一些簡單的微信運營 

#2,開發者模式:就是呼叫一些微信的公用接口,來完成一些自身業務

應用程式中接入API接口步驟

1,填寫伺服器URL ,token(注意:只支援80埠   也就是http服務必須在80埠打開,才能接收傳送過來的訊息

這裡的url就是指第三方伺服器的url,它的作用主要是接收微信推播的訊息

這裡的token是開發者與微信公眾平台之間約定的口令,主要是用來驗證第三方伺服器真正的合法性

2,驗證伺服器位址的有效性,加密/校驗流程如下:

(1)將token、timestamp、nonce三個參數進行字典序排序(這三個都是微信透過get方法傳送過來的三個參數,透過這三個參數可以來驗證請求是否來自於微信)

(2)將三個參數字串拼接成一個字串進行sha1加密

(3)開發者獲得加密後的字串可與signature對比,標識該請求來自微信

3,關於access_token

 

(1)access_token與appid,appsecred的關係

    當你在微信公眾平台註冊微信公眾帳號時,微信公眾平台為你產生了一個appid和appsecred,這兩個值就是你在微信公眾平台上的一個唯一標識

    appid和appsecred(edd7d19a4d8c625ed1244d17f78a9165)就是用來產生access_token,access_token其實就是一個動態口令,它有時間性,以及一段時間內有效#accfess_#fess_#access_#fess_#bun.平台的一些介面的鑰匙

特點:(1)唯一有效性(2)全域有效性  (至於access_token的詳解,可以進入微信,查看「開發者文件」)

微信開放介面

1,取得access_token

2,取得微信伺服器位址

說完這些之後,下邊就是程式碼部分。首先提醒大家,要加入自己的這些功能,首先要有一個自己的公網可以訪問的域名,沒有的可以在騰訊雲或阿里雲上申請一個(我用的框架是ThinkPHP3.2.2的)



#[php]

 view plain

 copy

<?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);  
        }  
    }     
}
希望這篇部落格對跟我一樣喜歡微信開發的小菜鳥們有幫助



相關推薦:

實例詳解Python+Slack API 如何實作聊天機器人

php呼叫介面api的方法

#

以上是PHP微信API的存取和關鍵字自動回复的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn