1. 程式人生 > >php開發日記之微信開發模式

php開發日記之微信開發模式

學php最大的熱情就是在大一的時候接觸微信公眾平臺,第一次玩的時候還是編輯模式,慢慢深入就接觸到開發模式了,今天寫開發模式的接入,這是微信開發的最基礎的。
1.首先呢,你必須要有伺服器,不管是新浪雲sae,百度雲bae,阿里雲ace都可以,或者是虛擬空間,雲主機都是可以的,那我當然是使用的阿里雲的雲主機作為開發伺服器,依舊是appserv整合環境,有獨立ip
2.開啟微信公眾平臺,點選開發者中心,我們需要做的就是將伺服器配置這地方連線好,下面說怎麼配置
3.找到開發者文件,點選左邊開發者必讀,找到php示例程式碼下載,解壓,將所得到的wx_sample.php檔案上傳到伺服器的www資料夾下面,我下面的程式碼是基於官方的修改

<?php
define("TOKEN", "weixin");//定義常量TOKEN為weixin,也就是後臺填寫的token
$wechatObj = new wechatCallbackapiTest();//例項化類物件
if(isset($_GET['echostr'])){//判斷GET請求中是否有echostr物件
	$wechatObj->valid();
}else{
	$wechatObj->responseMsg();
}

class wechatCallbackapiTest//定義類,並實現三種方法
{
	public function valid()
    {
        $echoStr = $_GET["echostr"];
        if($this->checkSignature()){//呼叫checkSignatuure方法
        	echo $echoStr;
        	exit;
        }
    }
	private function checkSignature()//檢查簽名
	{
        $signature = $_GET["signature"];
        $timestamp = $_GET["timestamp"];
        $nonce = $_GET["nonce"];
        		
		$token = TOKEN;
		$tmpArr = array($token, $timestamp, $nonce);//token,時間戳,隨機數
		sort($tmpArr);
		$tmpStr = implode( $tmpArr );
		$tmpStr = sha1( $tmpStr );
		
		if( $tmpStr == $signature ){
			return true;
		}else{
			return false;
		}
	}

    public function responseMsg()
    {
		
		$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];//接收原始訊息

		if (!empty($postStr)){
              	$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);//將資料載入原始物件中
                $fromUsername = $postObj->FromUserName;
                $toUsername = $postObj->ToUserName;
                $keyword = trim($postObj->Content);
                $time = time();
                $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( $keyword =="?")
                {
              		$msgType = "text";
                	$contentStr = date("Y-m-d H:i:s",time());
                	$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
                	echo $resultStr;//這幾句是封裝回復的xml資料包
					
                }else {
        	echo "";
        	exit;
        }
		}
		}
}

?>
這程式碼的意思是,在微信平臺回覆?,將自動回覆當前時間給傳送者。程式碼解釋就直接標註在程式碼上了。

4.將微信後臺URL這一欄填寫伺服器IP地址(或者域名)/wx_sample.php,token一欄填寫weixin即可,點選提交,即可提交成功,如果提交失敗,可能是伺服器響應太慢,重新提交,或者換一臺延遲第一點的伺服器。

5.至於加密方式可以隨便選一個暫時,畢竟這個程式碼只是用來測試的