民众账号接收非文字消息必发bifa88手机客服端

群众账号接收非文字音信

 原文:http://www.cnblogs.com/imaker/p/6249987.html

在微信公众平台上用户都是用利用文字在展开互动的,不过有时使用图片、语音、录制以及地理地方等能够兑现部分老大棒的功力,比如“语音提醒”公众号里的发送语音就足以兑现定时的事件提示功效;比如ZTalk曾经搞过微信拍照晒电脑桌面包车型客车位移(响应的人太少,桑心……);比如一些预订本地化服务的群众号里发送当前地理地方就足以查询周边店铺。

 

要贯彻那一个职能首先得学会接受那个音讯类型,比文字新闻类型肯定要复杂很多了,近来大家能够接收的音信类型唯有图片、地理地方以及退订新闻,其余的如链接新闻、语新闻息是亟需合法授权的。接收到用户音讯随后复苏的音讯类型能够参考第叁1章,近日也就那二种。

 

一 、图片新闻接收

 

深信不疑拍照是近期智能手提式无线话机用户用得最多的功用尚未之一,在微信里也是均等,看看每一天朋友圈里分享的那一个照片就驾驭了,那么如何选取和封存用户照片捏,首先我们得询问用户发送的图纸音讯结构,如下图:

必发bifa88手机客服端 1

 

世家能够看到图片信息除了定位的信息发送用户ID、接收群众号ID、生成时间等定位字段外,多了贰个图纸链接PicUrl,那几个就是用户向民众账号发送图片后,保存到微信的服务器上回来给斯巴鲁号的链接,该图片链接格式如下:

必发bifa88手机客服端 2

也等于说大家如若要把图纸保存到地面服务器,就要先将图纸从微信服务器上抓取下来,当然你也足以平昔保存那个链接现在直接待上访问,那些看现实应用了。前几日要讲的是图片保存到地点服务器上,请看上面代码:

必发bifa88手机客服端 3

 

由于图片音信是另一种音信类型,因而代码添加地点能够放在文字消息下边或然上边,只要别在文字音讯的判断语句内就行。然后小编来诠释下各类语句的职能:

 

第①0行,判断新闻类型是还是不是为图片新闻,条件为$form_MsgType==image;

 

第三4行,获取图片音信数据中的图片链接并赋值给$from_PicUrl;

 

第36行,生成要保存到当地服务器的图片名称,为了制止双重新图片命名使用了发送用户的OPENID+当明日子戳,文件的后缀名笔者是平素设定为jpg文件。(由于从图片链接上不能赢获得图片后缀名,又懒得通过头文件获取图片格式,就一向定位死了JPG格式,貌似没有怎么难题,哈哈哈);

 

第①8行,SAE上的放到接口类很多,SaeFetchurl是二个用来抓取远程网页的类,使用这些类就足以很方便的贯彻抓取别的网站的剧情,不然使用PHP的curl或然file_get_contents那些测度还得解释半天,那句代码是新建三个抓取类的对象。

 

第10行,执行抓取图片链接,当中抓取的函数是fetch(),图片链接是事先赋值的$from_PicUrl,抓取后的结果赋值给$res;

 

第12行,判断抓取结果,errno()再次来到的是抓取结束后的错误代码,若是为0则成功,别的的正是不成功。

 

第二5行,图片抓取成功后,新建1个Storage的靶子,大家要保存图片了。

 

第三7行,那句代码其实早已在原先出现数次,本次将抓取的始末($res)写入内定的公文($filename),并保存到Storage里,请留心把“weixincourse”替换到自身制造的Storage空间名

 

第三9行到41行,保存成功后给用户提醒图片上传成功。

 

第肆5行到48行,文件并未抓取到晋升用户图片上传退步。

 

当然大家假如严苛一点,还要判断图片文件是还是不是保存成功,能够把第贰7行前面改写一下,如下图:

必发bifa88手机客服端 4

世家能够尝试把Storage的上空名字故意写错,看看会有啥的提示。虽然提醒上传成功,我们到SAE的Storage列表里就活该能够看出刚上传的文书了。

 

必发bifa88手机客服端 5

 

二 、地理位置消息接收

 

手机上依照地理地点的APP很多,是个使用现在都得跟LBS扯上点关系,SoLoMo里主要的一环正是地理地点,微信里也有无数利用是跟地理位置相关的,比如查个地点天气、附近酒馆饭店啥的。后天举的例子是查本地天气。先精通下地理地方音讯的布局,如下图:

 

