微信开发1
一、微信概述
1、历史背景
- 1)2011年1月21日,腾讯推出微信应用程序。(张小龙和张伯龙)
- 2)2012年8月20日,腾讯推出微信公众平台功能,同年11月开放第三方接口
- 3)2013年11月注册用户量突破6亿,是亚洲地区最大用户群体的移动即时通讯软件。
- 4)截止到2016年第二季度,微信已经覆盖中国 94% 以上的智能手机,月活跃用户达到 8.06亿,用户覆盖 200 多个国家、超过 20 种语言。
- 微信公众平台是腾讯为了让用户申请和管理微信公众账号而推出的一个Web平台,而微信公众账号的操作管理在这个平台下进行。所有用户都在腾讯提供的统一微信公众平台下进行相关操作:
- 平台地址:https://mp.weixin.qq.com/
2、微信公众平台的概念和分类
微信公众平台的账号分为两种:
1.微信公众平台的服务号
2.微信公众平台的订阅号
一、微信公众平台服务号的功能:
公众平台服务号,是公众平台的一种帐号类型,旨在为用户提供服务。如:招商银行、大铭装饰、中国南方航空。
1、1个月(30天)内仅可以发送1条群发消息。
2、发给订阅用户(粉丝)的消息,会显示在对方的聊天列表中。相对应微信的首页。
3、服务号会在订阅用户(粉丝)的通讯录中。通讯录中有一个服务号的文件夹,点开可以查看所有服务号。
4、服务号可申请自定义菜单(自定义链接)。
服务号成为开发者可以获取微信公众号所有的接口功能(交300块),例如:微信支付.
所以服务号一般是企业申请比较多,申请需要提供相关营业备案和执照.
二、微信公众平台订阅号的功能
公众平台订阅号,是公众平台的一种帐号类型,为微信公众平台用户提供信息和资讯。如:骑行西藏、央视新闻。
1、每天(24小时内)可以发送1条群发消息。
2、发给订阅用户(粉丝)的消息,将会显示在对方的“订阅号”文件夹中。点击两次才可以打开。
3、在订阅用户(粉丝)的通讯录中,订阅号将被放入订阅号文件夹中。
4、订阅号在获得微信认证后也可以申请自定义菜单。(但不能自定义菜单中的链接)
订阅号成为开发者一般只拥有基础接口,无法申请开通微信支付.
目前在国内订阅号主要用于公众人物和明星人物比较火
4、微信公众平台的作用
1.让公众号帮你将内容分享给好友
2.微信营销
选择一家在行业中具有相当影响力和权威性的微信公众账号作为营销平台,在新的媒体环境和市场竞争中才能与时俱进,这已成为企业的共识。拥有真实粉丝数量庞大的微信公众账号已经成为网络营销的必备利器。营销方式主要有:
一、图片广告。微信公众账号每天精选业有价值的新闻、资讯等富媒体推送给订阅用户,并在在文章的插图或者最后面,附上一张精心设计广告图一目了然,不影响用户体验,还能实现广告传播效果最大化。
二、植入广告。在推送的富媒体内容上,植入广告内容,比如在文章、图片中提到某些品牌的名字、广告词等,这类广告不漏痕迹,不易引起用户抵触,基于数量巨大的粉丝和用户对微信账号的高度认可,这类广告效果效果也不错。
三、纯粹广告。某些信息发布类媒体的微信公众账号可以定期整理一定数量的“纯粹广告”进行发布,广告内容本身就是用户需要的一种服务,广告自然效果最佳。
3、微信与微信公众平台区别
- 微信是基于点对点关系
- 微信公众平台是基于一对多关系
- 微信不能群发信息,微信公众平台可以群发消息
- 编辑模式与开发模式
- 两种是互斥的
- 编辑模式是平台内置的web系统
- 开发模式可以通过腾讯的API接口进行二次开发
- 不具备开发能力的运营者
- 主要是进行品牌宣传、新闻媒体、自助客服的公众帐号
- 运营初期,不需要特别多的功能
- 开发模式系统升级、故障等特殊情况
5、微信公众平台使用说明
6、微信编辑模式应用场景
7、微信编辑模式的基本使用
1.使用自动回复的功能:
 
2.使用素材管理:
 
