一级片大奶子_色又黄又爽18禁免费视频_热久久久久久久_久久久精品一区二区_日韩av不卡在线播放_精品国内自产拍在线观看视频

微信技術(shù)實(shí)操(11):公眾賬號接收非文字消息

2017-08-24|HiShop
導(dǎo)讀:用戶都是用使用文字在進(jìn)行交互的,但是有時候使用圖片、語音、視頻以及地理位置等可以實(shí)現(xiàn)一些非常棒的功能,比如語音提醒公眾號里的發(fā)送語音就可以實(shí)現(xiàn)定時的事件提醒功能...

  用戶都是用使用文字在進(jìn)行交互的,但是有時候使用圖片、語音、視頻以及地理位置等可以實(shí)現(xiàn)一些非常棒的功能,比如“語音提醒”公眾號里的發(fā)送語音就可以實(shí)現(xiàn)定時的事件提醒功能;比如ZTalk曾經(jīng)搞過微信拍照曬電腦桌面的活動(響應(yīng)的人太少,桑心……);比如一些預(yù)定本地化服務(wù)的公眾號里發(fā)送當(dāng)前地理位置就可以查詢周邊商家。

  要實(shí)現(xiàn)這些功能首先得學(xué)會接收這些消息類型,比文字消息類型肯定要復(fù)雜很多了,目前我們能夠接收的消息類型只有圖片、地理位置以及退訂消息,其他的如鏈接消息、語音消息是需要官方授權(quán)的。接收到用戶消息以后回復(fù)的消息類型可以參考第11章,目前也就那三種。

  一、圖片消息接收

  相信拍照是目前智能手機(jī)用戶用得最多的功能沒有之一,在微信里也是一樣,看看每天朋友圈里分享的那些照片就知道了,那么如何接收和保存用戶照片捏,首先我們得了解用戶發(fā)送的圖片消息結(jié)構(gòu),如下圖:

  

 

 

  大家可以看到圖片消息除了固定的消息發(fā)送用戶ID、接收公眾號ID、生成時間等固定字段外,多了一個圖片鏈接PicUrl,這個就是用戶向公眾賬號發(fā)送圖片后,保存到微信的服務(wù)器上返回給公眾號的鏈接,該圖片鏈接格式如下:

  

 

 

  也就是說我們?nèi)绻褕D片保存到本地服務(wù)器,就要先將圖片從微信服務(wù)器上抓取下來,當(dāng)然你也可以直接保存這個鏈接以后直接訪問,這個看具體應(yīng)用了。今天要講的是圖片保存到本地服務(wù)器上,請看下面代碼:

  

 

 

  由于圖片消息是另一種消息類型,因此代碼添加位置可以位于文字消息上面或者下面,只要別在文字消息的判斷語句內(nèi)就行。然后我來解釋下每個語句的作用:

  第20行,判斷消息類型是否為圖片消息,條件為$form_MsgType==image;

  第24行,獲取圖片消息數(shù)據(jù)中的圖片鏈接并賦值給$from_PicUrl;

  第26行,生成要保存到本地服務(wù)器的圖片名稱,為了避免重復(fù)新圖片命名使用了發(fā)送用戶的OPENID+當(dāng)前時間戳,文件的后綴名我是直接設(shè)定為jpg文件。(由于從圖片鏈接上無法獲取到圖片后綴名,又懶得通過頭文件獲取圖片格式,就直接固定死了JPG格式,貌似沒有什么問題,哈哈哈);

  第28行,SAE上的內(nèi)置接口類很多,SaeFetchurl是一個用來抓取遠(yuǎn)程網(wǎng)頁的類,使用這個類就可以很方便的實(shí)現(xiàn)抓取其他網(wǎng)站的內(nèi)容,否則使用PHP的curl或者file_get_contents這些估計還得解釋半天,這句代碼是新建一個抓取類的對象。

  第30行,執(zhí)行抓取圖片鏈接,其中抓取的函數(shù)是fetch(),圖片鏈接是之前賦值的$from_PicUrl,抓取后的結(jié)果賦值給$res;

  第32行,判斷抓取結(jié)果,errno()返回的是抓取結(jié)束后的錯誤代碼,如果為0則成功,其他的就是不成功。

  第35行,圖片抓取成功后,新建一個Storage的對象,我們要保存圖片了。

  第37行,這句代碼其實(shí)已經(jīng)在以前出現(xiàn)多次,這次將抓取的內(nèi)容($res)寫入指定的文件($filename),并保存到Storage里,請注意把“weixincourse”替換成自己創(chuàng)建的Storage空間名。

  第39行到41行,保存成功后給用戶提示圖片上傳成功。

  第45行到48行,文件沒有抓取到提示用戶圖片上傳失敗。

  當(dāng)然我們?nèi)绻麌?yán)謹(jǐn)一點(diǎn),還要判斷圖片文件是否保存成功,可以把第37行后面改寫一下,如下圖:

  

 

 

  大家可以嘗試把Storage的空間名字故意寫錯,看看會有什么樣的提示。如果提示上傳成功,我們到SAE的Storage列表里就應(yīng)該可以看到剛上傳的文件了。

  

 

 

  二、地理位置消息接收

  手機(jī)上基于地理位置的APP很多,是個應(yīng)用現(xiàn)在都得跟LBS扯上點(diǎn)關(guān)系,SoLoMo里重要的一環(huán)就是地理位置,微信里也有很多應(yīng)用是跟地理位置相關(guān)的,比如查個本地天氣、附近酒店餐館啥的。今天舉的例子是查本地天氣。先了解下地理位置消息的結(jié)構(gòu),如下圖:

  

 

 

  地理位置消息多了四項,分別是經(jīng)緯度的X和Y坐標(biāo)、地圖縮放比例以及地址信息,而實(shí)際上由于網(wǎng)絡(luò)原因我們經(jīng)常是收不到地址信息的,只有坐標(biāo)信息,因此地理位置的開發(fā)基本圍繞著坐標(biāo)來。先來看本地天氣查詢代碼吧,如下圖:

  

 

 

  代碼添加位置同圖片消息,另起一個消息類型判斷語句,可以放在圖片消息前面或者后面。前面說了我們主要使用的是經(jīng)緯度,經(jīng)緯度是可以通過一些地圖api接口來獲取實(shí)際地址、周邊商家等信息的,天氣代碼這里我用的是百度地圖API接口,主要是因為它有URL接口,代碼解釋開始:

  第21行,消息類型判斷語句,消息類型為location;

  第24行到27行,將用戶推送地理消息的經(jīng)緯度、地圖比例、地址信息分別賦值。經(jīng)緯度分別為Location_X和Location_Y,相當(dāng)于用經(jīng)線和緯線的交叉點(diǎn)來標(biāo)注地理位置。Scale是用戶發(fā)送地理位置時地圖的縮放比例。Label是地址信息(經(jīng)常是獲取不到的,獲取了也沒啥用,因為都是連在一起的,無法提取地市縣信息)。

  第29行,定義百度地圖API接口的反向地址解析URL,反向地址解析是指通過經(jīng)緯度獲取當(dāng)前位置的地址信息。

  第31行,由于各家地圖不一樣因此傳輸過來的經(jīng)緯度也會有所偏差,這里我選的是wgs84即手機(jī)GPS的坐標(biāo)。

  第33行,又要抓頁面了,先建個抓取類的對象。

  第35行,百度地圖API接口的反向地址解析規(guī)則是URL+坐標(biāo)類型+坐標(biāo)值,其中$map_api_url.$map_coord_type兩個變量拼接就是URL+坐標(biāo)類型,然后再加上經(jīng)緯度參數(shù),用location=經(jīng)度,緯度來賦值。

  這里說下URL的規(guī)則,URL就是大家常看到的網(wǎng)頁鏈接,一般由HTTP://后面加網(wǎng)址加參數(shù)組成,主要說下參數(shù),參數(shù)一般是“參數(shù)名=賦值”組成,普通的URL參數(shù)格式是跟在網(wǎng)址后面第一個參數(shù)前用“?”號分隔,第二個參數(shù)開始用“&”分隔,參數(shù)在程序里是可以獲取到的,我們上面獲取坐標(biāo)解析的實(shí)際地址形式為:

  

 

 

  接收的實(shí)際地址為http://api.map.baidu.com/geocoder,獲取到的參數(shù)是coord_type和location,值為相應(yīng)后面跟著的。

  第37行,判斷是否抓取成功,如果抓取成功$geocoder的數(shù)據(jù)實(shí)際是如下格式:

  

 

 

  這里一大堆信息里只需要提取城市,即CITY這個標(biāo)簽內(nèi)的數(shù)據(jù)。

  第40行,這是一個正則表達(dá)式,比較復(fù)雜,作用就是根據(jù)規(guī)則將$geocoder里的北京市數(shù)據(jù)提取出來賦予$city這個變量,如果成功這個數(shù)據(jù)是會是一個多維數(shù)組,其中city標(biāo)簽內(nèi)的數(shù)據(jù)即北京市是存儲在$city[1][0]里的,$city[0][0]的值是“北京市”;

  第41行,將$city[1][0]的值即“北京市”提取出來,同時使用str_replace函數(shù)將“市”替換掉再重新賦值給$city,str_replace按照字面意思就是字符串替換,用法是:str_replace(要替換的內(nèi)容,替換成的內(nèi)容,字符串);其中替換的內(nèi)容和替換成的內(nèi)容可以使用數(shù)組,也可以使用單個字符串,我這里是用了數(shù)組,即將市縣區(qū)都替換成了空,替換的用處是因為后面查天氣預(yù)報的接口只支持城市名稱,不能有市縣區(qū)啥的……經(jīng)過這一步$city的值就是“北京”;

  第43行,定義天氣API接口的URL;

  第45行,做了三件事,第一個使用iconv()函數(shù)將$city的字符編碼從UTF-8轉(zhuǎn)換成GBK,第二件是使用urlencode將漢字轉(zhuǎn)換成英文編碼方便URL傳值,第三件是將URL中的“&city=”的參數(shù)名拼接了。

  關(guān)于字符,有時候我們上網(wǎng)的時候會發(fā)現(xiàn)網(wǎng)頁有亂碼,大部分是因為字符編碼不對造成的,可以調(diào)節(jié)瀏覽器的編碼來切換,在程序里也是一樣,由于新浪接口接收的字符串是GBK的,而我們程序里使用UTF-8,所以需要轉(zhuǎn)碼后才能通訊,否則新浪接口收到的就是亂碼。

  PS:GBK或者GB2312是中文簡體編碼,屬于ANSI編碼,但是同個ANSI編碼值在不同國家的編碼對應(yīng)是不同的文字,會非?;靵y,所以有了Unicode以及UTF-8,這是國際通用的文字編碼格式,所有文字都被分配了不同的編碼,也就不怕亂碼了。

  第46行,查詢天氣日期,0表示當(dāng)天,1表示明天,以此類推……

  第49行,抓取天氣內(nèi)容并賦值給$weather,這里不需要再建立抓取類的對象了,因為之前已經(jīng)建立了可以直接用。

  第51行,判斷是否抓到天氣,這里我多加了一個

  

 

 

  strstr函數(shù)是用來檢查$weather里是否存在“Weather”這個字符串,&&表示并且,這里的判斷就是不僅要抓取成功并且在抓取到的內(nèi)容里存在“Weather”。這樣寫的目的是因為新浪天氣接口不管有沒有查詢到天氣都會返回數(shù)據(jù),而判斷數(shù)據(jù)里是否有天氣信息,只有判斷返回內(nèi)容里有木有“Weather”這個字符串。成功抓取到的會是如下內(nèi)容:

  

 

 

  這又是一個XML,然后用的是一些拼音首字母做了標(biāo)簽,把這個回復(fù)給用戶估計會瘋的,我們要進(jìn)行一些整理,方法嘛就是用正則表達(dá)式來提取我們需要的內(nèi)容,我這里提取的標(biāo)簽是city(城市)、status2-status1(天氣變化)、temperature2-temperature1(溫度變化)、direction2-power2(風(fēng)向風(fēng)力)、chy_shuoming(穿著建議)、savedate_weather(信息發(fā)布時間)

  第54行到62行就是提取這些數(shù)據(jù)的正則表達(dá)式,可以發(fā)現(xiàn)其實(shí)改動的只是標(biāo)簽名和賦值的參數(shù),如果大家還想加寫數(shù)據(jù)的可以參照著提取;

  第64行到71行判斷天氣變化是否相同,比如上面顯示的天氣1和天氣2其實(shí)都是陰,如果不做判斷就會返回給用戶“陰轉(zhuǎn)陰”,非常2,所以這里判斷如果兩個天氣是一致的則將任意一個天氣賦值給$w_status變量,否則就按照天氣2轉(zhuǎn)天氣1賦值給$w_status變量,最后輸出時用$w_status這個變量。

  第73行到81行新建一個數(shù)組,將前面獲取到的天氣數(shù)據(jù)添加為數(shù)組元素,格式就是$weather_res=array();然后在括號里用逗號分割每個天氣數(shù)據(jù),最后一個后面不要加逗號,這樣做的好處是避免代碼行過長,而且很清晰。

  第82行,將數(shù)組用implode()函數(shù)轉(zhuǎn)化成數(shù)組,用””這個換行符來分割。

  其實(shí)73到82行完成的就是將所有數(shù)據(jù)拼接成一個字符串,使用“.”一個個拼也可以,不過效率低下而且代碼也不夠清晰。

  全部拼接完成就可以輸出了,在手機(jī)上效果如下:

  

 

 

  后面的就不詳細(xì)說了,都有標(biāo)注,都是些判斷提示語句,大家可以自己學(xué)著看,不懂的可以直接在后臺問。另外強(qiáng)調(diào)一點(diǎn),一般天氣預(yù)報是拿中國天氣網(wǎng)接口做的會比這個更好,能夠顯示縣區(qū)級的天氣,但是需要搞個城市代碼表,留到以后說吧,新浪的接口可以直接用城市名查就先演示下。

  三、退訂消息接收

  不知道還有多少人記得我曾寫過一篇《那些離開的朋友們》,是因為微信把退訂消息接口開了,每天看到不少人退訂心里有點(diǎn)小難過寫的,到今天我看了下差不多有2000個退訂用戶了,估計是我現(xiàn)在寫的東西不合他們胃口。

  退訂消息接口的代碼很簡單,跟用戶訂閱一樣是一個事件類型的消息,只是事件類型的標(biāo)示是”unsubscribe“,退訂用戶最好是配合數(shù)據(jù)庫來記錄,我這里給大家的是一個保存成文件的例子,如下圖:

  

 

 

  代碼添加的位置請看仔細(xì)了,在事件消息判斷里的獲取事件類型之后。代碼很短,解釋如下:

  第300行,判斷事件類型標(biāo)示是否為”unsubscribe“,大家可以看下訂閱消息是”subscribe“;

  第303行,新建一個Storage的對象;

  第305行,寫入文件,文件名為退訂用戶的OPENID,文件后綴是.txt,內(nèi)容我用了退訂時間。

  當(dāng)用戶退訂后在Storage的存儲空間里就會有一個文件生成。