必发bifa88手机客服端 6

地理地方音讯多了四项,分别是经纬度的X和Y坐标、地图缩放比例以及地点消息,而其实由于互连网原因大家平常是收不到地址新闻的,唯有坐标音信,因而地理地方的付出中央围绕着坐标来。先来看本地气候查询代码吧,如下图:

 

必发bifa88手机客服端 7

代码添加地点同图片音讯,另起二个音讯类型判断语句,能够放在图片新闻前边可能后边。前边说了大家主要使用的是经纬度,经纬度是足以由此一些地图api接口来得到实际地址、周边企业等新闻的,天气代码那里我用的是百度地图API接口,主假若因为它有URAV4L接口,代码解释起来:

 

第叁1行,新闻类型判断语句,消息类型为location;

 

第壹4行到27行,将用户推送地理消息的经纬度、地图比例、地址消息分别赋值。经纬度分别为Location_X和Location_Y,相当于用经线和纬线的交叉点来标注地理地方。Scale是用户发送地理地方时地图的缩放比例。Label是地点消息(常常是获得不到的,获取了也没啥用,因为都以连在一起的,不能领取地市县新闻)。

 

第③9行,定义百度地图API接口的反向地址解析U奇骏L,反向地址解析是指通过经纬度获取当前职分的地方消息。

 

第二1行,由于各家地图不等同因而传输过来的经纬度也会怀有偏差,那里本身选的是wgs84即手提式有线电话机GPS的坐标。

 

第③3行,又要抓页面了,先建个抓取类的对象。

 

第15行,百度地图API接口的反向地址解析规则是U中华VL+坐标类型+坐标值,个中$map_api_url.$map_coord_type八个变量拼接就是U奇骏L+坐标类型,然后再加上经纬度参数,用location=经度,纬度来赋值。

 

那边说下U奥迪Q5L的条条框框,UPRADOL正是我们常看到的网页链接,一般由HTTP://前面加网址加参数组成,重要说下参数,参数一般是“参数名=赋值”组成,普通的U福特ExplorerL参数格式是跟在网址前边第一个参数前用“?”号分隔,第②个参数伊始用“&”分隔,参数在先后里是足以收获到的,大家地点获得坐标解析的实际上地址格局为:

必发bifa88手机客服端 8

 

收到的其实地址为http://api.map.baidu.com/geocoder,获取到的参数是coord\_type和location,值为相应后面跟着的。

 

第27行,判断是还是不是抓取成功,要是抓取成功$geocoder的数量实际上是之类格式:

必发bifa88手机客服端 9

此间一大堆音信里只要求领取城市,即CITY这些标签内的多寡。

 

第60行,那是一个正则表明式,比较复杂,作用正是遵照规则将$geocoder里的<city>北京市</city>数据提取出来予以$city那个变量,借使成功这么些数目是会是3个多维数组,其中city标签内的数量即巴黎市是储存在$city[1][0]里的,$city[0][0]的值是“<city>北京市</city>”;

 

第41行,将$city[1][0]的值即“东方之珠市”提取出来,同时接纳str_replace函数将“市”替换掉再另行赋值给$city,str_replace依照字面意思正是字符串替换,用法是:str_replace(要替换的剧情,替换来的始末,字符串);当中替换的始末和替换到的内容可以接纳数组,也得以运用单个字符串,我那里是用了数组,即将市县区都替换成了空,替换的用途是因为前边查天气预告的接口只协理城市称号,不可能有市县区啥的……经过这一步$city的值就是“东京(Tokyo)”;

 

第四3行,定义天气API接口的U帕杰罗L;

 

第55行,做了三件事,第3个应用iconv()函数将$city的字符编码从UTF-8转换成GBK,第叁件是利用urlencode将汉字转换来英文编码方便UCR-VL传值,第贰件是将U景逸SUVL中的“&city=”的参数名拼接了。

 

关于字符,有时候大家上网的时候会发觉网页有乱码,半数以上是因为字符编码不对促成的,能够调剂浏览器的编码来切换,在程序里也是一样,由于新浪接口接收的字符串是GBK的,而大家先后里应用UTF-8,所以要求转码后才能通信,不然微博接口收到的就是乱码。

 

PS:GBK或然GB2312是普通话简体编码,属于ANSI编码,然而同个ANSI编码值在差异国家的编码对应是见仁见智的文字,会充裕混乱,所以有了Unicode以及UTF-8,那是国际通用的文字编码格式,全部文字都被分配了分歧的编码,也就不怕乱码了。

 

