製作人:陳曉華 qq:78976932 微信號:chen-jeo
開源項目:https://github.com/chenxhjeo,個人博客:http://blog.csdn.net/u013487761
技術QQ羣名稱:豆豆諮詢,羣號:625686304
微信公衆號名稱:豆豆諮詢,微信公衆號:douAsk
初建日期:2017.03.29,修改日期:2017.03.30
一、實驗目的
1、掌握微信公衆號後臺開發PHP入門。
二、實驗內容
1、成爲微信開發者;
2、在家、寢室、實驗室等環境,配置開發環境;
3、在微信PHP後臺驗證。
4、PHP接收用戶輸入以及回送消息。
三、實驗步驟及過程
由於手機端特性(例如內存小)與微信廣泛應用,微信開發與應用成爲當前的開發熱點。但微信公衆號存在一些侷限,例如難以通過查詢功能得到想要的結果。以下我們將引導大家如何成爲微信公衆號的開發者。
1、如何成爲微信開發者,即取得開發者密鑰。
1)在微信後臺(通過https://mp.weixin.qq.com登錄)點擊開發->基本配置,打開基本配置頁面,如下所示。
2)生成AppSecret(應用密鑰):需要完成三個步驟,如圖所示:
a)身份確認:二維碼掃描,授權設置開發者密鑰。
b)密碼驗證:輸入登錄密碼和驗證碼,如下圖所示。
c)查看AppSecret(微信爲AppSecert,哈哈,是不是英語寫錯了?):注意保存好你的AppID和AppSecret,如下圖所示。
2、在家、寢室、實驗室、公網等環境,配置開發環境。
如果您在家、寢室、實驗室等環境,想配置開發環境,那麼請關注“豆豆諮詢”公衆號,我們將傳遞給您具體的手冊及工具。
1)這裏假設您具有公網地址或者域名,則配置URL(服務器地址)、Token(令牌)、EncodingAESKey(消息加密密鑰)、消息加密方式,如下圖所示。
2)填寫URL(服務器地址)、Token(令牌)、EncodingAESKey(消息加密密鑰)、消息加密方式信息。分別解釋如下:
a)URL是你服務器的地址,具有驗證、接收消息、發送消息等功能的服務器,分別支持80端口和443端口。
b)Token是自己設定的令牌,必須爲英文或者數字,長度爲3-32字符。
c)EncodingAESKey爲消息加密密鑰,隨機產生,由43位字符組成,字符範圍爲A-Z,a-z,0-9。
d)消息加密方式:根據業務需要,可以設定明文模式、兼容模式、安全模式,系統推薦安全模式。我們以明文模式簡化開發流程,如下圖所示。
注意:微信開放平臺賬號的綁定在內測中。
3、在微信PHP後臺驗證。 主要涉及到驗證消息,具體PHP代碼如下:
<?php
//define yourtoken
define("TOKEN","weixin");
echo"I'am already Waiting for something...S.";
$wechatObj =new wechatCallbackapiTest();
$wechatObj->valid();//驗證消息
classwechatCallbackapiTest
{
public function valid()
{
$echoStr = $_GET["echostr"];
//valid signature , option
if($this->checkSignature()){
echo$echoStr;
exit;
}
}
private function checkSignature()
{
// you must define TOKEN by yourself
if (!defined("TOKEN")) {
throw new Exception('TOKEN is notdefined!');
}
$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;
}
}
}
?>
4、在微信PHP後臺接收用戶輸入的消息和回送給用戶的消息。微信要求必須在5秒之內得到回覆,如果沒有得到回覆,則嘗試三次。PHP接收消息和發送消息代碼描述如下:
privatefunction is_utf8($str)//判斷是否是utf8編碼
{
returnpreg_match('//u', $str);
}
public function responseMsg()
{
//get post data, May be due tothe different environments
$postStr =$GLOBALS["HTTP_RAW_POST_DATA"];
//extractpost data
if (!empty($postStr)){
libxml_disable_entity_loader(true);
$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(!empty($keyword ))
{
$msgType= "text";
$contentStr = "Welcome to wechat world!我是誰?";
$resultStr = sprintf($textTpl, $fromUsername, $toUsername,$time, $msgType, $contentStr);
$content = trim($postObj->Content);//消息內容json_encode($postObj->Content);
$contentStr = '你發送的信息是:接收人:'.$toUsername.',發送人:'.$fromUsername.',消息類型:'.$MsgType.',消息內容:'.$content.' ';
$resultStr = sprintf($textTpl, $fromUsername, $toUsername,$time, $msgType, $contentStr);
if ($this->is_utf8($resultStr)) {
//$resultStr = $resultStr;
} else {
//$resultStr = iconv('gb2312', 'UTF-8//IGNORE',$resultStr);
}
echo $resultStr;
}else{
echo "Input something...";
}
}else {
echo"";
exit;
}
}
四、常見錯誤
1、驗證不通過:在windows開發,主要由於編碼的差異導致驗證不通過,如果你遇到了類似問題還無法解決,請成爲關注“豆豆諮詢”公衆號,我們將爲您解答問題。
2、接收和發送中文信息,有時候會出現亂碼,原因也是同上所示。解決方法是採用utf-8編碼。如果你遇到了類似問題還無法解決,請成爲關注“豆豆諮詢”公衆號,我們將爲您解答問題。
五、技術服務
1、如果有疑問或者需要幫助,請加入QQ羣(羣名稱:豆豆諮詢,羣號:625686304);或者公衆號douAsk,公衆號名稱爲“豆豆諮詢”。掃描以下二維碼,關注“豆豆諮詢”。