天天看點

微信公衆平台接入方式

微信公衆平台目前有訂閱号、服務号、企業号三種類型。接入的方式分為明文、相容和密文三種。明文模式下,不使用消息體加解密功能,安全系數較低。相容模式下,明文、密文将共存,友善開發者調試和維護安全模式下,消息包為純密文,需要開發者加密和解密,安全系數高。推薦使用安全模式。微信背景對要發送的消息進行AES-CBC加密,具體使用的是SHA1算法。三種類型公衆号的接入原理都是一樣的。

注意事項:接入驗證TOKEN的過程中,微信背景會額外帶上3個參數:signature、timestamp(時間戳)、nonce(随機數)。signature是對timestamp、nonce和TOKEN進行SHA1加密運算後的字元串。我們自己的伺服器收到上面三個參數後,同樣适用SHA1運算得到自己的簽名signature,并将結果與微信背景提供的簽名signature進行比較,一緻那麼接入成功。不一緻可通過微信官方提供的接口調試工具進行調試。

下面是明文接入和密文接入的兩種PHP源代碼。僅供參考。

//接入公衆号驗證基類

class wechatlogin

{

public function valid()

{

echoStr= _GET[“echostr”];

//驗證簽名是否有效 , 用于判斷是否為接入驗證請求。

if($this->checkSignature())
        {
            echo $echoStr;
            exit;
        }
}

private function checkSignature()
    {
        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);
    sort($tmpArr, SORT_STRING);
    $tmpStr = implode( $tmpArr );
    $tmpStr = sha1( $tmpStr );
    //比較兩個簽名是否一緻
    if( $tmpStr == $signature )
        {
            return true;
        }else
            {
                return false;
            }
    }
           

};

繼續閱讀