3.使用群发功能:
 
4.使用菜单自定义
 
二、开发者模式
1、编辑模式运行原理图
 
2、微信开发者模式运行原理图
 
三、阿里云
1.阿里云服务器
阿里云,阿里巴巴旗下公司,创立于2009年,是中国的云计算平台,服务范围覆盖全球200多个国家和地区。
2.配置阿里云服务器
注意:如果在阿里云服务器上玩微信开发建议使用php5.5或以上版本,并且必须让php支持curl库.然而这过程跟你在虚拟机中安装lamp的过程是一样的,所以你可以在你的虚拟机上练习一次后再到真正的服务器上去进行安装.
为了后面传代码方便,建议在阿里云服务器上先安装rzsz和ftp工具,安装结果如下:
安装rzsz工具:
 
安装vsftpd工具:
 
把vsftpd加入开机脚本
 

由于我们一般使用ftp进行代码的上传会比较多,所以我们需要创建一个普通的用户来进行代码的上传
特别:注意在阿里云中必须要以22端口进行ftp登录
为了方法ftp不需要手动更改站点目录,所以可以手动添加以下定时命令:
 

安装memcache(因为微信开发中使用access_token最好开启memcache)
 
安装unzip和zip解压缩工具
 
1)在阿里云服务器中安装Apache服务器
输入以下命令:yum -y install httpd httpd-manual mod_ssl mod_perl mod_auth_mysql
 
由于在真实的服务器环境,我们不可能每一次都去启动apache服务器,所以我们需要把apache服务器加入开机脚本当中:
 
然后使用vim /etc/httpd/conf/httpd.conf,修改ServerName的相关选项如下:
 
2)在阿里云服务器中安装mysql
安装mysql输入以下安装指令:
yum -y install mysql mysql-server mysql-devel
 
由于默认安装的情况下,我们的mysql服务器会存在乱码的问题,所以我们需要为mysql打上脚本补丁包,把补丁包上传/usr/local/src
 

然后我们需要保证mysql.sh的脚本文件的权限为777,接下就需要执行该脚本:
 
执行脚本完成后,我们需要启动mysqld的服务:
 
由于服务器中的mysqld也是不可能每次手动去启动的,所以真正的服务器一般都把mysqld加入开机基本当中:
 
我们需要为mysql数据库设置一个密码,密码不要为12346
 
完成后,我们需要进去mysql当中查看一下编码的设置,确认以下几项为utf8就可以:
 
到/etc/my.cnf下
如果我们开发微信时需要使用到mysql必须在mysql加入[client]的客户端默认编码
 
保存并退出(:x),重启mysqld服务
 
3)安装php5.6
这时要主要由于我们需要使用这个php的版本来做微信开发,所以必须要让该php支持curl库,安装php5.6命令如下:
#配置yum源
rpm -Uvh http://ftp.iij.ad.jp/pub/linux/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
#安装PHP5.6.x(注意安装的时候必须加上php-curl)
yum -y install --enablerepo=remi --enablerepo=remi-php56 php php-opcache php-devel php-mbstring php-mcrypt php-mysqlnd php-pecl-xdebug php-pecl-xhprof libmemcached php-pecl-memcache php-pecl-memcached php-gd* php-curl
安装完成后需要重启apche服务器:
 
接下来需要在/var/www/html下编写phpinfo.php文件,内容如下 :
<?php
phpinfo();
如果运行后发觉php可以成功安装,这时我们必须要注意是否存在curl库的支持:
 
四、微信的API接口
1、获取微信的API接口
这是微信官方提供的给开发者的一个测试实例:
但这个示例太简单,基本没有任何的参考价值,但我们可以去张伯龙的博客中进行另外一个微信api的示例代码下载:
 
2.实现Api配置和服务器绑定详细步骤
第1步:把api的zip包解压,然后把文件上传到/var/www/html下
 
第2步:进入微信公众平台后台,找到开发者工具
 

第3步:填入api的地址和域名信息
 
如果出现警告配置失败是由于网络原因造成,并非api的配置有问题,所以多提交几次
第4步:填入js的安全域名
 
第5步:找到网页帐号,然后点击修改
 

五.开启微信的自动回复功能
第1步:扫描测试二维码
 
