一起學(xué)微信公眾平臺(tái)開發(fā)(零)

寫在前面

一個(gè)客戶需要做微信公眾平臺(tái)開發(fā)握侧,而自己以前沒有研究過蚯瞧,只做過訂閱號(hào),未涉及應(yīng)用開發(fā)品擎,于是簡(jiǎn)單了解了一下埋合,大概知道,只要會(huì)PHP+MYSQL萄传,加上XML甚颂、JSON、HTML等等秀菱,就能夠?qū)崿F(xiàn)了振诬。

所以我在這里記錄下自己的學(xué)習(xí)過程,給新學(xué)習(xí)的朋友一個(gè)參考衍菱,也給自己留個(gè)記錄赶么。

環(huán)境

1、需要一個(gè)微信公眾平臺(tái)賬號(hào)脊串,經(jīng)過認(rèn)證的辫呻,當(dāng)然認(rèn)證之前清钥,可以用測(cè)試賬號(hào)來做,點(diǎn)這里獲得測(cè)試賬號(hào):http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login

2放闺、需要一臺(tái)服務(wù)器祟昭,能夠部署你的WEB應(yīng)用,我使用的是阿里云服務(wù)器

3怖侦、需要一個(gè)域名(我現(xiàn)在還不確定是不是必須有篡悟,但沒有的話測(cè)試用不了),而且這個(gè)域名必須可以訪問(也就是備案了的)础钠,當(dāng)然如果你是國外的空間或服務(wù)器恰力,可以不備案直接解析。我因?yàn)橛蛎€沒備案完成旗吁,我在一些免費(fèi)的二級(jí)域名網(wǎng)站申請(qǐng)了一個(gè)解析到我服務(wù)器踩萎,速度很快,幾乎是瞬間就完成解析了很钓。我用的是這家的(http://dns.c3z.cn/control.php#)香府,不是廣告哦。

開始配置

我們以測(cè)試賬號(hào)為例進(jìn)行配置

關(guān)于服務(wù)器WEB應(yīng)用環(huán)境如何配置我不說了码倦,可以自己百度企孩。

關(guān)于各個(gè)參數(shù)怎么填寫,我且一個(gè)一個(gè)道來:

1袁稽、測(cè)試號(hào)信息:這里面的東西是隨機(jī)生成的勿璃,不需要我們來填寫,后邊用得到推汽。

2补疑、接口配置信息:這里需要我們自己填寫,在這之前要做一個(gè)準(zhǔn)備工作歹撒,把下面代碼復(fù)制后莲组,另存為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"];
        echo $echoStr;
        echo "<xml><ToUserName><![CDATA[toUser]]></ToUserName><FromUserName><![CDATA[fromUser]]></FromUserName><CreateTime>12345678</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[你好]]></Content></xml>";
        //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 (!empty($postStr)){
                
                $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', 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(!empty( $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);
        $tmpStr = implode( $tmpArr );
        $tmpStr = sha1( $tmpStr );
        
        if( $tmpStr == $signature ){
            return true;
        }else{
            return false;
        }
    }
}

?>

放到你的WEB目錄下暖夭,確鼻妈荆可以通過公網(wǎng)訪問。然后將URL設(shè)置如:http://123.123.123.123/wx_sample.php 即可迈着。
TOKEN項(xiàng)請(qǐng)?zhí)顚憽皐eixin”竭望,這個(gè)是可以后期修改的。
然后點(diǎn)擊提交裕菠。
提示配置成功咬清,表示成功了,但如果提示配置失敗,那么你要看一下代碼是不是我上面那一串枫振,因?yàn)槲⑿排渲脮r(shí)需要一個(gè)返回值,而如果你的代碼沒有返回值萤彩,微信會(huì)提示配置失敗粪滤,這時(shí)候你要加上才行。
我后來就遇到過這個(gè)問題雀扶,因?yàn)閾Q了一個(gè)目錄杖小,導(dǎo)致配置失敗,后來發(fā)現(xiàn)我只要在里邊加上一句:
$wechatObj = new wechatCallbackapiTest();
$wechatObj->valid();//新增加的這句
就OK了愚墓。
當(dāng)然后期你可以去掉予权。

JS接口安全域名,填寫我們前面申請(qǐng)的免費(fèi)二級(jí)域名(當(dāng)然你自己有備案好的域名更好啦)

添加測(cè)試號(hào)二維碼浪册,拿你的手機(jī)掃碼一下扫腺,關(guān)注即可,這樣你就可以在訂閱號(hào)列表中找到這個(gè)測(cè)試用的公眾號(hào)村象,通過給公眾號(hào)發(fā)送消息笆环,來測(cè)試返回的結(jié)果。

至此厚者,環(huán)境配置基本完畢躁劣。

Hello World!

下一步我們嘗試向公眾號(hào)發(fā)送任意字符库菲,返回一個(gè)"Hello world!"

其實(shí)账忘,說簡(jiǎn)單了,就像一個(gè)人抽了你一巴掌(用戶在訂閱號(hào)內(nèi)向你發(fā)送任意內(nèi)容)熙宇,你回頭踹了他一腳(你的程序回復(fù)一個(gè)“Hello World!”)

這個(gè)工作可以由剛才我們的那個(gè)php文件來完成鳖擒,他會(huì)首先接收來自微信的一個(gè)XML文件,里面包含了用戶發(fā)給你的內(nèi)容奇颠、類型等信息败去,你可以根據(jù)內(nèi)容,回復(fù)一個(gè)XML給微信烈拒,微信將XML解析后發(fā)給用戶圆裕。

