1. 概述

微信公众号开发,其实就是微信使用者、微信公众号平台和自身服务器的http消息交互;在这一系列过程中,微信公众号平台充当了中介和转发作用(如图1所示)。需要注意的是,微信公众号平台向自身服务器转发消息,目前只支持http的80端口和https的443端口,所以,自身服务器必须打开80端口或443端口。

1 微信公众号开发消息交互

微信公众号开发有官方文档,官方文档地址:https://mp.weixin.qq.com/wiki。学习官网可知,微信公众号开发,更多的是和微信公众号平台的一些http消息,消息格式以XML和JSON为主,主要采用get和post两种消息形式。

微信公众号官方文档理论上是最权威的说明,但部分开发并没有进行详细说明,尤其让初次进行微信公众号开发的人感到无从下手。本文档旨在提供一个基础的说明,方便人进行微信公众号开发入门。

  1. 微信公众号后台配置

对于微信公众号的开发人员来说,首先需要做的事情是:对自身微信公众号后台进行配置。

登录微信公众号平台(https://mp.weixin.qq.com/)以后,在“开发”——“基本配置”里对微信公众号进行设置。

“公众号开发信息”里,是公众号的开发信息,包括开发者ID、开发者密码和IP白名单。其中IP白名单是可以登录自身公众号平台的的IP,建议加上自身的服务器IP。(如图2所示)

2 公众号开发信息

“服务器配置”里,是对自身服务器信息的配置。其中,“服务器地址(URL)”是对服务器地址的配置,“令牌(Token)”是校验方式,“消息加密密钥”和“消息加解密方式”是进行加解密的密钥和方法。(如图3所示)

3 服务器配置

需要注意的是,第一次配置的时候,服务器地址和Token必须存在且正确,才能进行配置,否则会不会生效。同时,由于服务器只支持http的80和https的443端口,注意服务器的端口配置。(笔者曾用Nginx和简单的php进行了配置,可以参考博客https://blog.csdn.net/wangzhezhilu001/article/details/96876020)

公众号配置完成后,启用即可使微信公众号生效。

  1. 自身服务器搭建

自身服务器搭建,是和微信公众号设置紧密相关的。

理论上,自身服务器搭建,最关键的是有固定的IP;如果是企业号,最后肯定还要进行域名申请。

固定IP获得由几个方法:

  1. 企业获得电信的固定IP(目前电信运营商只给企业固定IP);
  2. 各种云平台的固定IP(阿里云、腾讯云或新浪云);
  3. 花生壳等固定IP转换工具。

笔者采用了腾讯云。

在获得固定IP以后,对80端口进行了绑定,并对固定URL进行响应,并配置了相应Token。笔者给出自己的Flask代码样例进行说明。(如图4所示,注意的是Token和URL)

4 URLToken设置

  1. 微信收发图文消息

微信收发图文消息,需要注意的是,收发消息,消息格式都是XML。

微信的文字消息的XML格式为:

<xml>
  <ToUserName><![CDATA[toUser]]></ToUserName>
  <FromUserName><![CDATA[fromUser]]></FromUserName>
  <CreateTime>1348831860</CreateTime>
  <MsgType><![CDATA[text]]></MsgType>
  <Content><![CDATA[this is a test]]></Content>
  <MsgId>1234567890123456</MsgId>
</xml>

其中,ToUserName为开发者微信号,FromUserName为发送方帐号(一个OpenID),CreateTime为消息创建时间(整型),MsgType为消息类型,文本为text,Content文本消息内容,MsgId 消息id,64位整型。

图片消息的XML格式如下:

<xml>

  <ToUserName><![CDATA[toUser]]></ToUserName>  <FromUserName><![CDATA[fromUser]]></FromUserName>  <CreateTime>1348831860</CreateTime>  <MsgType><![CDATA[image]]></MsgType>  <PicUrl><![CDATA[this is a url]]></PicUrl>  <MediaId><![CDATA[media_id]]></MediaId>  <MsgId>1234567890123456</MsgId></xml>

其中,ToUserName为开发者微信号,FromUserName为发送方帐号(一个OpenID),CreateTime为消息创建时间 (整型),MsgType为消息类型,图片为image,PicUrl为图片链接(由系统生成),MediaId为图片消息媒体id,可以调用获取临时素材接口拉取数据,MsgId为消息id,64位整型。

还有语音消息,这里不再赘述。如有兴趣,可以参考微信公众平台技术文档(https://mp.weixin.qq.com/wiki)的“消息管理”,“接收普通消息”。

值得注意的是:发送方或者微信本人的确定标志位OpenID。

还有,开发微信公众号的人要谨记:发送和接受消息,必须用XML形式,必须符合相关格式,否则收发消息可能会失败。

  1. 微信生成二维码

微信生成二维码,可以用微信的自带功能QCode。该方法,可以把OpenID放到二维码里,使URL本身带有OpenID。

微信返回二维码,是图片格式。最关键的图片信息,是MediaId。MediaID可以用WebClient获得。WebClient获得MediaID需要让 IP白名单中包含服务器IP的白名单。(参考选项2的说明)

  1. 微信发送模板消息

微信平台向个人发送消息,必须采用模板消息。模板消息参考的官方文档为“消息管理”——“模板消息接口”(https://mp.weixin.qq.com/wiki)。

发送模板消息,首先需要订阅,必须是已经认证的公众号,才可以进行消息订阅。认证方式为“公众号平台”(https://mp.weixin.qq.com)——“设置”——“微信认证”。

认证之后,可以设置模板消息。(如图5所示)

5 模板消息设置

关于添加模板消息的的具体步骤,可以参考https://jingyan.baidu.com/album/b87fe19e4295a352183568b3.html?picindex=2上的说明。

发送模板消息需要知道Acceess_Token,Aceess_Token是两小时变化一次的。获得Access_Token的接口为:用get方式 调用https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET 接口。其中,grant_type设置为client_credential,appid和secret分别为公众号平台的APPID和APPSeceret。

发送模板消息的方法为用post方法发送数据到https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN,post数据格式如下:

{

           "touser":"OPENID",           "template_id":"ngqIpbwh8bUfcSsECmogfXcV14J0tQlEpBO27izEYtY",           "url":"http://weixin.qq.com/download",             "miniprogram":{             "appid":"xiaochengxuappid12345",             "pagepath":"index?foo=bar"           },                     "data":{                   "first": {                       "value":"恭喜你购买成功!",

                       "color":"#173177"                   },                   "keyword1":{                       "value":"巧克力",

                       "color":"#173177"                   },                   "keyword2": {                       "value":"39.8",

                       "color":"#173177"                   },                   "keyword3": {                       "value":"2014922",

                       "color":"#173177"                   },                   "remark":{                       "value":"欢迎再次购买!",

                       "color":"#173177"                   }           }       }

其中,touse为接收者openid,template_id为模板ID,url为模板跳转链接(海外帐号没有跳转能力),miniprogram为跳小程序所需数据,不需跳小程序可不用传该数据,appid为所需跳转到的小程序appid(该小程序appid必须与发模板消息的公众号是绑定关联关系,暂不支持小游戏),pagepath为所需跳转到小程序的具体页面路径,支持带参数,(示例index?foo=bar),要求该小程序已发布,暂不支持小游戏,data为模板数据,color模为板内容字体颜色,不填默认为黑色。

  1. Python开发微信公众号平台的SDK和样例代码

Python开发微信公众号平台可以参考的SDK为wechatpy。

可以参考的样例代码(本人所写)地址为:https://gitee.com/xwtspace/wxCode (或 https://github.com/diziqian/wxCode.git)

注意,解析消息用wechatpy的parse_message,回复消息如果是文本用TextReply,图片为ImageReply。

微信公众号开发的一些方法总结相关推荐

  1. 实例:用C#.NET手把手教你做微信公众号开发(4)--获取普通access_token、jsapi的方法;用MediaId获取微信服务器图片

    一.access_token概念 这里在后续几篇处理不同的普通消息文章前插播一个适用于整个微信公众号开发的公共类QinMingWeixinContainer,用于获取普通access_token和js ...

  2. 微信公众号开发时返回中文数据为问号解决方法

    最近在入门微信公众号开发时,发现从微信服务器获取的数据返回到前端时,中文都会变成 ?.百度后,发现很多解决方法都没什么作用,但还是找到了两个可以解决的办法. 一.使用HttpServletRespon ...

  3. 【微信公众号开发】获取并保存access_token、jsapi_ticket票据(可用于微信分享、语音识别等等)...

    步骤一:首先得开通公众号(目的是 获得appid.AppSecret.设置安全域名)~ [公众号设置]→[功能设置] 设置相应的域名 步骤二:编写帮助类WeixinLuyinHelper中的代码 #r ...

  4. 微信公众号开发小记(二)--服务器验证

    这篇是微信公众号开发小记的第二篇,承接上一篇,此次将完成如下主要功能 对接微信服务器和自己的服务器 需要的"材料" 到这里需要梳理一下都需要什么东西,以便在整个编码的过程中方便我们 ...

  5. 微信公众号开发小记——4.两种邀请用户的方式 扫码链接

    描述 假设的我们的服务号有这么一些功能,比如底部有按钮,点击会有一些复杂的功能,这时候可能就需要一个用户系统,有用户系统就经常想要做什么分享邀请新用户之类的,这时候就又有几种方式,1.直接一个连接,让 ...

  6. .NET开发者如何愉快的进行微信公众号开发

    (此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:这篇文章只是一个如何提高开发效率的简单指导和记录,不会涉及具体的微信公众号开发内容. ...

  7. C#微信公众号开发 -- (七)自定义菜单事件之VIEW及网页(OAuth2.0)授权

    通俗来讲VIEW其实就是我们在C#中常用的a标签,可以直接在自定义菜单URL的属性里面写上需要跳转的链接,也即为单纯的跳转. 但更多的情况下,我们是想通过VIEW来进入指定的页面并进行操作. 举一个简 ...

  8. C#微信公众号开发系列教程三(消息体签名及加解密)

    http://www.cnblogs.com/zskbll/p/4139039.html C#微信公众号开发系列教程一(调试环境部署) C#微信公众号开发系列教程一(调试环境部署续:vs远程调试) C ...

  9. java自定义菜单跳转页面_微信公众号开发 自定义菜单跳转页面并获取用户信息实例详解...

    微信公众号开发 自定义菜单 请先读完本文再进行配置开发 请先前往微信平台开发者文档阅读"网页授权获取用户基本信息"的接口说明 在微信公众账号开发中,往往有定义一个菜单,然后用户点击 ...

最新文章

  1. Swift3.0带来的变化汇总
  2. NSIS中判断.net framework 是否安装
  3. Java—TCP与HTTP连接
  4. Android AlertDialog学习
  5. Facebook哭晕在厕所,调查显示用VR体验社交的用户仅为19%
  6. python菜鸟教程100例-Python 练习实例14
  7. authware链接html文件,authorware是什么软件?
  8. 基于matlab的CIC滤波器仿真
  9. 机器人也能打排球了,击球成功率80%!日本东京大学新型气动仿人机器人
  10. Win7下面更改屏幕旋转快捷键的方法
  11. 论文分享(2)MASAD: A Large-Scale Dataset for Multimodal Aspect-Based Sentiment Analysis
  12. python打开ie浏览器_python+selenium启动IE浏览器
  13. 政府采购87号令实施满月,地信企业须警惕九个坑
  14. 二等水准测量记录数据_2等水准测量原始记录表
  15. 部署YApi时,出现报错信息:Accessing non-existent property ‘count‘ of module exports inside circular dependency
  16. 【无限互联】iOS开发视频教程— 2.8 iPhone开发之swtch语句
  17. 宿舍管理系统1(pyhon与mysql)
  18. MySQL深翻页、MySQL跳页
  19. Android键盘灯亮度控制
  20. 怎么更改计算机用户名网络密码怎么办,怎么改wifi密码和名称(电脑修改wifi密码步骤)...

热门文章

  1. 4、MySQL数据库-简单查询
  2. 前端系列19集-vue3引入高德地图,响应式,自适应
  3. Python requests爬取美桌壁纸之可爱小狗狗
  4. 三月桃花开,用python给你带来你的桃花运,详细解析画一棵表白树!
  5. STM32启动定时器6程序就会卡住的解决方法
  6. 微众银行眼中的区块链分布式商业趋势及技术落地
  7. DevExpress Winform 利用GridControl开发的会计凭证控件
  8. html如何设置四个链接,HTML基础(四)——设置超链接的样式示例
  9. 中文领域最详细的Python版CUDA入门教程
  10. 创意搜狗输入法设计理念(转2008-02-04 21:14)