1 微信公众号简介
1.1 微信的各个平台
微信开放平台,面向开发人员,为网站、App 提供微信第三方登录功能,为 App 提供支付功能(通过客户端 sdk 拉起微信客户端);
微信公众平台,对应的是公众号,包括订阅号、服务号、企业号,面向运营人员和开发人员,运营可以直接登录公众号管理后台查看公众号的各种指标,开发则是通过调用微信提供的各种接口来增强公众号的功能;
微信商户平台,用户通过微信支付的钱,最终到达商户账号。无论是开放平台还是公众平台,涉及到支付,都需要商户平台账号
1.2 微信公众平台
微信公众平台(公众号),分为订阅号
、服务号
、企业号
,订阅号可以个人申请,服务号和企业号要有企业资质才可以。
我们所说的微信公众号开发指的是订阅号
和服务号
,主要区别如下:
订阅号
:主要偏向于为用户传达咨询,功能类似报纸杂志,为用户提供新闻信息或娱乐趣事,每天可群发一条消息;使用范围:个人、媒体、企业、政府或其他组织。
服务号
:主要偏向于服务交互,功能类似114、银行,提供绑定信息,服务交互,每月可群发4条消息;使用范围:媒体、企业、政府或其他组织。
根据功能和使用范围可以看出,我们公司比较适合开发服务号,但是由于服务号
只有企业资质才可以申请,因此,我们从订阅号
进行入手,开始公众号开发的学习。
2 公众号开发前的准备
2.1 微信公众号的通讯机制
基于微信公众号的应用,需要实现功能之后部署到公网服务器上进行测试,因此,在进行微信公众号开发之前,需要搭建开发环境,主要有如下工作:
1、云服务器
- 购买云服务器
- 配置安全组
- 登录Linux服务器
- 搭建、开启服务
- 进行开发配置
2、域名
- 购买域名
- 实名认证
- 网站备案
- 域名解析
3、公众号
- 申请公众号
- 开发者基本配置
- 设置开发者账号、密码(AppSecret)
- 设置IP白名单
- 微信网页授权
以下章节对服务器、域名、公众号等环境的搭建进行详细的介绍。
2.2 云服务器
本文以腾讯云为例,完成服务器的购买、配置和搭建工作。
2.2.1 购买腾讯云服务器
从腾讯云服务器官网,合作与生态-云+校园,按照购买提示进行购买。此处,选用的是CentOS7.2的Linux系统。
2.2.2 配置安全组
安全组介绍:
安全组是一种有状态的包过滤功能虚拟防火墙,用于设置单台或多台云服务器的网络访问控制,是腾讯云提供的重要的网络安全隔离手段。 安全组是一个逻辑上的分组,您可以将同一地域内具有相同网络安全隔离需求的基础网络云服务器或弹性网卡实例加到同一个安全组内。安全组可以控制80端口,22端口,21端口,3389端口是否能直接被访问,可以让你的网站变得更加安全,以下是服务器端口的介绍:
- 80端口:是网页浏览器访问的默认端口
- 22端口:是ssh登录需要的端口,它是putty,xshell等工具都是通过这个端口登录linux远程桌面的。
- 21端口:是ftp上传端口
- 3389端口:是windows服务器远程桌面端口
具体操作:
登录腾讯云后台, 云服务器—安全组。
一般来说,腾讯云的安全组规则出口都是默认开放的,来源:0.0.0.0/0,协议端口:ALL,策略:允许——ALL或0.0.0.0/0表示全部来源的流量。
2.2.3 登陆Linux服务器
Linux云服务器提供了以下几种方式进行登陆:
(1)选择第一种方式,可在网页上点击“立即登录”,登陆账号和密码,即可与服务器进行连接。
(2)利用Xshell(一个远程管理linux服务器的客户端软件)
安装:
官网:https://www.netsarang.com/products/xsh_overview.html
安装教程:https://jingyan.baidu.com/article/19192ad8d2bdcde53e5707da.html
使用:
在运行该软件之后,点击新建,在弹出的新建会话属性窗口中,在名称这一栏填写自定义的会话名,在主机这一栏填写我们云服务器的公网IP地址,其余部分均保持默认状态即可。
选择确定,即保存了这一条会话,选中这条会话,点击连接,接下去输入用户名和初始密码即可。当Xshell面板当中出现如下视图,则说明成功登录到腾讯云服务器。
2.2.4 搭建及开启服务
(1)安装python2.7以上版本
CentOS7.2自带python2.7.5,readline-devel 如果没有安装的话,会造成进入python解释器上下左右回退键都输入不正常。
yum install -y readline-devel
如果缺少openssl-devel的话,访问https会无法工作。
yum install -y openssl-devel
下载
cd /tmp
wget https://www.python.org/ftp/python/2.7.12/Python-2.7.12.tar.xz
解压缩
tar -xJvf Python-2.7.12.tar.xz
编译
cd Python-2.7.12/
./configure --prefix=/usr/local/python2.7
make
make install
链接
ln -s /usr/local/python2.7/bin/python2.7 /usr/local/bin/python
由于系统自带的python路径是/usr/bin/python。PATH中,/usr/local/bin比/usr/bin靠前,所以当你输入python,系统会自动启动你安装的python2.7.12。
echo $PATH
/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
在python脚本中,你可以使用env来搜寻python
#!/bin/env python
这样,CentOS7.2调用的也是你安装的2.7.12。好处是当你在别的环境里运行,不需要改第一行也能执行。当然你也可以使用绝对路径:
#!/usr/local/bin/python
这样当在别的环境中执行,你需要用sed把第一行的路径替换下。
(2)安装web.py
先安装 easy install:
yum install python-setuptools
安装完成,输入:
easy_install web.py
(3)安装libxml2, libxslt, lxml python
yum install libxml2
yum install libxslt
yum install lxml python
(4)编辑代码,如果不懂python 语法,请到python官方文档查询说明。
vim main.py
点击“i”,进入编辑模式,输入以下代码:
#空格-*- coding: utf-8 -*-
#空格filename: main.py
import web
urls = (
'/wx', 'Handle',
)
class Handle(object):
def GET(self):
return "hello, this is a test"
if __name__ == '__main__':
app = web.application(urls, globals())
app.run()
点击“ESC”,退出编辑模式,输入“:wq”,退出编辑器并保存。
(5)开启服务
如果出现“socket.error: No socket could be created“错误信息,可能为80端口号被占用,可能是没有权限,请自行查询解决办法。
【解决办法】
杀死进程的命令:
lsof -i :80 #这个命令针对我用的hostport80
如果是查看本机所有的进行的进程:
ps aux #用ps -A查看所有进程
杀死进程:
kill -9 PID # PID是进程号,查看进程时会显示,比如23645
如果遇见其他错误信息,请到web.py官方文档,学习webpy 框架3执行命令:
sudo python main.py 80
(6)测试
在浏览器输入http://外网IP:80/wx,可以看到类似于如下的页面:
这表明一个简单的web应用已搭建完成。
2.2.5 进行开发者配置
(1)服务器端
main.py
# -*- coding: utf-8 -*-
# filename: main.py
import web
from handle import Handle
urls = (
'/wx', 'Handle',
)
if __name__ == '__main__':
app = web.application(urls, globals())
app.run()
# -*- coding: utf-8 -*-
# filename: handle.py
import hashlib
import web
class Handle(object):
def GET(self):
try:
data = web.input()
if len(data) == 0:
return "hello, this is handle view"
signature = data.signature
timestamp = data.timestamp
nonce = data.nonce
echostr = data.echostr
token = "weixin" #请按照公众平台官网\基本配置中信息填写
list = [token, timestamp, nonce]
list.sort()
sha1 = hashlib.sha1()
map(sha1.update, list)
hashcode = sha1.hexdigest()
print "handle/GET func: hashcode, signature: ", hashcode, signature
if hashcode == signature:
return echostr
else:
return ""
except Exception, Argument:
return Argument
注:token与微信公众号中的对应
开启服务:sudo python main.py 80
(2)在微信公众平台中进行配置()
登录自己注册的公众号,在左侧“开发”中选择“基本配置”。点击修改配置:
在url中输入:http://外网IP:端口号/wx
token:输入自己在程序中设置好的暗号,如weixin
Encoding AESKey:点击随机生成
成功后点击提交即可。
2.2.6 配置LNMP环境 (暂时用不到)
https://blog.csdn.net/qq_38032300/article/details/79587538
(1)我们在之前用Xshell登录了云服务器之后,在控制面板当中输入如下命令->screen -S lnmp。如果回车之后,提示->-bash: screen: command not found,则说明screen还未安装。则我们可以键入如下命令->yum install screen来进行安装。
在提示安装完成之后,再次键入命令->screen -S lnmp。敲击回车之后,会打开一个新的窗口,由于为CentOS系统,我们只需继续在新窗口中执行安装lnmp一键包的命令即可。
(2)下载并安装lnmp一键安装包。
我们在新窗口中键入命令->wget -c http://soft.vpser.net/lnmp/lnmp1.4.tar.gz && tar zxf lnmp1.4.tar.gz && cd lnmp1.4 && ./install.sh lnmp。敲击回车之后,会提示要求选择DataBase、PHP、MySQL的版本号,我们均可以选择敲击回车来选择默认的版本即可。我们数据库的默认账号为root,安装过程中会要求我们设置数据库的密码,若我们也敲击回车,则默认的数据库密码为root(我们需要记清我们设置过的数据库的账号和密码以保证我们之后能正常的访问)。当运行至出现如下提示,我们只需键入任何一个键,就开始安装了。接下去只需等待30至40分钟,即可完成自动安装。
2.3 域名
2.3.1 购买域名
可按照腾讯云官网的操作流程进行购买
2.3.2 实名认证
2.3.3 网站备案
基本流程如下:(可参照以上网址的操作流程)
(1)填写备案信息
备注:实名认证三个工作日之后,才可审核通过。
(2)办理幕布拍照
(3)提交管局
备注:大概2周,最终获取备案号
、备案密码
备案完成后的30天内登录全国公安机关互联网站安全管理服务平台办理公安备案,网址:www.beian.gov.cn 。
(4)备案完成。
2.3.4 域名解析
备注:腾讯云可以免费域名解析
2.3.5 部署域名证书
2.3.6 选择建站模板
>快速建站指南:
>注册域名-选购云服务器-网站备案-设置域名解析-部署域名证书-选择建站模板
2.4 开启公众号开发者模式
2.4.1 申请公众号
进入微信公众号注册页面https://mp.weixin.qq.com/
点击公众号右上方的注册按钮,进入注册界面,填写基本信息,选择订阅号, 完成身份认证, 此处我选择的是个人订阅号,参考1.3章节完善信息即可。
2.4.2 开发者基本配置
登录自己注册的公众号,在左侧“开发”中选择“基本配置”。参考1.4章节,点击修改配置:
在url中输入:http://外网IP:端口号/wx
token:输入自己在程序中设置好的暗号,如weixin
Encoding AESKey:点击随机生成
成功后点击提交即可。
2.4.3 设置开发者账号
开发 ->开发者工具 -> web开发者工具
2.4.4 设置开发者密码(AppSecret)
开发-> 基本配置-> 开发者密码(AppSecret)
2.4.5 设置IP白名单
设置-> 安全中心-> IP白名单设置你服务器的IP
通过开发者ID及密码调用获取access_token接口时,需要设置访问来源IP为白名单。
2.4.6 微信网页授权
微信网页授权
注:如果使用支付功能,必须先授权。(订阅号无法开通此接口,服务号必须通过微信认证。)
2.4.7 其他
- 微信开发者工具:相当于一个可以在 pc 上运行的微信浏览器,方便模拟手机微信。微信开发者工具下载
- 开发者文档:文档对于开发者的重要性就不用说了。https://mp.weixin.qq.com/wiki?token=&lang=zh_CN
- 在线接口调试工具:方便直接调试公众平台接口,不用开发者自己写调试程序。http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login
- 公众平台测试账号,这个是非常有帮助的,尤其是在服务号未进行微信认证的情况下(很多接口还没有开放)。在这个测试账号里面基本上所有的接口权限都开放,在开发测试阶段是非常有帮助的
微信公众号开发的准备工作基本完成:
- 公众号/订阅号
- 已经备案的域名
- 微信开发者工具
- 域名解析到服务器(https://www.jianshu.com/p/c781c108226a)
至此,我们的公众号和微信服务器已经可以正常通信了,对接成功之后,接下来要做的就是根据我们的业务需求调用微信公众号提供的接口来实现相应的逻辑。
3 微信公众平台数据交互原理
从上图可以看到,微信公众平台实际只是起到一个桥梁作用,实际处理业务、提供服务的代码,依然是放在我们自己的服务器或者公网映射上面。
那么,我们就可以在我们服务器上面编写后台代码,并通过自己的服务器或映射工具提供公网能够访问的URL,然后将此URL绑定到微信后台即可。接下来开启公众号开发。