马克华菲青龙老贼的微信教程公众微信号是多少

青龙老贼:《微信公众平台入门到精通》Vol.17 - 重要坊
');/*]]>*/
你的位置: >
> 查看文章
超过 23,521 人围观
跳票好久了,今天总算更新一章,把通讯录这个案例完结掉,之前几章有不少朋友反映写的过于详细了,大家可能更多的是需要一些思路和方法,所以我这次是将通讯录完整代码提供下载,回复“微信代码”可以下载完整代码包,建议先下载安装了再看文章,以下是注意事项:1、数据库结构有改动,大家可以将原来的数据库删除后重新创建,创建方法请查看,新数据库创建代码在weixincourse.txt里。2、与微信接口文件为wx_interface.php,大家可以将里面源代码复制粘贴到自己的接口文件里覆盖掉。3、其他的文件全部上传到SAE的代码编辑里,有同名文件可以先删除原来文件再上传。4、文件说明:base-class.php
自定义函数,无需改动class_add.php
添加部门,无需改动class_manager.php 部门管理,无需改动roster_add.php
添加员工,需要改动118行的Storage空间名称roster_manager.php 员工管理detail.php 前端查看员工详情,无需改动list.php 前端查看部门列表,无需改动wx_tpl.php 回复消息的模板,无需改动wx_interface.php 微信接口文件,根据自己实际修改名称5、后台文件没有加样式文件,所以看起来会很简陋,我主要是讲开发方法,CSS虽然我也很强,但是不在教程范畴里,有想学的可以自己找些网页模板。6、程序没有进行优化,其实很多都可以用过程来写,但是为了让大家更好理解,就不厌其烦的写下吧……昨天有不少朋友在问如何测试不知道如何绑定账号,具体步骤是先在后台添加一个员工,然后在微信公众账号里根据提示将添加的员工信息输入完成绑定,如图添加一个员工:第十四章
公司通讯录开发四、公司通讯录开发首先回答有些朋友的疑问为什么要做通讯录案例?这个案例貌似没有什么价值,确实从现实使用来看这个案例真没啥价值,但我是希望通过这个案例教大家学会数据库的使用、后台的开发、微信账号绑定、微信搜索、记录翻页等一些基本方法,然后可以结合自己的实际需求来做开发。上传员工照片在添加员工文件(roster_add.php)中有一个图片上传功能,图片上传在表单里是使用input控件的file属性,如下图:当提交表单后,程序会收到一个名称为roster_pic的文件变量,文件变量获取是用$_FILES,而不是$_GET或$_POST,如下图:第97行是监测是否有选择文件,$_FILES[‘roster_pic’][‘name’]是上传文件的原始文件名。第103到105行获取上传文件名的后缀第107到111行监测后缀是否合法。第118行是保存图片到Storage里并返回上传后的图片实际路径赋值给$old_roster_pic。注意:1、上传文件的数据会保存成一个临时文件,web是不能直接访问用户电脑文件的,所以我们读取的源文件是$_FILES[‘roster_pic’][‘tmp_name’] 。2、由于我将添加和修改是放在同一个文件里,$old_roster_pic在表单内是用来存放修改状态下旧图片文件名称的,当表单提交后如果没有上传图片并且$old_roster_pic为空(即不在修改状态)则会提示上传图片,如果上传了图片则更新$old_roster_pic这个变量,最后写入数据库时使用的都是$old_roster_pic的值。后台的程序基本就是这些,大家可以结合《微信入门到精通》Vol.15来理解,如果有不明白的可以后台咨询。下面主要讲前台与微信通讯的程序,都在wx_interface.php里。微信账号绑定微信用户的账号如何与自己网站的用户系统打通,这个是很多人关心的问题,其实很简单,我们都知道微信用户在关注公众号或者发送消息时都会有一个唯一的OPENID传过来,这个OPENID就是这个用户对应这个公众账号的唯一身份标示,我们只要将这个OPENID与自己网站的用户系统一一绑定就可以了。方法有两种,一是将OPENID作为登陆页面或者注册页面的URL参数,当用户点击这个URL时跳转到WAP页面(即自己网站)上进行绑定,另外就是在对话框里进行绑定,我今天介绍的就是在对话框里进行绑定。首先是检测用户是否绑定了微信号,这里我写了个函数,如下图:第593行是定义函数的名字为check_user,函数传入的变量为$fromUsername,即微信用户的OPENID。第598行是通过传入的OPENID为条件,检测在员工数据表中是否存在某条记录的roster_openid等于该OPENID。第600到609行是返回函数运行的记过,如果有记录的话返回该条数据,如果没有就返回失败。在用户关注公众账号时我就判断是否有绑定过账号,并且根据绑定情况回复不同的欢迎词,如下图:当检测到用户关注的事件,调用check_user这个函数,如果返回不是失败则提示使用帮助,否则提示绑定账号,效果如图:当用户输入BD字符时进入账号绑定模式,如下图:先判断用户是否已经绑定过,绑定过给提醒中断执行。否则进入绑定流程,由于绑定操作需要分多个步骤验证多个条件,然后一并查询数据库,因此我们要保存每一步的动作和数据,这里使用memcache来保存每个用户的上一步操作。这里先保存了BD_0标示这是绑定的第一个步骤,提示用户信息为“请输入你的姓名”。memcache服务的开启请查看《微信公众入门到精通》Vol.13,在程序里使用方法为在代码最开头启动memcache,如下图: 保存memcache的方法为:$mc-&set(缓存变量名, 保存的数据, 0, 缓存时间单位秒);读取memcache的方法为:$mc-&get(缓存变量名);我在程序的开头加了获取memcache值的代码,每次用户请求时都会从memcache中获取用户上一步的操作和数据。其中$fromUsername.”_do”为用户操作,$fromUsername.”_data”为用户数据,用$fromUsername可以保证每个用户都有独立的缓存变量名。接下来等用户输入姓名后,接口会收到新的请求,这个时候由于memcache保存过上步标示,因此这里会根据操作缓存的数据判断进入到第二步,$last_do的值是从程序开始就获取memcache值后获取的,如下图:这里多了一个保存数据的缓存设置,保存了用户提交的姓名数据,同时将操作缓存的值改为了BD_1,然后继续提示用户输入工号。当用户输入工号后,会进入第三步,如下图:继续保存数据,将上一步的数据(姓名)与本次数据(工号)合并用“||”分割,同时将操作缓存的值改为了BD_2,然后继续提示用户输入手机号。当用户输入手机号后,就进入最后一步验证,如下图:进入最后一步后先清空操作和数据缓存,然后将之前保存的数据$last_do加上本次用户输入内容合并转换成数组,并用list函数分别赋值给$roster_name,$roster_number,$roster_mp。再进行数据库查询满足用户姓名、工号和手机与输入数据完全相同并且roster_openid(员工openid)为空的记录,如果有符合条件的记录则更新该记录,将$fromUsername(当前操作用户的openid)保存到roster_openid里,完成绑定。这个时候我们输入“help”就会可以进行后续操作了。PS:“输入exit退出操作”这个也很简单,当用户输入exit的时候程序会清空操作和数据缓存,也就是说所有之前的操作和数据都没有了,即所有操作重新开始,如下图:这个流程使用了memcache来保存一些临时变量和多步骤操作,除了用来绑定用户账户外,也适合一些调查问卷或者注册登陆操作。微信搜索搜索其实就是编辑模式下的关键字自动回复,我这里拿姓名搜索举例,首先我们要先切换当前模式到姓名搜索,如下图:这部分代码与账号绑定的第一步是一样的,我们用memcache存放当前的操作,这个时候存放操作动作的缓存变量里就标示了当前是在姓名搜索状态下。同时输出提示,请输入员工姓名。其实这步可以理解为进入网站的二级导航页面,一个网站有首页和各种导航栏目,那么在这个通讯录里帮助就是首页,你输入HELP就到了首页,输入XM就到员工查询这个二级栏目,之后除非你输入BM、GH等一些栏目名,其他的操作都默认是在员工栏目下进行。然后根据提示输入员工名字进行查询,如下图:从数据库中查找与用户输入一致的记录,如果没有则返回提醒:如果查询到则返回一个图文消息,这里没有去考虑员工重名的情况,所以查询和返回结果都是只取一条记录的。前端展现原因我只取工号、姓名、当前状态、照片等字段返回,查看详情点击阅读原文进入到detail页,把该员工的ID号(不是工号)作为URL参数传递过去,然后再做一次数据库查询将所有字段提取出来展现。微信翻页很多人非常好奇ZTalk的公众账号是如何实现文章查询翻页的,其实原理也很简单,只是把网页上的翻页代码稍微改装一下,然后使用memcache保存每个用户当前的页码和搜索的关键字就可以了。在通讯录里是用部门查询来示例的,首先依然是进入部门查询这个栏目,如下图:上面的代码除了保存当前操作状态为部门查询以外,又用另外一个memcache的变量保存当前搜索关键字和页码“null || 1”,其中null为当前搜索关键字(因为一开始用户没有输入所以是空的),1表示起始页是第一页,然后输出提示,请输入部门名称。当用户输入部门名称后,先查询这个部门的ID号,因为在员工表里没有直接存放部门名称而是存放的与部门对应的ID号,如下图:在这里我们获取搜索关键字会有两个来源,一个是用户输入的,一个是在翻页时在缓存中保存的,所以先得尝试从缓存里获取用户之前保存的搜索关键字,如果值为null则表示这是第一次搜索,关键字为用户输入的$from_content,否则就使用缓存中保存的关键字,这就是为什么能够翻页的关键,我们利用缓存机制存放了用户之前输入的搜索关键字。有了搜索关键字然后查询部门表获取部门ID号,获取到后再去查询员工表里该ID下的员工总数,如果总数为0则表示该部门还没有员工直接提示。否则进入到翻页计算和结果返回,如下图:第一个是设置每页显示的条数,我这里是设置成3条,加上封面消息和尾部翻页提示消息最后显示会是5条。当前页码是从缓存中获取,$last_data在前面已经使用explode函数以||为分割字符变成数组,$last_data[0]为搜索关键字,$last_data[1]为页码,根据当前页码计算数据库查询开始的记录指针位置。查询出结果后进行数据转化,这里做了一个数组方便后面循环输入多图文消息,每个图文消息其实就4个元素:标题、描述、图片、链接,先直接用搜索关键字+当前页等做一个封面消息,然后循环将数据库查询结果也转化成图文消息的元素。然后是判断是否有下一页,如下图:用符合搜索条件的记录总数去除以每页显示数量,ceil是一个向上舍入为最接近的整数的函数,就是ceil(5/4)=2,而不是1.25,这样就知道总页数了,然后判断当前页是否最后一页,如果不是最后一页则将当前页加1然后存放到memcache里,在下次翻页查询时保存数据的这个memcache变量里其实已经变成“搜索关键字||2”。最后就是输出多图文消息了,如下图:在微信里显示的效果如下:可能还有很多人很迷茫,如何输入任何字符查看下一页的呢?我画个流程图可能会比较清楚,看下图:大家可以看到其实从第二页开始用户输入的字符只是触发程序运行,而不能干涉程序运行的结果,除非输入EXIT,或者HELP这些一级栏目关键字。关于通讯录就讲到这里了,响应朋友们的建议多讲些设计理念,希望大家能够触类旁通,和自己业务相结合。后面还有两个教程也打算用这个方法来做了,会提供完整代码,讲一些要点,就是间隔时间会比较久因为要码代码……请进QQ群或者直接点右边网盘链接下载:
密码: vk6n
如果你觉得这篇文章对你有帮助,请支持我继续更新网站,看看广告也可以哦 !
关于本文所属分类:本文标签:, , , , 本文地址:文章小编:流行热度:超过 23,521 人围观量产日期:
上午10:21站长声明:本站部分内容撷取自互联网网友的智慧言辞,仅出于传递信息分享的目的,不代表元分享官方声音。通过邮件(intel.)与我们就文章内容交流、声明或删除侵权。除特别标注, 本站所有文章均为原创或再组织, 互联分享, 尊重版权, 转载请注明.上一篇:下一篇:
相关文章感恩支持 各种回音
热门围观最新文章最新评论青龙老贼:《微信公众平台入门到精通》Vol.9 - 重要坊
');/*]]>*/
你的位置: >
> 查看文章
超过 21,700 人围观
有一些朋友在问开发模式是否可以群发消息或者点对点下发消息,这个是不行的,群发消息、人工回复消息还是得去,除非你开外挂模拟登陆公众后台操作,当然这个肯定是违规的,会被封号。另外大家在进入开发模式前还是要提醒下,由于现在接口开放的还不多,图片回复、视频回复接口都没有,也就是用户回复关键字获取图片或者视频是无法做到的,如果偏的公众账号现在并不推荐使用开发模式。第九章
用微信开发模式做欢迎词今天的重点是如何将微信开发模式和SAE对接,希望朋友们已经完成了SAE注册,如果还没搞定的话请抓紧,有问题的话请及时提出,接下来的都在那上面进行。在教程开始前建议朋友们可以先注册一个新的公众账号,或者用非主账号当做开发测试账号,因为开发调试过称中可能会经常出现账号无法正常回复用户的情况,影响正常使用,所以在学习期间以及后期开发过程中最好有一个测试公众账号,等开发完成了再切换到主账号上,也是非常方便的。一、微信公众平台与SAE对接通讯我们先回到微信公众平台上来,点击高级功能进入,选择开发模式进入开发模式的页面,使用开发模式前记得先把编辑模式关闭,如下图:先不着急点开关,点了也没用,会提示必须先成为开发者,但第一步也不是点击“成为开发者”按钮,而是点击查看文档按钮,我们要去下载一个文件,进入开发指南页面后点击左侧菜单的“消息接口指南”,如下图:然后在右边打开的页面导航里点击“示例代码”,如下图:页面直接会跳到最底部,当然直接拉到页面最下也可以,可以看到示例代码下载,如图:点击下载后会得到一个“wx_sample.php”的文件,这个就是微信接口的SDK文件,首先我们将该文件改个名字,比如“wx_interface.php”,这里强调下文件的注意事项:1、后缀必须是.php;2、名字不能用中文,尽量是全小写字母,或者字母+下划线+字母组成;3、名字要便于记忆;4、不要把名字设成“index.php”、“weixin.php”、“admin.php”这些。让大家改名的原因是为了安全,因为这是一个和微信公众平台通讯的接口文件,原则上要隐蔽,以免被人恶意攻击。改完名字后打开SAE,进入到咱们的应用,点击编辑代码进入编辑后台,把文件上传到SAE里,如下图:双击上传的文件,进入该文件的编辑模式,可以看到密密麻麻的一片代码,朋友们不要被吓到,咱们一步步来,首先修改第7行的通讯秘钥,如图:那些斜杠和星号的是注释,可以看到第6行的注释英文是“define your token”,也就是说第7行的代码功能是定义微信公众平台与SAE应用通讯时约定的一个秘钥。这里解释下define(“TOKEN”, “weixin”)这段代码:define是用来给常量赋值的函数,这句话的意思是赋予“TOKEN”这个常量值为“weixin”。PS:常量和变量,是每一种编程语言中都存在的,常量值被定义后,在脚本的其他任何地方都不能被改变。一个常量的名称可以由英文字母、下划线、和数字组成,但数字不能作为首字母出现。变量被定义后随时可以重新赋值,其命名规则与常量一样,区别是变量最前面还要加“$”符号,而常量直接使用它的名称就可以了,如代码第67行,就是给变量$token赋值,值为之前定义的常量TOKEN,可以看到变量和常量的赋值方式也是不同的,变量赋值很简单不需要define函数。扯了那么多咱们先把秘钥改了吧,这个秘钥其实有点像设置一个密码,微信公众平台对秘钥设置有要求是3位以上的字母或数字,我这里是测试所以改个“123456”,如图:修改保存后,回到微信公众平台的开发模式,点击“成为开发者”按钮,然后会到“接口配置信息”页面,如下图:输入各位在SAE上的应用地址+反斜杠+改名后的SDK文件,比如我这里输入的是/wx_interface.php要注意的是前面不要忘记加http://,域名就是咱们应用的域名,上传的SDK文件名要写完整,包括.php的后缀名。这里就是填写在SDK文件里设置的秘钥,我这里填写的是“123456”,大家根据自己设置的填写。填写完后点击提交,如果一切顺利就会提示成功并跳转页面到开发者页面,如下图:接口配置信息。这里可以看到咱们设定的那些接口信息都清楚的显示出来,如果接口的地址或者token改变的话点击修改按钮可以重新设置。接口权限表。打钩的就是咱们可以使用的接口权限,关于这些接口的权限介绍可以查看,有些朋友如果已经拿到自定义菜单内测资格的,那么自定义菜单也会有打钩。最重要的一步就是打开开发模式的开关,现在公众账号进入开发模式了!这个时候你会发现你的公众账号无论是关注还是输入都没有提示了,原来编辑模式下设置的东西都不管用了,因为公众账号已经对接到了你的SAE接口,SO,我们开始下一步吧,先来个欢迎词!二、开发模式下的欢迎词先控诉下微信开发模式的设置不合理,接口校验和接口服务用同一个文件,而校验时这个文件必须直接返回echostr参数内容,当接口要启动正式服务时又得修改同个文件……好了这些跟大家无关,抱怨一下而已!前面接口对接成功后,公众账号无法再与用户互动了,那么我们先把订阅欢迎这个功能恢复吧,回到SAE平台上,在编辑平台新建一个文件,我们把它命名为“wx_tpl.php”,这个文件的目的是存放微信输出内容的模板,细心的朋友会发现这就是目前接口可以给用户回复的三种消息格式,分别是文本、图文、音乐。内容如图:然后把前面的那个SDK文件内容全部清空,没错就是全部清空,因为官方那个SDK除了用来做接口校验几乎没有什么用处。然后换上自己的代码,如图:给大家解释下这一大段代码:第3行,include_once是用来加载其他php文件的函数,在这里加载了wx_tpl.php,加载文件是可以设置路径的,由于现在两个文件在同一目录下,因此没有加路径。这样做的好处是有利于代码复用,一些经常用到的类、函数和变量可以放在其他文件统一加载,让代码简洁轻便。第6行,接收微信公众平台发送过来的用户消息,该消息数据结构为XML,不是php默认的识别数据类型,因此这里用了$GLOBALS[‘HTTP_RAW_POST_DATA’]来接收,同时赋值给了$postStr,这里强调一个php的铁律就是php对大小写是敏感的,也就是变量也好函数也好,大小写不同是表示不同的变量或者函数,即$Q1和$q1是两个不同的变量,大家在写代码时千万注意。第9行,一个条件语句,empty是判断变量是否为空的函数,如果是空返回0否则返回1,感叹号在这里是运算符表示非(not的意思),非0就是1,非1就是0,可能有点绕,意思就是如果$postStr不为空(接收到了数据)就继续执行下面的语句,如果为空就跳转到39行执行(这里就执行了两句代码,第一句是输出空字符串,第二句是退出)。PS:1、php的逻辑运算符有“&&”表示与(并且的意思),“||”标示或(或者的意思)“!”表示非(不是的意思),记住并且理解这些符号对后面写代码很有好处……2、所有的编程语言都有if…else..语句,php的规则是if(条件){执行语句}else{执行语句},这里else可以没有,或者可以多重判定,if(条件1){执行语句}elseif(条件2){执行语句}else{执行语句}。判断条件用“()”包含,执行语句用“{}”包含,相邻最近的一对括号标示一段脚本,大家在编写的时候不要漏掉后面的半个括号。我在这段代码里括号标示的比较清楚,大家可以仔细参照一下。第12行,使用simplexml_load_string() 函数将接收到的XML消息数据载入对象$postObj中。这个严谨的写法后面还得加个判断是否载入成功的条件语句,不过不写也没事。第14行,将对象$postObj中的发送消息用户的OPENID赋值给$fromUsername变量,这里的“-&”是指针,大家了解下就行了。第16行,将对象$postObj中的公众账号的ID赋值给$toUsername变量。第18行,将对象$postObj中的消息类型赋值给$form_MsgType变量。第21行,判断消息是否为事件消息,现在微信公众账号的用户关注和取消订阅都是通过事件消息发送,因此咱们要欢迎用户关注首先得判断来接收的消息类型是否为事件。这里要强调的是在php里一个“=”用来赋值,“==”用来比较是否相等,大家千万注意在判断语句时如果少写一个“=”号这个判断会永远成立。第24行,如果接收到的消息是事件消息,判断事件类型是否为订阅,在事件消息里“subscribe”表示订阅,“unsubscribe”表示取消订阅。第29到32行,完成的是欢迎词回复的输出:第29行是设定回复消息类型为文本;第30行是设定回复消息的内容,其中可以使用表情符号的文本方式,换行使用“\n”,这里要注意的是字符串里如果要使用双引号或者单引号一般用中文符号,如果一定要用英文符号,要在引号前面加反斜杠比如“echo “\””;”输出的是一个双引号;第31行,使用sprintf这个函数将格式化的数据写入到变量中去,其中“$textTpl”这个就是我们在wx_tpl.php里定义过的文本消息模板变量,后面的“$fromUsername, $toUsername, time(), $msgType, $contentStr”分别顺序替换模板里“%s”位置,也即是“$resultStr”这个变量最后实际为:&xml& &ToUserName&&![CDATA[$fromUsername]]&&/ToUserName& &FromUserName&&![CDATA[$toUsername,]]&&/FromUserName& &CreateTime&time()&/CreateTime& &MsgType&&![CDATA[$msgType]]&&/MsgType& &Content&&![CDATA[$contentStr]]&&/Content& &FuncFlag&0&/FuncFlag& &/xml&PS:time()是php里的时间函数,返回当前时间的 Unix 时间戳(格林威治时间 1970 年 1 月 1 日 00:00:00)到当前时间的秒数。第32行就是把回复消息输出。第33行是退出整个程序,在php里exit可以放置在任何地方,当程序运行到这里就直接退出,否则还将继续运行,即使已经有结果输出在页面。好了大家可以自己试着玩玩,不想敲字的朋友可以直接下载,地址是:,下载后解压里面两个文件都有,请用记事本或者其他文本编辑器打开,复制内容到SAE上,请尽量不要使用文件上传,主要是怕大家编辑器保存文件时没存成UTF-8,会出错。《微信公众平台入门到精通》Vol9视频版请进QQ群或者直接点右边网盘链接下载:
密码: vk6n
如果你觉得这篇文章对你有帮助,请支持我继续更新网站,看看广告也可以哦 !
关于本文所属分类:本文标签:, , , , 本文地址:文章小编:流行热度:超过 21,700 人围观量产日期:
上午9:44站长声明:本站部分内容撷取自互联网网友的智慧言辞,仅出于传递信息分享的目的,不代表元分享官方声音。通过邮件(intel.)与我们就文章内容交流、声明或删除侵权。除特别标注, 本站所有文章均为原创或再组织, 互联分享, 尊重版权, 转载请注明.上一篇:下一篇:
相关文章感恩支持 各种回音
热门围观最新文章最新评论微信名称:马克华菲
&&&微信号:yzfj8888
所属分类:明星类微信公众号
收录时间:
文章数量:0篇
浏览次数:144(人次)
二维码扫描订阅,精品信息推送分享
微信公众号简介
马克华菲!是国际设计大师张肇达为世界都市新贵度身定制的中国原创设计时尚品牌,自2000年诞生以来,深得世界时尚人士青睐.2002年,马克华菲愈显其潮流前瞻性,为年轻时尚族群带来马克华菲Jeans男装,成为马克华...
微信公众号“马克华菲”最近文章
&&暂时还没有收录该微信号的文章青龙老贼:《微信公众平台入门到精通》Vol.12 - 重要坊
');/*]]>*/
你的位置: >
> 查看文章
超过 13,255 人围观
公众账号接收非文字消息在上用户都是用使用文字在进行交互的,但是有时候使用图片、语音、视频以及地理位置等可以实现一些非常棒的功能,比如“语音提醒”公众号里的发送语音就可以实现定时的事件提醒功能;比如ZTalk曾经搞过微信拍照晒电脑桌面的活动(响应的人太少,桑心……);比如一些预定本地化服务的公众号里发送当前地理位置就可以查询周边商家。要实现这些功能首先得学会接收这些消息类型,比文字消息类型肯定要复杂很多了,目前我们能够接收的消息类型只有图片、地理位置以及退订消息,其他的如链接消息、语音消息是需要官方授权的。接收到用户消息以后回复的消息类型可以参考第11章,目前也就那三种。一、图片消息接收相信拍照是目前智能手机用户用得最多的功能没有之一,在微信里也是一样,看看每天朋友圈里分享的那些照片就知道了,那么如何接收和保存用户照片捏,首先我们得了解用户发送的图片消息结构,如下图:大家可以看到图片消息除了固定的消息发送用户ID、接收公众号ID、生成时间等固定字段外,多了一个图片链接PicUrl,这个就是用户向公众账号发送图片后,保存到微信的服务器上返回给公众号的链接,该图片链接格式如下:也就是说我们如果要把图片保存到本地服务器,就要先将图片从微信服务器上抓取下来,当然你也可以直接保存这个链接以后直接访问,这个看具体应用了。今天要讲的是图片保存到本地服务器上,请看下面代码:由于图片消息是另一种消息类型,因此代码添加位置可以位于文字消息上面或者下面,只要别在文字消息的判断语句内就行。然后我来解释下每个语句的作用:第20行,判断消息类型是否为图片消息,条件为$form_MsgType==第24行,获取图片消息数据中的图片链接并赋值给$from_PicU第26行,生成要保存到本地服务器的图片名称,为了避免重复新图片命名使用了发送用户的OPENID+当前时间戳,文件的后缀名我是直接设定为jpg文件。(由于从图片链接上无法获取到图片后缀名,又懒得通过头文件获取图片格式,就直接固定死了JPG格式,貌似没有什么问题,哈哈哈);第28行,SAE上的内置接口类很多,SaeFetchurl是一个用来抓取远程网页的类,使用这个类就可以很方便的实现抓取其他网站的内容,否则使用PHP的curl或者file_get_contents这些估计还得解释半天,这句代码是新建一个抓取类的对象。第30行,执行抓取图片链接,其中抓取的函数是fetch(),图片链接是之前赋值的$from_PicUrl,抓取后的结果赋值给$第32行,判断抓取结果,errno()返回的是抓取结束后的错误代码,如果为0则成功,其他的就是不成功。第35行,图片抓取成功后,新建一个Storage的对象,我们要保存图片了。第37行,这句代码其实已经在以前出现多次,这次将抓取的内容($res)写入指定的文件($filename),并保存到Storage里,请注意把“weixincourse”替换成自己创建的Storage空间名。第39行到41行,保存成功后给用户提示图片上传成功。第45行到48行,文件没有抓取到提示用户图片上传失败。当然我们如果严谨一点,还要判断图片文件是否保存成功,可以把第37行后面改写一下,如下图:大家可以尝试把Storage的空间名字故意写错,看看会有什么样的提示。如果提示上传成功,我们到SAE的Storage列表里就应该可以看到刚上传的文件了。二、地理位置消息接收手机上基于地理位置的APP很多,是个应用现在都得跟LBS扯上点关系,SoLoMo里重要的一环就是地理位置,微信里也有很多应用是跟地理位置相关的,比如查个本地天气、附近酒店餐馆啥的。今天举的例子是查本地天气。先了解下地理位置消息的结构,如下图:地理位置消息多了四项,分别是经纬度的X和Y坐标、地图缩放比例以及地址信息,而实际上由于网络原因我们经常是收不到地址信息的,只有坐标信息,因此地理位置的开发基本围绕着坐标来。先来看本地天气查询代码吧,如下图:代码添加位置同图片消息,另起一个消息类型判断语句,可以放在图片消息前面或者后面。前面说了我们主要使用的是经纬度,经纬度是可以通过一些地图api接口来获取实际地址、周边商家等信息的,天气代码这里我用的是百度地图API接口,主要是因为它有URL接口,代码解释开始:第21行,消息类型判断语句,消息类型为location;第24行到27行,将用户推送地理消息的经纬度、地图比例、地址信息分别赋值。经纬度分别为Location_X和Location_Y,相当于用经线和纬线的交叉点来标注地理位置。Scale是用户发送地理位置时地图的缩放比例。Label是地址信息(经常是获取不到的,获取了也没啥用,因为都是连在一起的,无法提取地市县信息)。第29行,定义百度地图API接口的反向地址解析URL,反向地址解析是指通过经纬度获取当前位置的地址信息。第31行,由于各家地图不一样因此传输过来的经纬度也会有所偏差,这里我选的是wgs84即手机GPS的坐标。第33行,又要抓页面了,先建个抓取类的对象。第35行,百度地图API接口的反向地址解析规则是URL+坐标类型+坐标值,其中$map_api_url.$map_coord_type两个变量拼接就是URL+坐标类型,然后再加上经纬度参数,用location=经度,纬度来赋值。这里说下URL的规则,URL就是大家常看到的网页链接,一般由HTTP://后面加网址加参数组成,主要说下参数,参数一般是“参数名=赋值”组成,普通的URL参数格式是跟在网址后面第一个参数前用“?”号分隔,第二个参数开始用“&”分隔,参数在程序里是可以获取到的,我们上面获取坐标解析的实际地址形式为:接收的实际地址为http://api./geocoder,获取到的参数是coord_type和location,值为相应后面跟着的。第37行,判断是否抓取成功,如果抓取成功$geocoder的数据实际是如下格式:这里一大堆信息里只需要提取城市,即CITY这个标签内的数据。第40行,这是一个正则表达式,比较复杂,作用就是根据规则将$geocoder里的&city&北京市&/city&数据提取出来赋予$city这个变量,如果成功这个数据是会是一个多维数组,其中city标签内的数据即北京市是存储在$city[1][0]里的,$city[0][0]的值是“&city&北京市&/city&”;第41行,将$city[1][0]的值即“北京市”提取出来,同时使用str_replace函数将“市”替换掉再重新赋值给$city,str_replace按照字面意思就是字符串替换,用法是:str_replace(要替换的内容,替换成的内容,字符串);其中替换的内容和替换成的内容可以使用数组,也可以使用单个字符串,我这里是用了数组,即将市县区都替换成了空,替换的用处是因为后面查天气预报的接口只支持城市名称,不能有市县区啥的……经过这一步$city的值就是“北京”;第43行,定义天气API接口的URL;第45行,做了三件事,第一个使用iconv()函数将$city的字符编码从UTF-8转换成GBK,第二件是使用urlencode将汉字转换成英文编码方便URL传值,第三件是将URL中的“&city=”的参数名拼接了。关于字符,有时候我们上网的时候会发现网页有乱码,大部分是因为字符编码不对造成的,可以调节浏览器的编码来切换,在程序里也是一样,由于新浪接口接收的字符串是GBK的,而我们程序里使用UTF-8,所以需要转码后才能通讯,否则新浪接口收到的就是乱码。PS:GBK或者GB2312是中文简体编码,属于ANSI编码,但是同个ANSI编码值在不同国家的编码对应是不同的文字,会非常混乱,所以有了Unicode以及UTF-8,这是国际通用的文字编码格式,所有文字都被分配了不同的编码,也就不怕乱码了。第46行,查询天气日期,0表示当天,1表示明天,以此类推……第49行,抓取天气内容并赋值给$weather,这里不需要再建立抓取类的对象了,因为之前已经建立了可以直接用。第51行,判断是否抓到天气,这里我多加了一个strstr函数是用来检查$weather里是否存在“Weather”这个字符串,&&表示并且,这里的判断就是不仅要抓取成功并且在抓取到的内容里存在“Weather”。这样写的目的是因为新浪天气接口不管有没有查询到天气都会返回数据,而判断数据里是否有天气信息,只有判断返回内容里有木有“Weather”这个字符串。成功抓取到的会是如下内容:这又是一个XML,然后用的是一些拼音首字母做了标签,把这个回复给用户估计会疯的,我们要进行一些整理,方法嘛就是用正则表达式来提取我们需要的内容,我这里提取的标签是city(城市)、status2-status1(天气变化)、temperature2-temperature1(温度变化)、direction2-power2(风向风力)、chy_shuoming(穿着建议)、savedate_weather(信息发布时间)第54行到62行就是提取这些数据的正则表达式,可以发现其实改动的只是标签名和赋值的参数,如果大家还想加写数据的可以参照着提取;第64行到71行判断天气变化是否相同,比如上面显示的天气1和天气2其实都是阴,如果不做判断就会返回给用户“阴转阴”,非常2,所以这里判断如果两个天气是一致的则将任意一个天气赋值给$w_status变量,否则就按照天气2转天气1赋值给$w_status变量,最后输出时用$w_status这个变量。第73行到81行新建一个数组,将前面获取到的天气数据添加为数组元素,格式就是$weather_res=array();然后在括号里用逗号分割每个天气数据,最后一个后面不要加逗号,这样做的好处是避免代码行过长,而且很清晰。第82行,将数组用implode()函数转化成数组,用”\n”这个换行符来分割。其实73到82行完成的就是将所有数据拼接成一个字符串,使用“.”一个个拼也可以,不过效率低下而且代码也不够清晰。全部拼接完成就可以输出了,在手机上效果如下:后面的就不详细说了,都有标注,都是些判断提示语句,大家可以自己学着看,不懂的可以直接在后台问。另外强调一点,一般天气预报是拿中国天气网接口做的会比这个更好,能够显示县区级的天气,但是需要搞个城市代码表,留到以后说吧,新浪的接口可以直接用城市名查就先演示下。三、退订消息接收不知道还有多少人记得我曾写过一篇《那些离开的朋友们》,是因为微信把退订消息接口开了,每天看到不少人退订心里有点小难过写的,到今天我看了下差不多有2000个退订用户了,估计是我现在写的东西不合他们胃口。退订消息接口的代码很简单,跟用户订阅一样是一个事件类型的消息,只是事件类型的标示是”unsubscribe“,退订用户最好是配合数据库来记录,我这里给大家的是一个保存成文件的例子,如下图:代码添加的位置请看仔细了,在事件消息判断里的获取事件类型之后。代码很短,解释如下:第300行,判断事件类型标示是否为”unsubscribe“,大家可以看下订阅消息是”subscribe“;第303行,新建一个Storage的对象;第305行,写入文件,文件名为退订用户的OPENID,文件后缀是.txt,内容我用了退订时间。当用户退订后在Storage的存储空间里就会有一个文件生成。微信公众平台开发的基础差不多已经讲完,后面还会讲下数据库和云存储平台的使用,然后就会是完整案例,之所以花那么长时间讲那么细,是希望大家能够先熟悉一些基础的编程,有一个循序渐进的过程,所有复杂的程序其实都是这些基础模块组成,如果你觉得看不懂,那可能是没有跟着动手做,后面的教程估计会跟不上,so,有时间就动动手吧!anyway,我会把教程坚持写完,因为很多人有期待。请进QQ群或者直接点右边网盘链接下载:
密码: vk6n
如果你觉得这篇文章对你有帮助,请支持我继续更新网站,看看广告也可以哦 !
关于本文所属分类:本文标签:, , , , 本文地址:文章小编:流行热度:超过 13,255 人围观量产日期:
下午7:29站长声明:本站部分内容撷取自互联网网友的智慧言辞,仅出于传递信息分享的目的,不代表元分享官方声音。通过邮件(intel.)与我们就文章内容交流、声明或删除侵权。除特别标注, 本站所有文章均为原创或再组织, 互联分享, 尊重版权, 转载请注明.上一篇:下一篇:
相关文章感恩支持 各种回音
热门围观最新文章最新评论}

我要回帖

更多关于 微信公众号 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信