第⑥6行,查询天气日期,0表示当天,1表示今天,以此类推……

 

第六9行,抓取天气内容并赋值给$weather,那里不须要再建立抓取类的指标了,因为在此之前早已确立了能够直接用。

 

第④1行,判断是或不是抓到天气,那里作者多加了一个

 

必发bifa88手机客服端 10

 

strstr函数是用来检查$weather里是还是不是留存“Weather”这几个字符串,&&表示还要,那里的判断正是不仅要抓取成功还要在抓取到的剧情里存在“Weather”。那样写的指标是因为今日头条天气接口不管有没有询问到天气都会重返数据,而判断数据里是或不是有天气新闻,唯有判断重返内容里有木有“Weather”这几个字符串。成功抓取到的会是之类内容:

必发bifa88手机客服端 11

那又是贰个XML,然后用的是某些拼音首字母做了标签,把这些回复给用户估算会疯的,大家要进行部分打点,方法嘛就是用正则表明式来领取我们必要的剧情,作者那里提取的竹签是city(城市)、status2-status1(天气变化)、temperature2-temperature1(温度变化)、direction2-power2(风向风力)、chy_shuoming(穿着提出)、savedate_weather(消息揭露时间)

 

第六4行到62行正是提取这么些数量的正则表明式,能够发现实际改变的只是标签名和赋值的参数,假使咱们还想加写数据的能够参见着领取;

 

第六4行到71行判断天气变化是或不是一致,比如上面呈现的天气1和天气2实际上都是阴,如若不做判定就会回来给用户“阴转阴”,万分2,所以那里判断倘使多少个天气是一样的则将随意二个天气赋值给$w_status变量,不然就依照气象2转天气1赋值给$w_status变量,最终输出时用$w_status这一个变量。

必发bifa88手机客服端, 

第93行到81行新建一个数组,将前方获取到的天气数据增进为数组成分,格式正是$weather_res=array();然后在括号里用逗号分割各个天气数据,最终一个前面不要加逗号,那样做的裨益是幸免代码行过长,而且很清晰。

 

第⑨2行,将数组用implode()函数转化成数组,用”\n”那么些换行符来分割。

 

实质上73到82行成功的正是将全体数据拼接成一个字符串,使用“.”2个个拼也得以,可是效用低下而且代码也不够清晰。

 

全体拼接实现就足以出口了,在手提式有线话机上成效如下:

 

必发bifa88手机客服端 12

 

末尾的就不详细说了,都有标注,都以些判断提示语句,大家能够友善学着看,不懂的能够直接在后台问。其它强调一点,一般天气预先报告是拿中夏族民共和国天气网接口做的会比那个更好,能够展现县区级的天气,可是急需搞个都市代码表,留到今后说呢,博客园的接口能够直接用城市名查就先演示下。

 

三 、退订音信接收

 

不亮堂还有稍稍人记得自身曾写过一篇《那么些离开的心上人们》,是因为微信把退订信息接口开了,每一天看到众多个人退订心里有个别小痛楚写的,到前日本身看了下大半有2000个退订用户了,预计是作者今天写的东西不合他们胃口。

 

退订音讯接口的代码很容易,跟用户订阅一样是多个风云类型的音讯,只是事件类型的标示是”unsubscribe“,退订用户最为是匹配数据库来记录,笔者那里给大家的是3个封存成文件的例子,如下图:

 

必发bifa88手机客服端 13

代码添加的地方请看仔细了,在事件音讯判断里的取得事件类型之后。代码相当短,解释如下:

 

第贰00行,判断事件类型标示是不是为”unsubscribe“,大家能够看下订阅新闻是”subscribe“;

 

第贰03行,新建1个Storage的靶子;

 

第一05行,写入文件,文件名为退订用户的OPENID,文件后缀是.txt,内容本人用了退订时间。

 

当用户退订后在Storage的蕴藏空间里就会有八个文书生成。

 

 

微信公众平台开发的基础教程差不离已经讲完,前边还会讲下数据库和云存款和储蓄平台的行使,然后就会是完好案例,之所以花那么长日子讲那么细,是希望大家能够先熟识一些基础的编制程序,有三个遵纪守法的历程,全数复杂的先后其实都以这几个基础模块组成,借使您觉得看不懂,那可能是从未有过随着出手做,后边的学科推测会跟不上,so,有时光就动入手吧!anyway,小编会把课程锲而不舍写完,因为不少人有愿意。

相关文章