首頁  >  文章  >  微信小程式  >  微信介面開發的詳細介紹

微信介面開發的詳細介紹

高洛峰
高洛峰原創
2017-03-24 14:12:232347瀏覽

創建過程就需要做簽名校驗,描述如下:

 

公眾平台用戶提交資訊後,我們將以GET請求方式請求到填寫的Url上,並且帶上四個參數:

* signature — 微信加密簽章

* timestamp — 時間戳

* nonce — 隨機數字

* echostr — 隨機字串

開發者透過檢驗signature對網址存取合法性進行校驗。若此次GET請求原樣返回echostr參數內容,則接入生效,否則接入失敗。驗證signature將結合開發者填寫的token參數、timestamp參數和nonce參數等,加密流程:

* 將token、timestamp、nonce三個參數進行字典序排序

* 將三個參數字串拼接成一個字串進行SHA1加密

* 開發者取得加密後的字串可與signature對比,標識該請求來自微信。

程式碼:

<?  
        $signature = $_GET[&#39;signature&#39;];  
        $timestamp = $_GET[&#39;timestamp&#39;];  
        $nonce = $_GET[&#39;nonce&#39;];      
                  
        $token = TOKEN;  
        $tmpArr = array($token, $timestamp, $nonce);  
        sort($tmpArr);  
        $tmpStr = implode( $tmpArr );  
        $tmpStr = sha1( $tmpStr );  
          
        if( $tmpStr == $signature ){  
            return $_GET[&#39;echostr&#39;];  
        }else{  
            return false;  
        }  
?>

然而,微信不走json途徑傳遞資料:

 

所以要用simplexml_load_string裝XML資料為物件,另外發現POST方法不是urlencode,所以設定HTTP_RAW_POST_DATA,然後可以讀取資料.

ToUserName 訊息接收方微訊號,一般為公眾平台帳號微訊號

FromUserName 訊息傳送方微訊號

CreateTime 訊息建立時間

MsgType 文字訊息為text

Content 訊息內容

<?php  
$postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; //符合微信的POST规范  
if (!emptyempty($postStr))  
{  
 
    $postObj = simplexml_load_string($postStr, &#39;SimpleXMLElement&#39;, LIBXML_NOCDATA); //XML转对象函数,可能最近这一两年入行的不太清楚XML函数  
      
    //数据从对象取出  
    $fromUsername = $postObj->FromUserName;   
    $toUsername = $postObj->ToUserName;  
    $CreateTime = $postObj->CreateTime;  
    $MsgType = $postObj->MsgType;  
    $Content = $postObj->Content;  
 
    $keyword = trim($postObj->Content); //安全Trim  
    $time = time();  
    //XML数据体  
    $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(!emptyempty( $keyword )) //如果发信息来了,不是空白POST,微信规定立即回复,不用推送.  
    {  
        $msgType = "text"; //定义类型  
        $contentStr = "Hello World,I am Tater!"; //回复  
        $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr); //记住,Tpl是要载入的  
        echo $resultStr; //输出,以便微信抓!  
    }  
    else 
    {  
        echo "What are you say!"; //输入信息有问题,提示输入!  
    }  
 
}  
else 
{  
    echo "";  
    exit;  
}  
 
 
?>

以上是微信介面開發的詳細介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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