相應(yīng)的源文件如下:
可以點(diǎn)擊這里下載:http://pan.baidu.com/s/1pKfkQEZ

<?php
/**
  * wechat php test
  */

//define your token
define("TOKEN", "weixin");
$wechatObj = new wechatCallbackapiTest();
$wechatObj->responseMsg();

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 (!empty($postStr)){
                /* libxml_disable_entity_loader is to prevent XML eXternal Entity Injection,
                   the best way is to check the validity of xml by yourself */
                libxml_disable_entity_loader(true);
                $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', 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(!empty( $keyword ))
                {
                    $msgType = "text";
                    $contentStr = "Welcome to wechat world!";
                    
                    if($keyword == '1'){
                        $contentStr = "你輸入的是1";
                    }elseif($keyword == '1'){
                        $contentStr = "你輸入的是2";
                    }
                    
                    $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
                    echo $resultStr;
                }else{
                    echo "Input something...";
                }

        }else {
            echo "";
            exit;
        }
    }
        
    private function checkSignature()
    {
        // you must define TOKEN by yourself
        if (!defined("TOKEN")) {
            throw new Exception('TOKEN is not defined!');
        }
        
        $signature = $_GET["signature"];
        $timestamp = $_GET["timestamp"];
        $nonce = $_GET["nonce"];
                
        $token = TOKEN;
        $tmpArr = array($token, $timestamp, $nonce);
        // use SORT_STRING rule
        sort($tmpArr, SORT_STRING);
        $tmpStr = implode( $tmpArr );
        $tmpStr = sha1( $tmpStr );
        
        if( $tmpStr == $signature ){
            return true;
        }else{
            return false;
        }
    }
}

?>

測(cè)試

這時(shí)候我們可以開始測(cè)試了,向測(cè)試號(hào)發(fā)送任意字符荆几,將回復(fù)“Welcome to wechat world!"吓妆,發(fā)送數(shù)字1,回復(fù)"你輸入的是1"

OK吨铸,本節(jié)寫完了行拢。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市诞吱,隨后出現(xiàn)的幾起案子舟奠,更是在濱河造成了極大的恐慌竭缝,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,548評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件沼瘫,死亡現(xiàn)場(chǎng)離奇詭異抬纸,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)耿戚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門湿故,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人膜蛔,你說我怎么就攤上這事坛猪。” “怎么了皂股?”我有些...
    開封第一講書人閱讀 167,990評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵墅茉,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我屑墨,道長(zhǎng)躁锁,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,618評(píng)論 1 296
  • 正文 為了忘掉前任卵史,我火速辦了婚禮战转,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘以躯。我一直安慰自己槐秧,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,618評(píng)論 6 397
  • 文/花漫 我一把揭開白布忧设。 她就那樣靜靜地躺著刁标,像睡著了一般。 火紅的嫁衣襯著肌膚如雪址晕。 梳的紋絲不亂的頭發(fā)上膀懈,一...
    開封第一講書人閱讀 52,246評(píng)論 1 308
  • 那天偏竟,我揣著相機(jī)與錄音贾惦,去河邊找鬼。 笑死港柜,一個(gè)胖子當(dāng)著我的面吹牛刘陶,可吹牛的內(nèi)容都是我干的胳赌。 我是一名探鬼主播,決...
    沈念sama閱讀 40,819評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼匙隔,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼疑苫!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,725評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤捍掺,失蹤者是張志新(化名)和其女友劉穎撼短,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體挺勿,經(jīng)...
    沈念sama閱讀 46,268評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡阔加,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,356評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了满钟。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,488評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡胳喷,死狀恐怖湃番,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情吭露,我是刑警寧澤吠撮,帶...
    沈念sama閱讀 36,181評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站讲竿,受9級(jí)特大地震影響泥兰,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜题禀,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,862評(píng)論 3 333
  • 文/蒙蒙 一鞋诗、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧迈嘹,春花似錦削彬、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至神僵,卻和暖如春雁刷,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背保礼。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評(píng)論 1 272
  • 我被黑心中介騙來泰國打工沛励, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人氓英。 一個(gè)月前我還...
    沈念sama閱讀 48,897評(píng)論 3 376
  • 正文 我出身青樓侯勉,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親铝阐。 傳聞我的和親對(duì)象是個(gè)殘疾皇子址貌,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,500評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器练对,智...
    卡卡羅2017閱讀 134,696評(píng)論 18 139
  • 為了方便大家了解并入門微信小程序遍蟋,我將一些可能會(huì)需要的知識(shí),列在這里螟凭,讓大家方便的從零開始學(xué)習(xí)虚青; 首先感謝幾位給予...
    極樂叔閱讀 3,451評(píng)論 2 16
  • 很早前就想了解下微信公眾號(hào)開發(fā),懶和拖延癥讓這計(jì)劃遲遲沒落實(shí)螺男,正巧新項(xiàng)目有了微信公眾號(hào)的業(yè)務(wù)棒厘,我心中沒數(shù)地回應(yīng),我...
    英文名叫夏天閱讀 4,437評(píng)論 1 4
  • 學(xué)校大力倡導(dǎo)晨讀讀起來下隧,但實(shí)際情況差強(qiáng)人意奢人,個(gè)人認(rèn)為原因有二。 一是老師思想認(rèn)識(shí)有誤區(qū)淆院。老師固有的觀念認(rèn)為晨讀主要...
    秦風(fēng)子閱讀 263評(píng)論 0 0
  • 東風(fēng)裊裊泛崇光何乎,香霧空濛月轉(zhuǎn)廊。 只恐夜深花睡去土辩,故燒高燭照紅妝支救。 ...
    學(xué)素閱讀 424評(píng)論 4 2