這是一個簡單的微信開發示例,當用戶的輸入不爲空的時候,公衆號將會向用戶顯示當前的時間。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; } } } ?>