微信公衆號開發入門心得(一)

1、前言php

     爲了快速瞭解微信公衆號開發過程,我選擇了php語言來進行微信公衆號開發,選擇php的緣由有兩點,一是網上有不少用php開放微信公衆號的教程,能夠減小學習成本;二是php也比較容易學習,學習門檻低。html

學習php開發微信公衆號,開發者須要有一點php基礎。對於學過其餘編程語言的童鞋,瞭解一些基本的php語法就能夠開始了。個人 PHP基礎學習筆記(一)編程

 

2、微信公衆號開發的步驟api

3、微信公衆號開發步驟詳解安全

  + 微信公衆號開發入門能夠參考 微信公衆平臺開發入門教程服務器

     教程中用的新浪雲作的服務器,註冊新浪雲以後能夠無償使用,讓你學習微信公衆號開發用足夠了。微信

     注:註冊新浪雲以後你的帳戶還須要認證,認證經過以後你才能拿建立的域名進行後面的服務器配置(認證時間1-2天)。微信公衆平臺

 

  (先按上面的教程作一遍,作一遍以後有須要再來理解後面的原理)編程語言

 + 關於第二步驗證服務器地址的有效性(成功接入,成爲開發者)函數

         1.原理:

    

       2.代碼實現:

<?php
//1.TOKEN用於服務器配置 驗證安全性
define("TOKEN", "weixin");
$wechatObj = new wechatCallbackapiTest();

//echostr隨機數已經初始化就驗證
if (isset($_GET['echostr'])) {
    //2.驗證消息來自微信服務器
    $wechatObj->valid();
    // $wechatObj->definedItems();

}else{
    $wechatObj->responseMsg();
}

class wechatCallbackapiTest
{
    public function valid()
    {
        $echoStr = $_GET["echostr"];
         //若確認這次GET請求來自微信服務器,則原樣返回echostr參數內容,接入生效,成爲開發者成功,不然接入失敗。
        if($this->checkSignature()){
            header('content-type:text');
            echo $echoStr;
            exit;
        }
    }

    
    //檢驗signature
    private function checkSignature()
    {
        $signature = $_GET["signature"];
        $timestamp = $_GET["timestamp"];
        $nonce = $_GET["nonce"];

        $token = TOKEN;
        $tmpArr = array($token, $timestamp, $nonce);
        //將token、timestamp、nonce三個參數進行字典序排序
        sort($tmpArr, SORT_STRING);
        //將三個參數字符串拼接成一個字符串進行sha1加密
        $tmpStr = implode( $tmpArr );
        $tmpStr = sha1( $tmpStr );
        //開發者得到加密後的字符串與signature對比,標識該請求來源於微信
        if( $tmpStr == $signature ){
            return true;
        }else{
            return false;
        }
    }
    
    //3.依據接口文檔實現業務邏輯
    public function responseMsg()
    {
        //獲取微信推送過來的post數據(xml數據)
        $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];

        if (!empty($postStr)){
            //simplexml_load_string() 函數把XML字符串載入對象中。
            $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
            $fromUsername = $postObj->FromUserName;
            $toUsername = $postObj->ToUserName;
            $keyword = trim($postObj->Content);
            $picUrl = $postObj->PicUrl;
            $msgId = $postObj->MsgId;
            $mediaId = $postObj->MediaId;
            $event = strtolower($postObj->MsgType);
            $msgType = "text";
            $msgType2 = "image"; 
            $msgType3 = "music";
            $msgType4 = "news";
            $time = time();
            //返回給用戶文本類型數據
            $textTpl = "<xml>
                        <ToUserName><![CDATA[%s]]></ToUserName>
                        <FromUserName><![CDATA[%s]]></FromUserName>
                        <CreateTime>%s</CreateTime>
                        <MsgType><![CDATA[%s]]></MsgType>
                        <Content><![CDATA[%s]]></Content>
                        <Event><![CDATA[subscribe]]></Event>
                        <FuncFlag>0</FuncFlag>
                        </xml>";
            //粉絲髮送的文本信息      
            if($event == "text") {
              
                $this->responseText($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr, $keyword);
                
            }      
        }else{
            echo "";
            exit;
        }
    }

 //給粉絲髮送文本信息
    public function responseText($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr,$keyword) {
         
        switch($keyword) {
            case '三圍' :
            $contentStr ="我木有三圍,你有嗎?";
            break;
            
            case '帥哥' :
            $contentStr ="我是萌妹子,好伐";
            break;
            
            case '多高':
            $contentStr = "比你高~";
            break;
            
            case '女神':
            $contentStr = "你也長的很好看啊~";
            break;
            
            case 'i love you':
            $contentStr = "I love you too 麼麼~";
            break;
            
            case '這是什麼':
            $contentStr = "這是個人我的公衆號啊~和其餘公衆號相似";
            break;
            
            case '?' :
            $contentStr = '送你一串時間:'.date("Y-m-d H:i:s",time());  
            break;
            
            default :
            $contentStr = $keyword;
            break;
            
        }
        
             $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
             echo $resultStr;
           
    }
    

 依據接口文檔實現業務邏輯後面會單獨總結,以上分享了入門教程,總結了接入成爲開發者的原理,分享創造價值,若是你也是初學微信公衆號開發,但願對你有點幫助。

相關文章
相關標籤/搜索