微信開發示例(簡單的回顯當前的時間)

概述

這是一個簡單的微信開發示例,當用戶的輸入不爲空的時候,公衆號將會向用戶顯示當前的時間。php

源碼

<?php

define("ToKEN", "weixin");   //定義一個常量
$wechatObj = new wechatCallbackapiTest();

//標準模版
if (isset($_GET['echostr'])) {
    //echo $_GET['echostr'];
    $wechatObj->valid();
} else {
    $wechatObj->responseMsg();
}

class wechatCallbackapiTest
{
    public function valid()
    {
        $echoStr = $_GET["echostr"];
        if ($this->checkSignature()) {
            echo $echoStr;
            exit;   //輸出一個消息而且退出當前腳本
        }
    }

    //驗證微信簽名
    private function checkSignature()
    {
        $signature = $_GET["signature"];    //微信加密簽名
        $timestamp = $_GET["timestamp"];    //時間戳
        $nonce = $_GET["nonce"];    //隨機數

        $token = TOKEN; //微信token
        $tmpArr = array($token, $timestamp, $nonce);
        sort($tmpArr);  //對數組進行排序
        $tmpStr = implode($tmpArr); //將一個一維數組的值轉化爲字符串
        $tmpStr = sha1($tmpStr);    //計算字符串的 sha1 散列值

        if ($tmpStr == $signature) {
            return true;
        } else {
            return false;
        }
    }

    //發送信息
    public function responseMsg()
    {
        /**
         *  基本上$GLOBALS['HTTP_RAW_POST_DATA'] 和 $_POST是同樣的。可是若是post過來的數據不是PHP可以識別的,
         * 你能夠用 $GLOBALS['HTTP_RAW_POST_DATA']來接收,好比 text/xml 或者 soap 等等
         */
        $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];

        if (!empty($postStr)) { //檢查一個變量是否爲空
            $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
            /**
            * 用戶的OpenID,不是唯一的,相同的用戶關注不一樣的公衆帳號後,
            * 獲取的OpenID是不一樣的。
            */
            $fromUsername = $postObj->FromUserName;    //發送方微信號(openid)
            $toUsername = $postObj->ToUserName;    //開發者微信公共帳號
            $keyword = trim($postObj->Content);

            $time = time(); //返回當前的 Unix 時間戳

            //返回給微信服務器的模版
            $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 = "當前時間: " . date("Y-m-d H:i:s", time());
                $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);   //格式化字符串
                echo $resultStr;
            }
        } else {
            echo "獲取的信息爲空";
            exit;
        }
    }
}

?>
相關文章
相關標籤/搜索