1. 程式人生 > 程式設計 >基於PHP的微信公眾號的開發流程詳解

基於PHP的微信公眾號的開發流程詳解

微信公眾號開發分傻瓜模式和開發者模式兩種,前者不要考慮呼叫某些介面,只要根據後臺提示傻瓜式操作即可,適用於非專業開發人員。

開發模式當然就是懂程式開發的人員使用的。

下面簡單說一下微信公眾號開發的簡易流程,新手看看會有幫助,高手請一笑而過。

1、配置伺服器:

  A、首先在本機建立如下結構的資料夾(這裡是我自己的習慣,僅供參考)

基於PHP的微信公眾號的開發流程詳解

MMPN:總目錄mro message public number 微信公眾號

backup:備份目錄,主要用於備份php檔案,每次修改時將原稿備份到裡面去。

images:存放圖片

includes:包含檔案,包括mysql配置,smarty模板包含檔案等等

menu:存放公眾號選單資訊,txt文件即可

gr****zx.php:開發檔案,即公眾號關聯的程式檔案,也就是配置的url對應的檔案

最後的是需求等等的檔案

主程式檔案:gr****zx.php

<?php

  define("TOKEN","aabbc_lzpt");

  //獲取微信傳送資料
  $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
  //返回回覆資料
  if (!empty($postStr))
  {
    //解析資料
    $postObj = simplexml_load_string($postStr,'SimpleXMLElement',LIBXML_NOCDATA);
    //傳送訊息方ID
    $fromUsername = $postObj->FromUserName;
    //接送訊息方ID
    $toUsername = $postObj->ToUserName;
    //訊息型別
    $form_MsgType = $postObj->MsgType;

    //事件訊息
    if($form_MsgType=="event")
    {
      //獲取事件型別
      $form_Event = $postObj->Event;
      //訂閱事件
      if($form_Event=="subscribe")
      {

        //回覆歡迎圖文資訊
        /*
        $resultStr = "<xml>
                <ToUserName><![CDATA[".$fromUsername."]]></ToUserName>
                <FromUserName><![CDATA[".$toUsername."]]></FromUserName>
                <CreateTime>".time()."</CreateTime>
                <MsgType><![CDATA[news]]></MsgType>
                <ArticleCount>2</ArticleCount>
                <Articles>
                  <item>
                    <Title><![CDATA[ 歡迎關注***微信服務平臺,****]]></Title>
                    <Description><![CDATA[這是簡短描述文字]]></Description>
                    <PicUrl><![CDATA[http://a.hiphotos.baidu.com/baike/c0%3Dbaike116%2C5%2C5%2C116%2C38/sign=5cae7405f21f3a294ec5dd9cf84cd754/32fa828ba61ea8d32de5a1df950a304e241f5822.jpg]]></PicUrl>
                    <Url><![CDATA[http://www.baidu.com]]></Url> </item>
                  <item>
                    <Title><![CDATA[最新動態]]></Title>
                    <Description><![CDATA[]]></Description>
                    <PicUrl><![CDATA[http://a.hiphotos.baidu.com/baike/c0%3Dbaike116%2C5%2C5%2C116%2C38/sign=5cae7405f21f3a294ec5dd9cf84cd754/32fa828ba61ea8d32de5a1df950a304e241f5822.jpg]]></PicUrl>
                    <Url><![CDATA[http://www.baidu.com]]></Url> </item>

                </Articles>
                </xml> ";
        */
        //回覆歡迎文字資訊

        $reply="您好,歡迎關注******微信公眾平臺";
        $resultStr="<xml>
                <ToUserName><![CDATA[".$fromUsername."]]></ToUserName>
                <FromUserName><![CDATA[".$toUsername."]]></FromUserName>
                <CreateTime>".time()."</CreateTime>
                <MsgType><![CDATA[text]]></MsgType>
                <Content><![CDATA[".$reply."]]></Content>
              </xml>";
      }
      else if($form_Event=="CLICK")
      {
        $form_Event_Key = $postObj->EventKey;
        if($form_Event_Key=="V3002_CONTACT")
        {
          /*
           $resultStr = "<xml>
                <ToUserName><![CDATA[".$fromUsername."]]></ToUserName>
                <FromUserName><![CDATA[".$toUsername."]]></FromUserName>
                <CreateTime>".time()."</CreateTime>
                <MsgType><![CDATA[news]]></MsgType>
                <ArticleCount>1</ArticleCount>
                <Articles>
                  <item>
                    <Title><![CDATA[如何成為本站會員]]></Title>
                    <Description><![CDATA[本欄目介紹詳細的加入流程!]]></Description>
                    <PicUrl><![CDATA[http://a.hiphotos.baidu.com/baike/c0%3Dbaike116%2C5%2C5%2C116%2C38/sign=5cae7405f21f3a294ec5dd9cf84cd754/32fa828ba61ea8d32de5a1df950a304e241f5822.jpg]]></PicUrl>
                    <Url><![CDATA[http://www.baidu.com]]></Url>
                  </item>
                </Articles>
                </xml> ";
          */
          $reply="我們的地址:黃河東路222號\n我們的熱線:0510-88888888";
          $resultStr="<xml>
                <ToUserName><![CDATA[".$fromUsername."]]></ToUserName>
                <FromUserName><![CDATA[".$toUsername."]]></FromUserName>
                <CreateTime>".time()."</CreateTime>
                <MsgType><![CDATA[text]]></MsgType>
                <Content><![CDATA[".$reply."]]></Content>
              </xml>";
        }
      }

    }
    else if($form_MsgType=="location"){
      $lng1=$postObj->Location_X;
      $lat1=$postObj->Location_Y;
      $from_Location_Label=$postObj->Label;
      $reply="地理位置:";
      $reply.="緯度".$lat1."\t經度".$lng1."位置".$from_Location_Label;
      $resultStr = "<xml>
              <ToUserName><![CDATA[".$fromUsername."]]></ToUserName>
              <FromUserName><![CDATA[".$toUsername."]]></FromUserName>
              <CreateTime>".time()."</CreateTime>
              <MsgType><![CDATA[text]]></MsgType>
              <Content><![CDATA[".$reply."]]></Content>
              </xml> ";

    }
    echo $resultStr;
    exit;
  }
  else
  {
    echo "";
    exit;
  }
