微信公衆平臺開發——helloworld

威信公衆平臺有兩種模式:編輯模式 和 開發模式。

普通的功能可以通過編輯模式來搞定。開發模式具有更多的功能。讓我們來使用開發模式開發helloword吧

步驟如下:

1.先註冊一個公衆號(https://mp.weixin.qq.com)

2.註冊sae(http://sae.sina.com.cn/),作爲你的服務器。

3.登錄微信公衆平臺(https://mp.weixin.qq.com)查看開發文檔並下載官方提供的demo。做適當修改。

4.將代碼壓縮成zip格式,上傳到sae平臺。

5.登錄微信公衆平臺,進入開發者中心。開啓“服務者配置”。

6.成功了。

 

開始吧:

1.先註冊一個公衆號(https://mp.weixin.qq.com);個人可以註冊訂閱號(公衆號的一種)。

2.註冊sae(http://sae.sina.com.cn/)

  註冊完以後要記得進行實名認證,不然綁定到公衆平臺的時候,會有永遠的“無法獲取token”的提示。(實名認證需要3個工作日才能成功)

  然後可以點擊創建應用。創建後可以在下面看到。

  

  進入自己創建的應用。然後點擊代碼管理。

  

 

3.登錄微信公衆平臺(https://mp.weixin.qq.com)

  查看開發文檔並下載官方提供的demo。

  

  

 

  打開後是如下的代碼:

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

//define your token
define("TOKEN", "weixin");
$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)){
                /* 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!";
                    $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;
        }
    }
}

?>

  我試過,如上代碼,似乎無法執行到response那一塊。所以做了更改

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

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

//這裏做了更改
if($_GET["echostr"]){
    $wechatObj->valid();
}else{
    $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!";
                    $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;
        }
    }
}

?>

 

  你可以將Welcome to wechat world!更改爲Hello World!

4.將代碼壓縮成zip格式,上傳到sae平臺。

  點擊“編輯代碼”,可以看到你上傳的php文件。然後右擊,url查看。複製url(http://1.carlzhang.sinaapp.com/wx_carlzhang819.php)。在這裏要記住在此php文件中定義的token。此處爲“weixin”,可以在如下圖中看到。

 

5.登錄微信公衆平臺,進入開發者中心。開啓“服務者配置”。url填寫上一步複製的url(這裏我刪除了前面的1.因爲我的sae默認第一版。你可以試試,刪除1,若是url訪問,不報404,那就是沒問題)。token填寫的是代碼中的token(上面是“weixin”)。

 

  如果啓用成功,就可以關注你的微信平臺,輸入內容,看看提示是不是Welcome to wechat world!或者Hello World!

  是的?那祝賀你,成功了。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章