第2步:输入一段文字,比如:”您好”,如果有回复”欢迎使用微信公众平台开发API”就代表自动回复功能开启成功.
 
发觉没有回复,这时并非是我们的配置错误了,而什么我们需要在api.php代码中注解掉绑定服务器的验证方法valid()
 
重新上传到服务器中
第3步:重新测试自动回复功能,如下:
 
出现以上界面,就代表自动回复功能开启成功了,同时也证明api和自定义服务器以及微信公众平台的服务已经进行绑定了
六.分析微信基础接口核心示例Api
 
Lib目录:是微信开发的接口核心类目录
Lib/WeChat.class.php:是微信的接口核心类(但是只是提供了部分的接口示例截止到2014年)
Lib/WeChatApi.class.php:是微信服务器端高级接口的基础api连接的封装
Media目录:用于媒体上传(如:音乐,视频,图片等)
media.php:是微信媒体上传接口的配置文件
Lib/Command:是微信官方建议开发者使用命令行脚本的php文件存放目录
默认定义两个示例用于生成菜单和清除菜单
七.微信的接收接口形式(6大接口)
微信的接收接口是由微信官方自动实现,不需要我们编写任何的代码,接收接口就是微信客户端向微信服务器端发起xml模板文件,其文件由以下6个:
1)文本消息接口接收xml模板类型
 
<ToUserName>节点代表接收信息的一方是谁,注意在微信api当中由有2个属性:
$this -> FromUserName : 该属性指代微信的客户端
$this -> toUserName:该属性指代微信的服务器端
如果 <ToUserName>节点传入$this->toUserName,那么就当表当前接收信息的一方是微信公众平台的服务器端(称为接收接口),如果节点传入$this->FromUserName就代表接收信息的是微信客户端(称为回复接口)
<MsgType>节点,该节点在api当中使用$this->sendType来表示,表示当前的接收类型数据属于什么样的xml模板类型(文本,地理位置,音乐,图片,视频,连接..)。
如果接收的类型是文本消息,那么MsgType就是text对应api的this->sendType属性也是text
2)图片消息接口的xml模板
 
主要关心MsgType是image,对应$this->sendType=image就足够
3)语音消息接口的xml模板形式
 
主要关心MsgType是voice,对应$this->sendType=voice就足够
4)视频和小视频的xml模板形式
 
MsgType等于video代表是视频
MsType等于shortvideo代表是小视频
然而由于微信其实很难判断一个视频到底是不是视频,所以我们只需要统一使用video来进行判断就可以了,因为小视频也可以用video类型来代替
5)地理位置接口xml模板
 
MsgTyep等于location,$this->sendType对应也等于location
6)链接接收接口xml模板
 
msgType等于link就代表链接,但这个接收接口在现实开发中用的很少
八.在微信中开发代码获取用户上传的各种数据类型
在api.php当中编写代码如下 :
 
上传到阿里云当中进行测试,结果如下所示:
 
九.文本回复接口和图片回复接口
1)文本回复接口
 
回复接口toUserName节点必须等于$this->fromUserName(代表服务器回复信息给微信客户端),MsgType等于text,对应的接口叫reText()方法在WeChat.class.php中定义:
 
对应定义的模板在WeChatApi.class.php当中:
 
可以在api当中使用WeChatApi::getMsgTpl(“text”)进行获取
2)图片回复消息接口
 
MsgType等于image,MediaId是回复这个图片消息的关键(也是该接口的难点),在api当中封装的图片接口叫reImage($MediaId),在wechat.class.php当中定义:
 
对应的xml模板定义在WechatApi.class.php文件中,可以使用WeChatApi::getMsgTpl(“image”)来获取:
 
十.使用文本回复接口实现简单号码簿功能
项目需求
当用户在微信公众平台中输入?号时,自动弹出如下信息:
【1】特种服务号码
【2】通讯服务号码
【3】银行服务号码
您可以通过输入【】方括号的编号获取内容哦!
回复1
常用特种服务号码:
匪警:110
火警:119
回复2
常用通讯服务号码:
中国移动:10086
中国电信:10000
回复3
常用银行服务号码:
工商银行:95588
建设银行:95533
根据上述的项目,我们的难点在于我们需要知道用户输入的关键字是什么,并且我们需要知道如何在文本消息接口当中产生换行的结果(\n换行),在api.php当中编写代码如下所示:
 