?>

臨時檔案:wx_sample.php

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

//define your token
define("TOKEN","aabbc_lzpt");
$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 (!empty($postStr)){
        
         $postObj = simplexml_load_string($postStr,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,SORT_STRING);
    $tmpStr = implode( $tmpArr );
    $tmpStr = sha1( $tmpStr );
    
    if( $tmpStr == $signature ){
      return true;
    }else{
      return false;
    }
  }
}

?>

注意看兩個檔案開頭都有程式碼:define("TOKEN","aabbc_lzpt"); 這是定義token,後面的值自己設定,但是自己要記住,在微信後臺配置伺服器要用到它。

B、現在開始操作,首先,將gr****zx.php檔案中的內容(程式碼),臨時清空,代替以臨時檔案中的內容(程式碼),儲存。將MMPN專案傳到伺服器,這時,主程式檔案url為“http://www.****.com/MMPN/fy_hzx/grape_fy_hzx.php”這樣的形式,確保路徑正確,開啟微信公眾號後臺開發者中心,點選下圖中“修改配置”,將剛才的url填入相應控制元件

基於PHP的微信公眾號的開發流程詳解

基於PHP的微信公眾號的開發流程詳解

token就是剛才提到要記住的token的值,要一致。第三個“訊息加密金鑰”可以隨機生成,然後提交。

token正確和url正確以及檔案程式碼無誤的話,會提示成功,再點啟用。

C、剛才主程式檔案中的程式碼是臨時的,只是為了開通註冊驗證token,成功以後,可以再次清除,恢復成原來的內容。(儲存好再上傳到伺服器)

這樣伺服器配置工作就結束了。

2、介紹一下主程式檔案中的程式碼

  $form_MsgType = $postObj->MsgType;

  $form_MsgType訊息型別,分為“事件”、“位置”(粉絲髮送位置)、“文字型別”、“圖片型別”等,具體可檢視後臺介面文件

  $form_Event = $postObj->Event;

  $form_Event 事件型別分為“訂閱”(subscribe)(也就是點關注)、退訂(unsubscribe)、“點選”(CLICK)——點選選單,但是隻針對click型別的選單,如果是url型別的選單,則直接開啟對應的url,無須在程式碼中處理。

  回覆粉絲的內容形式一般為文字或圖文兩種,程式碼中都有。

3、選單配置

  選單配置要知道開發者ID中的AppID(這個可以直接看到)和AppSecret(這個有可能是被隱藏的,要通過公眾號管理員驗證通過申請檢視才能顯示完整,顯示完整後要及時儲存記錄,這樣下次就不用再找管理員了)。

  配置選單前,首先要拿到access_token,它的有效期為2小時。如圖點選獲取access_token

基於PHP的微信公眾號的開發流程詳解

然後在右下方點選“使用網頁除錯工具除錯該介面”

基於PHP的微信公眾號的開發流程詳解

輸入appid和secret,點“檢查問題”提交

基於PHP的微信公眾號的開發流程詳解

拷貝獲取到的access_token

基於PHP的微信公眾號的開發流程詳解

重新選擇自定義選單:

基於PHP的微信公眾號的開發流程詳解

將剛獲取到的access_token 拷入

如果介面列表選擇的是查詢選單,提交的結果是不存在,這就對了,因為我們還沒有建立選單呢

基於PHP的微信公眾號的開發流程詳解

那麼,我們就建立一個,將以下json格式程式碼拷入body中,提交

{
    "button": [
      {
        "name": "首頁","sub_button": [
          {
            "type": "view","name": "註冊登入","url": "http://www.baidu.com","sub_button": [ ]
          },{
            "type": "click","name": "娛樂一刻","key": "V1001_QUERY",{
            "type": "view","name": "檢視官網","sub_button": [ ]
          }
          
        ]
      },{
        "name": "主頁","sub_button": [
         {
            "type": "view",{
        "name": "關注我們","sub_button": [ ]
          }
        ]
      }
    ]
  }

基於PHP的微信公眾號的開發流程詳解

提交,提示成功選單即生成。

  選單內容中,有兩個型別 (type),一個是view,這個會直接開啟相應url連結;一個是click,這個就會在剛才主程式檔案中尋找對應key值執行相關的程式碼。

  格式不要弄錯就行。

  如果要修改選單,先刪除,再建立;一般來說,選單更改後,公眾號須重新關注才能馬上看到更改效果,否則要等24小時自動更新。

  到此這篇關於基於PHP的微信公眾號的開發流程詳解的文章就介紹到這了,更多相關PHP微信公眾號的開發內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!