微信公众号教程(8)用微信开发模式做欢迎词

第九章 用微信开发模式做欢迎词

今天的重点是如何将微信开发模式和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”,如图:

修改保存后,回到微信公众平台的开发模式,点击“成为开发者”按钮,然后会到“接口配置信息”页面,如下图:

  1. 输入各位在SAE上的应用地址+反斜杠+改名后的SDK文件,比如我这里输入的是

    http://weixincourse.sinaapp.com/wx_interface.php

    要注意的是前面不要忘记加http://,域名就是咱们应用的域名,上传的SDK文件名要写完整,包括.php的后缀名。

  2. 这里就是填写在SDK文件里设置的秘钥,我这里填写的是“123456”,大家根据自己设置的填写。

填写完后点击提交,如果一切顺利就会提示成功并跳转页面到开发者页面,如下图:

  1. 接口配置信息。这里可以看到咱们设定的那些接口信息都清楚的显示出来,如果接口的地址或者token改变的话点击修改按钮可以重新设置。
  2. 接口权限表。打钩的就是咱们可以使用的接口权限,关于这些接口的权限介绍可以查看《微信公众平台入门到精通Vol.7》,有些朋友如果已经拿到自定义菜单内测资格的,那么自定义菜单也会有打钩。
  3. 最重要的一步就是打开开发模式的开关,现在公众账号进入开发模式了!

这个时候你会发现你的公众账号无论是关注还是输入都没有提示了,原来编辑模式下设置的东西都不管用了,因为公众账号已经对接到了你的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可以放置在任何地方,当程序运行到这里就直接退出,否则还将继续运行,即使已经有结果输出在页面。

时间: 2024-10-27 19:57:28

微信公众号教程(8)用微信开发模式做欢迎词的相关文章

微信公众号教程(10)公众账号自定义回复功能

公众账号自定义回复功能 微信官方其实并不推荐经常群发消息,更多的是希望用户通过对话来自己获取服务或者进行搜索.今天我们就讲下如何使用开发模式做自定义回复. 目前公众账号可以接收的用户提交消息请求有四种类型,分别是文字.图片.地理位置和链接,而公众账号回复只有三种格式,文字.图文和音乐,也就是说用户互动的模式最多也就是12种,我们今天先讲三种即文字回复文字.文字回复图文.文字回复音乐. 这强调一下,微信的消息接口通讯有效时间是5秒,也就是说网络不稳定等原因很容易造成用户在5秒内接收不到回复消息,然

NodeJs 开发微信公众号(四)微信网页授权

微信的网页授权指的是在微信公众号中访问第三方网页时获取用户地理.个人等信息的权限.对于开发了自己的网页app应用时,获取个人的信息非常重要.上篇博客讲到了注册时可以获取用户的信息,很多人会问为什么还需要网页授权这种方式去获取呢,直接从数据库中读取不就可以了吗?这样的做的原因是服务器会话时间终究是有限的,关注后我们设置的会话一般在半个月左右,半个月后就需要重新生成会话,而这时就需要网页授权的openid帮忙了.况且,用户的信息也是会刷新的,虽然这种情况很少发生,但是我们至少应该确保信息是有一定的更

微信公众号教程(1)微信公众账号注册、设置、登陆

原文:http://www.cnblogs.com/imaker/p/6247323.html 从今天开始微信公众平台教程开写,前面部分会比较浅,已经在玩的朋友可以忽略. 第一章 微信公众账号注册.设置.登陆 一.微信公众平台注册   注册前的准备工作,很重要!   1.一个没有注册过公众账号的邮箱,如果是qq邮箱那么对应的qq号也要没有注册过公众账号.顺便提一下,公众账号用gmail邮箱邮箱是注册不了的,只有国内邮箱才能注册成功!   2.身份证扫描件,每个身份证可以注册5个公众账号   3.

NodeJs 开发微信公众号(三)微信事件交互

微信公众号有个规则,一旦开启了开发者模式,其他的常规功能就都必须通过接口调用完成.比如说自定义菜单功能,必须通过发送post请求的方式生成.本章就通过关注到取消关注的整个过程来谈一谈nodejs是怎么样与微信交互的.这些功能的入口就是你在测试公众号里面填写的URL(以下用/login/wechat代替). 事件交互 扫码关注微信公众号后,微信会调用你的接口/login/wechat,并且附带一段xml信息,首先你需要获取一些签名,通过加密.排序比对是否与你填写的TOKEN一致,如果一致则进行xm

微信公众号内H5调用微信支付国内服务商模式

最近在折微信公众号内H5用JSAPI调用微信支付,境内服务商版支付,微信支付给出的官方文档以及SDK不够详细,导至我们走了一些弯路,把他分享出来,我这边主要是用PHP开发,所以未加说的话示例都是PHP代码 微信的官方文档  https://pay.weixin.qq.com/wiki/doc/api/jsapi_sl.php?chapter=7_1 1.服务商模式下调用统一下单 独立商户模式统一下单:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php

微信公众号首图_微信公众号首图尺寸

大部分公众号编辑推文的时候,只会注重首图封面的设计而不管小图封面.如此一来,后面的文章就只能靠标题来吸引人了,而文字能够发挥的作用总是有限的.花了那么多时间排版图文.做首图,总不至于在小图偷懒吧~现在本文就教你如何快速的制作公众号封面小图,作图不再麻烦! 用菲果制作公众号封面小图 菲果是一个在线的平面设计工具,只需要注册登录就可以直接使用里面的模板,或二次创造使用.打开菲果在线平面设计网站之后,点击进入模板.在众多分类中选择“网络媒体”,然后在子分类中选择“微信公众号封面小图”.接下来,在众多模

微信公众号教程(11)公众账号接收非文字消息

公众账号接收非文字消息 在微信公众平台上用户都是用使用文字在进行交互的,但是有时候使用图片.语音.视频以及地理位置等可以实现一些非常棒的功能,比如"语音提醒"公众号里的发送语音就可以实现定时的事件提醒功能:比如ZTalk曾经搞过微信拍照晒电脑桌面的活动(响应的人太少,桑心--):比如一些预定本地化服务的公众号里发送当前地理位置就可以查询周边商家. 要实现这些功能首先得学会接收这些消息类型,比文字消息类型肯定要复杂很多了,目前我们能够接收的消息类型只有图片.地理位置以及退订消息,其他的如

微信公众号教程(9)公众账号发送欢迎图文消息

第十章 公众账号发送欢迎图文消息 昨天已经讲了如何实现用户订阅公众账号时发送欢迎词,但这个貌似体现不出开发模式的优势啊,我用编辑模式做不是更加简单嘛,那么今天就来个升级版的欢迎词吧.先看最后的效果,如下图: 当用户关注公众账号时自动回复一个多图文消息,每个图文消息可以对应一篇文章或者自己网站的某个网页,用户点击就可以查看,是不是非常棒,特别适合一些企业用来做公司业务介绍.现在就教大家如何实现,顺便就可以把图文消息的回复讲了. 一.使用SAE的分布式存储服务 在编辑模式里做图文消息回复时,直接通过

微信公众号测试号申请及本地开发环境配置

一.公众号测试号申请 测试号申请直接打开此https://mp.weixin.qq.com/debug/cgi-bin/sandboxinfo链接,用微信扫二维码即可登录.登录之后填写好这些信息,下面的域名,我用的是测试地址的域名,如下图: /account/verify对应的代码如下,这里面我省略了验证签名和echostr进行对比,直接输出echostr(你不会写还是太懒了:). 这样接口配置信息就验证通过了.用微信扫描测试公众号的二维码,即可关注自己的公众测试号.然后自己创建公众号菜单. 二