上传到服务器中进行测试,效果如下:
 
十一.使用图片回复接口实现图片的回复
假设用户在客户端发出一条信息”热巴姐姐是谁?”,那么这时我们就已迪丽热巴的照片进行回复,但是在图片回复的接口当中我们需要传入MediaId。所以首先我们需要上传迪丽热巴的图片到微信的服务器端,使用测试调试工具进行上传获取:
第1步:找到测试调试工具进入后,获取access_token
 
第2步:填入appId和appsecret
 

第3步:复制access_token
 
第4步:选择媒体上传接口(image),填入access_token和上传迪丽热巴的图片
 
第5步:复制mediaId就是迪丽热巴的图片
 
第6步:编写代码如下所示
 
上传到服务器中进行测试,结果如下:
 
十二.音乐回复接口和视频回复接口
1)音乐回复接口的xml模板如下:
 
Title:表示音乐的名称
Description:表示音乐的描述
MusicUrl:表示有损音乐的播放地址
HQMusicUrl:表示高清无损音乐的播放地址(如果手机处于wifi的状态下,微信就会切换该地址进行播放)
MsgType:music
一般我们不具备高清无损音乐,所以我们可以把有损音乐和高清音乐设置为一个相同的地址
微信只能够播放在线的音乐,而不能播放本地的音乐
如果使用的是微信的测试账号,那么微信是不提供自动的背景设置功能
对应api中定义了方法为reMusic($title,$desc,$url,$hqurl),定义在wetChat.class.php中:
 
对应xml模板定义在WetChatApi.class.php中,可以使用WetChatApi::getMsgTpl(“music”)来进行获取:
 
2)视频回复接口的xml形式如下:【参看文档】
 
视频回复接口有以下几个关键点:
MediaId需要自己去获取(使用媒体上传接口或者调试测试工具)
MsgType为video
发觉在WeChat.class.php和WeChatApi.class.php当中作者没有为我们封装过任何的接口和xml模板
由于我们获取的微信Api示例是张伯龙在2014的ChinaJoy演示的示例代码,而2017年的时候微信已经更新很多接口了,所以接口没有的情况下,我们就需要使用自己的能力去原生开发加入的api代码当中了
十三.使用音乐回复接口
在微信客户端输入丽江神曲,就会用音乐回复<<一瞬间>>
准备音乐素材,把音乐上传到Media目录:
http://www.snk147.top/Media/ysj.mp3
编写代码如下:
 
上传到服务器中进行测试:
 
十四.编写视频回复接口
第1步:在WetChatApi.class.php当中封装视频回复接口的xml模板
 
第2步:在WeChat.class.php当中封装一个名为reVideo的回复接口
 
把WeChat.class.php和WeChatApi.class.php一并上传到服务器Lib目录中
第3步:打开在线测试调试工具获取access_token并上传视频素材
 

第4步:复制视频的mediaId
 
第5步:编写视频回复代码如下:
如果客户端发送”快乐的童年”就返回一段快乐童年视频
 
上传到服务器中测试结果如下:
 
十五.完善微信的api编写语音回复接口
在WeChatApi.class.php当中定义语音回复的模板
 
在WeChat.class.php文件中定义reVoice方法:
 
十六.图文回复接口(单图文,多图文)
图文回复接口的xml模板
 
MsgType为news就表示为图文回复消息,如果Articles当中有多个item节点,那么就是多图文,如果只有一个item节点那么就是单图文,对应的模板封装在WeChatApi.class.php当中:
 
我们发觉在<Aticles>节点当中只有一个%s,原因item节点作者封装一个叫做createNewsItems
的方法来进行构造:
 
我们发觉有一个叫reNews的方法中间调用了createNewsItems,代码如下:

十七.使用图文回复接口实现单图文和多图文回复
在api.php中写上如下代码:自己编写单图文方法和多图文方法,然后调用(在WxApi类中)
1.如果用户输入关键字迪丽热巴,那么回复迪丽热巴的相关简介,点击简介跳转到百度百科
 
测试效果如下:
 
2.实现多图文,如果用户输入帅哥美女,这时我们就回复多图文信息
 