TAGS:
推薦閱讀
主站蜘蛛池模板: 久久久综合九色综合88|#NAME?|韩国激情3小时14分合集|免费国产美女视频永久免费|国产精品毛片大码女人|草逼视频观看 | 天天看片导航|又粗又猛又黄又爽无遮挡|人妻无码专区一区二区三区|国产l精品国产亚洲区久久|少妇被又大又粗猛烈进出视频|国产精品夜色一区二区三区 | 大内密探零零性在线|中文字幕无码免费久久|xxxxx中国少妇|男男调教小太正裸体|虎白女粉嫩尤物福利视频|成人一级免费 | 精品久久久成人|欧美人与性囗牲恔配|漂亮人妇中出中文字幕在线|91=avpornwwww蝌蚪99|狠狠爱亚洲|久久亚洲一区二区三区四区五区高 | 国产一区二区三区久久悠悠色=av|成人免费视频看看|久久国产精品-国产精品|男人J进女人J啪啪无遮挡|成人片黄网站=a毛片免费|久久精品91视频 | 一区二区三区精液|成人二区三区|99精品国产99久久久久久97|久久久久久高清毛片|亚洲啊啊啊啊啊|亚洲人成亚洲精品 | 亚洲啪啪|麻豆视传媒短视频免费官网|成人啪啪178|一区二区三区四区高清精品免费观看|日本一区二区三区免费看|久草视频免费播放 | 黄色网址免费在线观看|蜜臀=av夜夜澡人人爽人人桃色|极品少妇XXXXⅩ另类|国产成人一区二区无码不卡在线|亚洲无线视频|九九久久精品国产=aV片国产 | 久久精品国产清高在天天线|天堂在线观看www|毛片=av在线免费观看|精品国产欧美一区二区五十路|老熟女草BX×|人妻慢慢放弃抵抗开始迎合 | 久久国产毛片|成人午夜免费网站|久久久=av影视|男同性恋视频在线观看|欧美一级日韩一级|久草免费在线播放 | chin=a熟妇老熟女hd|精品国产国产综合精品|成人亚洲精品777777ww|欧美日本一道本在线视频|欧美肥屁videossex精品|高潮毛片无遮挡高清免费视频 | 业余自由性别成熟偷窥|国产夫妻原创自拍|91精品区|青青青爽视频在线观看|黄片毛片在线|朋友的姐姐2在线观看 | 国产精品久久三区|三级网站在线看|色在线免费观看|小12萝裸体无码视频|性少妇xx|一级黄色大片视频 | 国产精品原创视频|国产综合视频|1000部夫妻午夜免费|亚洲综合九九|色99日韩|成人久久18秘免费 | 日韩精品成人=av|午夜精品一区二区三区免费视频|亚洲精品国产综合久久一线|国产三级=aV在在线观看|GV无码免费无禁网站男男|欧美videos另类极品 | 免费无码又爽又刺激高潮的动漫|欧美日日日|亚洲=aV无码一区二区三区在线播放|国产九九=av|中文字幕无码视频专区|中文字幕一区二区三区手机版 | 中文在线日韩|免费高清日本|在线观看免|色就是94综合|日韩=av大片在线|国内精品人妻在线中文字幕 | 澳门成免费crm大全|日韩在线精品成人=aV|精品国产一区二区三区成人影院|日韩=av中文无码影院|久久最新金品视频免费播放|国产精品1卡2卡3卡4卡 | www.=av视频在线|人人爽人人人爽人人爽|在线看自拍|免费午夜无码片在线观看影院|久热91|三级小说欧洲区亚洲区 | 色蜜桃=av|四虎影院在线看|最色网ww|爱色=av|欧美另类日韩|69国产成人精品午夜福中文 | 国产精品久久久久久久小唯西川|日韩免费高清视频|亚洲另类自拍|黑森林精品=aV导航|日韩精品专区=av无码|高清精品久久 | 91成人小视频|国产精品乱码视频|日韩美女乱婬=a=a=a高清视频|www.xxxx欧美|欧美浓毛大BBwBBW|精品图区 在线观看免费v=a|国产久一|日本亚洲三级|c=aowo88国产欧美久久|能免费看的=av|97热精品视频官网 | 大地免费资源|成人综合色区|无码综合天天久久综合网|男人猛躁女人网站|国产午夜福利小视频合集|国产女人与公拘交在线播放 | 亚洲第一精品区|久久久WWW影院人成|mmmwww在线看片免费|日本在线资源|亚洲精品综合久久|毛片中文字幕 | 日韩亚洲欧美中文字幕|国产精品久久久久久亚洲调教|5060网永久免费=a级毛片|人妻少妇久久久久久97人妻|国产成人无码=a区视频在线观看|欧美理论视频 | 91精品一区二区三区在线|情侣偷拍在线一区|天堂网在线.www天堂|成人=a毛片免费全部播放|日本国产一区二区|美女被日在线观看 | #NAME?|欧美成人免费网站|亚洲成人天堂|日本一级视频在线观看|VR欧美乱强伦XXXXX|国产国语对白露脸正在播放 | 台湾久久网|99久久精品免费看国产四区|亚洲一区二区三区在线视频观看|一区二区三区四区在线免费视频|红桃视频二区|国产久艹视频 | 亚洲春色综合另类网蜜桃|日韩特一级|深夜福利国产精品|欧美黑人大战白嫩在线|久久久精品2019免费观看|#NAME? 日日婷婷夜日日天干|精品一区二区观看|亚洲热热色|一区二区欧美国产|自拍一二区|毛片无限看 | 国产成人=a=a在线视频|欧美三级不卡在线观线看|误杀2免费观看|freesex欧美喷水|日本国产在线|成人一二区 | 国产高跟丝袜脚交视频|最短的距离是圆的高清在线观看|一区二区三区视频播放|国产精品黄页在线播放免费|#NAME?|精品国产乱码久久久久久中文 | 广东少妇大战黑人34厘米视频|日韩午夜在线|国产=aⅴ激情无码久久久无码|精品人妻无码一区二区三区色欲|日本阿v天堂|亚洲视频在线播放 | 999精品视频一区二区三区|内射一区二区精品视频在线观看|成人无码区免费=a∨|狠狠操五月天|久久亚洲一区二区三区成人国产|日韩欧无码一区二区三区免费不卡 | 影音先锋=aV成人资源站在线播放|中文字幕国产在线天堂|国产极品视频在线观看|亚洲毛片儿|人人性人人性碰国产|成人午夜精品久久久久久久蜜臀 | 女同互慰高潮呻吟免费播放|精品视频在线99|国产美女视频免费的|国产另类ts人妖高潮|欧美黄色片免费观看|一起操视频在线观看 | 精品日韩=av一区二区|一区二区三区毛片免费|免费妈妈的朋友|中文字幕日本一道|午夜精品久久久久久毛片|欧美一区二区三区免费在线观看 | 亚洲欧美日韩精品综久久久久久|99热这里只有精品99|国产成人综合精品|无码人妻一区二区三区免费N鬼逝|无码人妻=aⅤ一区二区三区麻豆|69xx×在线观看 | 8050午夜一级毛片|欧洲熟妇精品视频|亚洲在线视频网站|天天久久精品视频|亚洲综合在线网址|麻豆极品JK丝袜自慰喷水久久 | 午夜福利免费院|久草成色在线|一区二区国产高清视频在线|哪里有免费的黄色网址|亚洲久久在线观看|人妻中文无码就熟专区 | 永久免费的啪啪网站免费观看浪潮|#NAME?|被按摩的人妻中文字幕|国产资源在线看|人人看人人射|免费看又黄又爽又猛的视频软件 | 日本三级韩国三级欧美三级|日韩黄色大片免费看|美国黄色小视频|久久精品国产亚洲=aV麻豆~|中文字幕人成人|一级在线免费 |