溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

微信接口開(kāi)發(fā)的示例分析

發(fā)布時(shí)間:2021-09-13 17:14:44 來(lái)源:億速云 閱讀:83 作者:小新 欄目:移動(dòng)開(kāi)發(fā)

這篇文章主要介紹了微信接口開(kāi)發(fā)的示例分析,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

創(chuàng)建過(guò)程就需要做簽名校驗(yàn),描述如下:

公眾平臺(tái)用戶提交信息后,我們將以GET請(qǐng)求方式請(qǐng)求到填寫(xiě)的Url上,并且?guī)纤膫€(gè)參數(shù):

* signature — 微信加密簽名

* timestamp — 時(shí)間戳

* nonce — 隨機(jī)數(shù)

* echostr — 隨機(jī)字符串

開(kāi)發(fā)者通過(guò)檢驗(yàn)signature對(duì)網(wǎng)址接入合法性進(jìn)行校驗(yàn)。若此次GET請(qǐng)求原樣返回echostr參數(shù)內(nèi)容,則接入生效,否則接入失敗。驗(yàn)證signature將結(jié)合開(kāi)發(fā)者填寫(xiě)的token參數(shù)、timestamp參數(shù)和nonce參數(shù)等,加密流程:

* 將token、timestamp、nonce三個(gè)參數(shù)進(jìn)行字典序排序

* 將三個(gè)參數(shù)字符串拼接成一個(gè)字符串進(jìn)行SHA1加密

* 開(kāi)發(fā)者獲得加密后的字符串可與signature對(duì)比,標(biāo)識(shí)該請(qǐng)求來(lái)源于微信。

代碼:

<?  
        $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 $_GET['echostr'];  
        }else{  
            return false;  
        }  
?>

然而,微信不走json途徑傳遞數(shù)據(jù):

所以要用simplexml_load_string裝XML數(shù)據(jù)為對(duì)象,另外發(fā)現(xiàn)POST方法不是urlencode,所以設(shè)置HTTP_RAW_POST_DATA,然后可以讀取數(shù)據(jù).

ToUserName 消息接收方微信號(hào),一般為公眾平臺(tái)賬號(hào)微信號(hào)

FromUserName 消息發(fā)送方微信號(hào)

CreateTime 消息創(chuàng)建時(shí)間

MsgType 文本消息為text

Content 消息內(nèi)容

<?php  
$postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; //符合微信的POST規(guī)范  
if (!emptyempty($postStr))  
{  
 
    $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA); //XML轉(zhuǎn)對(duì)象函數(shù),可能最近這一兩年入行的不太清楚XML函數(shù)  
      
    //數(shù)據(jù)從對(duì)象取出  
    $fromUsername = $postObj->FromUserName;   
    $toUsername = $postObj->ToUserName;  
    $CreateTime = $postObj->CreateTime;  
    $MsgType = $postObj->MsgType;  
    $Content = $postObj->Content;  
 
    $keyword = trim($postObj->Content); //安全Trim  
    $time = time();  
    //XML數(shù)據(jù)體  
    $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 )) //如果發(fā)信息來(lái)了,不是空白POST,微信規(guī)定立即回復(fù),不用推送.  
    {  
        $msgType = "text"; //定義類型  
        $contentStr = "Hello World,I am Tater!"; //回復(fù)  
        $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr); //記住,Tpl是要載入的  
        echo $resultStr; //輸出,以便微信抓!  
    }  
    else 
    {  
        echo "What are you say!"; //輸入信息有問(wèn)題,提示輸入!  
    }  
 
}  
else 
{  
    echo "";  
    exit;  
}  
 
 
?>

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“微信接口開(kāi)發(fā)的示例分析”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來(lái)學(xué)習(xí)!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI