php微信公众号开发入门,PHP微信公众号开发入门(二)
好了,上一篇已經介紹到了如何成為一個微信開發(fā)者,并且簡單介紹了如何獲取和發(fā)送簡單的文本信息,這次就來介紹一下其他類型數(shù)據(jù)的接收和發(fā)送方式。
我們可以通過微信端給我們發(fā)送來的xml來判斷用戶發(fā)送消息的類型,比如文本,圖片,音頻等等,具體獲取看代碼
$postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; //獲取POST數(shù)據(jù)
$postObj = simplexml_load_string($postStr,'SimpleXMLElement',LIBXML_NOCDATA);//這就是微信發(fā)來的xml
$fromUsername = $postObj->FromUserName; //獲取發(fā)送方帳號(OpenID)
$toUsername = $postObj->ToUserName; //獲取接收方賬號
$keyword = trim($postObj->Content); //獲取消息內容
$masType = $postObj->MsgType;//獲取消息類型
$time = time(); //獲取當前時間戳
可以看到,獲取到的xml中,MsgType就是用戶發(fā)送數(shù)據(jù)的類型,分別有 'text'(文本),'image'(圖片),location(位置),voice(音頻),video(視頻)等。我們就做一個簡單的根據(jù)用戶發(fā)送類型來返回相應數(shù)據(jù)的demo。
首先用switch case來區(qū)分不同的類型,這個函數(shù)不知道的自己百度,而后對應來編寫代碼
1,文字
我們就做成簡單的 “你發(fā)送的是:”格式的demo。先定義回復文本格式的xml模板,而后把剛獲取的用戶文字和我們需要的內容合并,最后通過 resultStr() 函數(shù)來格式化消息模板。函數(shù)用法自行百度
//返回消息模板
$textTpl = "%s
0";
switch ($masType) {
case 'text'://文字
$msgType = "text"; //消息類型
$contentStr = '你發(fā)送的是:'.$keyword;
$resultStr = sprintf($textTpl,$fromUsername,$toUsername,$time,$msgType,$contentStr);
echo $resultStr;
break;
這樣就會得到一個這樣的回復。
image.png
2.圖片
同樣的,我們還是做一個把用戶發(fā)來的圖片再發(fā)回給他的demo。用戶在像我們的公眾號發(fā)送圖片的時候,微信平臺會在保存圖片的同時,給這張圖片一個唯一的URL以及mediaId,這個URL在瀏覽器直接訪問就是你的那張圖片。開發(fā)者需要在服務器獲取該圖片的mediaId,而后再按照格式發(fā)送給微信方,微信就會返還對應這個mediaId的圖片給用戶。
$picUrl = $postObj->PicUrl;//圖片的鏈接
$mediaId = $postObj->MediaId;//圖片消息媒體id
$msgType = "image";
$replyXml = "%s";
echo sprintf($replyXml,$postObj->FromUserName,$postObj->ToUserName,time(),$msgType,$mediaId);
image.png
另外,如果你想發(fā)送指定的圖片給客戶,那么你需要先在開發(fā)者端把圖片發(fā)送給微信方,而后獲取這個圖片的mediaId,你可以選擇發(fā)送臨時素材(保存三天)或者永久素材,具體操作請看微信官方文檔。
3.圖文
我們自己關注的公眾號,給我們發(fā)送最多的消息應該就是圖文消息了,就是類似這樣的
image.png
大家肯定都知道,這樣的消息,在微信公眾平臺,點點敲敲的就可以發(fā)送了,但是這完全沒有開發(fā)者的代碼邏輯在內,也無法完全控制,所以我們要用代碼來實現(xiàn)這個功能。
首先我們定義一個二維數(shù)組,其中的參數(shù)名稱如代碼所示
$newsArr = array(
array(
"Title"=>"本世紀最像王昊的男人!",
"Description"=>"究竟是為何和王昊長得如此相像?",
"PicUrl"=>"http://5b0988e595225.cdn.sohucs.com/images/20171019/aab0f430638b4b1f87e48d19054b7b60.jpeg",
"Url"=>"http://www.wanghao-home.club"
),
array(
"Title"=>"艷照門祖師爺再現(xiàn)江湖!",
"Description"=>"究竟是電腦壞了還是存心所為…",
"PicUrl"=>"http://g.hiphotos.baidu.com/baike/pic/item/060828381f30e92496694c1044086e061c95f7c6.jpg",
"Url"=>"http://www.wanghao-home.club"
),
array(
"Title"=>"音樂才子竟拜師?",
"Description"=>"伯克利音樂才子竟然為何拜師王昊門下?讓我們來一探究竟!",
"PicUrl"=>"http://img01.e23.cn/2017/1003/20171003094603817.jpg",
"Url"=>"http://www.wanghao-home.club"
)
);
可以看到,這個二維數(shù)組中,一級數(shù)組一個,二級數(shù)組三個,其中的參數(shù)也都相同
Title:文章標題 Description:文章描述 PicUrl:文章圖片 Url:點擊會跳轉的鏈接
好了,數(shù)組定義完成,我們就要把數(shù)組處理成為微信可以接收的xml數(shù)據(jù)了,這里我給你提供一個方法
//判斷是否為數(shù)組類型
if(!is_array($newsArr))
{
return;
}
// 判斷數(shù)組是否為空數(shù)組
if(!$newsArr)
{
return;
}
$itemStr = "";
//定義item模板
$itemXml = "";
foreach($newsArr as $item)
{
$itemStr .= sprintf($itemXml,$item['Title'],$item['Description'],$item['PicUrl'],$item['Url']);
}
$replyXml = "%s
".count($newsArr)."
".$itemStr."";
echo sprintf($replyXml,$postObj->FromUserName,$postObj->ToUserName,time());
代碼里也沒有什么復雜的地方,就是一個循環(huán)賦值的過程,最后再格式化返回給微信方,這樣我們的用戶就會收到這樣的一個圖文消息
image.png
并且點擊對應的內容,就會跳轉到 www.wanghao-home.club
4.用戶關注
用戶在關注我們公眾號時,公眾平臺會發(fā)送給我們一個xml數(shù)據(jù),我們可以獲取其中的事件(Event),來判斷,而后回復給用戶一個歡迎語句
if($postObj->Event == 'subscribe'){
$msgType = "text"; //消息類型
$contentStr = '感謝您關注wellHome!';
$resultStr = sprintf($textTpl,$fromUsername,$toUsername,$time,$msgType,$contentStr);
echo $resultStr;
}
還有就是,個人開發(fā)者的訂閱號現(xiàn)在無法進行微信認證,所以無法自定義菜單以及一切瑣碎的功能,這點這得是讓我心碎啊。
自定義菜單也很簡單,我們只需要準備一個 json 數(shù)組,而后根據(jù)開發(fā)者的 AppID 和 AppSecret ,在公眾平臺上獲取一個Access_token,而后token通過驗證,你的數(shù)組就可以成為公眾號的菜單了。并且微信還提供了多種事件,開發(fā)者可以在代碼中,通過用戶不同事件所發(fā)送的值以及菜單中你自己定義的 Key值就可以做對應的操作了。
這篇文章暫時先介紹這三種回復內容的格式,下一篇再詳細介紹其他內容格式,希望會對您有所幫助。
總結
以上是生活随笔為你收集整理的php微信公众号开发入门,PHP微信公众号开发入门(二)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 我们能用计算机来计算用英文,利用计算机进
- 下一篇: PHP简单入门基础知识