测试结果:
 
其实内容详细页,我们可以自定义内容页(使用响应式布局)
十七.订阅回复接口[订阅回复]
如果希望用户关注我们的公众号时,告诉用户一些相关公众号功能,那么我们就需要使用订阅回复接口,如果一个用户关注了微信公众个平台,那么就会默认触发以下接口,其xml模板形式如下所示:
 

MsgType如果等于event那么就代表用户触发一个推送事件
Event如果等于subscribe就代表当前用户触发的推送事情是关注微信公众号
如果希望用户关注的时候调用订阅回复接口,那么就需要判断这个2个节点是否被触发,于是编写代码如下:
 
在api.php中,我们需要进行如下代码写:
 
上传到服务器中测试,由于你需要测试的接口是订阅回复,必须先取消关注然后再重新关注才能触发事件:
 
十八.语音识别功能
目前该功能依然处于微信开发者的调试开发阶段,这个功能目前只能支持国语(标准),但张伯龙在ChinaJoy表达这个功能是未来趋势,如果要是使用语音识别功能,首先需要在后台启动该功能:
第1步:找到接口列表
 
第2步:点击开启按钮进行开启,否则无法调用该接口
 
第3步:判断当前多用户是否上传了一条语音消息判断sendType是否为voice,如果为voice那么微信的api就会有一个Recongnition的属性包含语音的功能,因此编写如下
 
测试结果如下:
 
十九.php的curl技术
1、cURL库
cURL库是一个非常强大的开源库,支持很多协议,包括HTTP、FTP、TELNET等,在微信开发中,我们使用它来发送HTTP请求。它给我们带来的好处是可以通过灵活的选项设置不同的HTTP协议参数,并且支持HTTPS。
要使用cURL库那么你的php版本里面必须包含该库的扩展(就如你使用gd库一样)
Curl简单把它理解称为编译器中的一个虚拟的浏览器,无论这个curl有多么的复杂,永远记住curl的四步走口诀:
 
2.cURL最重要的几个选项
#安全上传(主要是为了兼容php5.6在微信中的应用)
CURLOPT_SAFE_UPLOAD
#需要获取的 URL 地址
CURLOPT_URL
#SSL证书中是否存在一个公用名,证书和主机名(认证的域名)
CURLOPT_SSL_VERIFYHOST
#服务器端校检SSL证书
CURLOPT_SSL_VERIFYPEER
#是否以html字符串形式进行返回
CURLOPT_RETURNTRANSFER
#是否使用post方式进行请求
CURLOPT_POST
#POST请求时需要post的数据包
CURLOPT_POSTFIELDS, $data
学习curl最好不要在真正的服务器中进行,因为像阿里云这样的服务器帮你省略很多认证操作所以会到curl的代码不够完善,因此在windows下先进行学习
3.使用curl请求百度
编写curl_baidu1.php的代码如下所示:
 
测试结果没有问题:
 
4.使用curl请求百度(使用https协议)
 
测试如下:
 
编写curl_baidu2.php,修改代码如下:
由于curl是一个虚拟的浏览器,我们无法安装ssl的安全认证证书(但是阿里云的php是已经安装了),所以我们如果希望ssl不要被验证,那么就需要curl当中禁止ssl的协议
 
这时访问百度其实没有任何的问题,但是当前的请求是get请求,如果我们要使用post的请求,那么我们又应该如何设置呢?
编写curl_post.php代码如下:
 
编写post测试代码如下(curl_post_testing.php)
 
把curl_post_testing.php文件上传到阿里云当中,在curl_post.php当中测试结果如下:
 
如果我们需要把curl的post用于微信请求当中,那么有选项必须填入以下三项:
 
二十.使用面向对象的方法把curl整合Wechat.class.php当中
curl有1个难点,就是什么时候使用get什么时候使用post,在微信开发当中,如果CurlRquest方法中data参数不为空,那么就使用post提交,如果data为空那么就使用get进行请求,定义代码如下:
 
编写test.php代码如下:
 

以上代码是封装在WeChat.class.php中,以后调用微信中接口都需要用到。所有需要封装。
还是就是curl中get与post方式请求的网址,最终是以字符串的信息返回请求的那个页面的内容
 

 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号