本文主要普及一下微信公众号相关基本知识以及开发者模式的开启。



一、微信公众号分类

微信公众号主要分为三类。订阅号、服务号、企业号。
首先看看官方对于它们的说明
(1)
订阅号: 为媒体和个人提供一种新的信息传播方式,主要功能是在微信侧给用户传达资讯;(功能类似报纸杂志,提供新闻信息或娱乐趣事)
适用人群: 个人、媒体、企业、政府或其他组织。
群发次数: 订阅号(认证用户、非认证用户)1天内可群发1条消息。

温馨提示:
1、如果想用公众平台简单发发消息,做宣传推广服务,建议可选择订阅号;
2、如果想用公众平台进行商品销售,建议可选择服务号,后续可认证再申请微信支付商户;

(2)
服务号:为企业和组织提供更强大的业务服务与用户管理能力,主要偏向服务类交互(功能类似12315,114,银行,提供绑定信息,服务交互的);
适用人群:媒体、企业、政府或其他组织。
群发次数:服务号1个月(按自然月)内可发送4条群发消息。

温馨提示:
1、如果想用公众平台简单发发消息,做宣传推广服务,建议可选择订阅号;
2、如果想用公众平台进行商品销售,建议可选择服务号,后续可认证再申请微信支付商户。

(3)
企业号:本文暂不作介绍。


二、订阅号、服务号的区别

1、订阅号:主要偏于为用户传达资讯(类似报纸杂志),认证前后都是每天只可以群发一条消息;
2、服务号:主要偏于服务交互(类似银行,114,提供服务查询),认证前后都是每个月可群发4条消息;


其中认证的服务号能拥有九大高级接口的权限,以下为九大高级接口简单介绍。

九大高级接口
1. 语音识别
功能描述:通过语音识别接口,用户发送的语音,将同时给出语音识别出的文本内容。
实用意义:第三方可以调用微信自主研发的语音识别技术。意味着微信向第三方开放语音识别技术,直接调用语音识别接口,对语音识别结果进行互动或根据识别的内容进行自动答复。
2. 客服接口
功能描述:通过客服接口,公众号可以在用户发送过消息的 12 小时内,向用户回复消息。
实用意义:以前公众帐号跟订户只能被动响应,比如用户触发了需求,如发送关键字给公众帐号,后者才可以与用户对话。如今,如果订户跟公众帐号对话过一次,公众帐号就可以在 12 个小时内持续给用户下发消息。这提高了公众帐号发送消息的能力。
3. OAuth 2.0 网页授权
功能描述:通过网页授权接口,公众号可以请求用户授权。
实用意义:这就像微博、QQ的帐号授权功能。这意味着微信帐号正式成为一个帐号系统。
4. 生成带参数二维码
功能描述:通过该接口,公众号可以获得一系列携带不同参数的二维码,在用户扫描关注公众号后,公众号可以根据参数分析各二维码的效果。
实用意义:举例来说,以前放一个二维码在网站或者线下的广告牌,效果都是一样的:获得关注用户。现在可以分析订户来自哪里。开发者可以在链接里设置特殊信息,做更多的数据分析。这一功能也可以用来做帐号绑定,
5. 获取用户地理位置
功能描述:通过该接口,公众号能够获得用户进入公众号会话时的地理位置。
实用意义:两种情况可以获得用户地理位置:一是与公众帐号“会话时”,二是在会话界面“每隔 5 秒”。在用户同意下,这就可以做微信导航或地理围栏方面的服务。
6. 获取用户基本信息
功能描述:通过该接口,公众号可以根据加密后的用户 OpenID,获取用户基础信息,包括头像、名称、性别、地区。
实用意义:以前这是一个非常高的权限。获得用户基本信息后,可以做 CRM 管理后台,方便商家管理用户。
7. 获取关注者列表
功能描述:通过该接口,用户可以获取所有关注者的 OpenID
实用意义:以前不能知道有多少人关注你,是谁在关注你。如今你可以知道谁在关注你。
8. 用户分组接口
功能描述:通过分组接口,公众号可以在后台为用户移动分组,或创建、修改分组。
实用意义:可以对用户进行分组,比如乐思享组织一场“听众交流会”,现场来了 1000 人,可以把它归为一组,后续的活动花絮照片只发给这 1000 人。这对于商家来说,就是一个 VIP 会员管理,是 CRM 管理平台。
9. 上传下载多媒体文件
功能描述:通过该接口公众号可以在需要时在微信服务器上传下载多媒体文件。
实用意义:之前微信公众账号也可以下发音乐文件,现在则可以下发图片、视频。比如搞笑视频,上传到微信公众账号后台(目前只支持通过链接发布视频,腾讯视频的网址链接开放),可以向听众推送出来,这原来是视频网站的一个业务。

此外,认证服务号能够调用发送模版消息接口。
模板消息接口:模板消息仅用于公众号向用户发送重要的服务通知,只能用于符合其要求的服务场景中,如信用卡刷卡通知,商品购买成功通知等。不支持广告等营销类消息以及其它所有可能对用户造成骚扰的消息。
以下为一个模版消息示例。



三、微信公众号开发模式

1.编辑模式和开发模式
编辑模式:主要针对非编程人员及信息发布类公众帐号使用。开启该模式后,可以方便地通过界面配置“自定义菜单”和“自动回复的消息”。
开发模式:主要针对具备开发能力的人使用。开启该模式后,能够使用微信公众平台开放的接口,通过编程方式实现自定义菜单的创建、用户消息的接收/处理/响应。

编辑模式和开发模式不能同时开启。

编辑模式示例。

2.开发模式
开启开发模式的准备:
(1)一个公众号;
(2)一台公网能访问的服务器;

开发模式的开启步骤
(1)填写服务器配置
登录微信公众平台官网后,在公众平台官网的开发-基本设置页面,勾选协议成为开发者,点击“修改配置”按钮,填写服务器地址(URL)、Token和EncodingAESKey,其中URL是开发者用来接收微信消息和事件的接口URL。Token可由开发者可以任意填写,用作生成签名(该Token会和接口URL中包含的Token进行比对,从而验证安全性)。EncodingAESKey由开发者手动填写或随机生成,将用作消息体加解密密钥。

这里的url只能以http://或https://开头,分别只支持80和443端口。

(2)验证消息的确来自微信服务器
开发者提交信息后,微信服务器将发送GET请求到填写的服务器地址URL上,GET请求携带参数如下所示:
参数 描述
signature 微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、 nonce参数。
timestamp 时间戳
nonce 随机数
echostr 随机字符串

开发者通过检验signature对请求进行校验(下面有校验方式)。若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败。加密/校验流程如下:
1)将token、timestamp、nonce三个参数进行字典序排序
2)将三个参数字符串拼接成一个字符串进行sha1加密
3)开发者获得加密后的字符串可与signature对比,标识该请求来源于微信

以下为Java实现的简单的微信消息验证:

public class WeixinServlet extends HttpServlet {  /** * 确认请求来自微信服务器 */  public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {  // 微信加密签名  String signature = request.getParameter("signature");  // 时间戳  String timestamp = request.getParameter("timestamp");  // 随机数  String nonce = request.getParameter("nonce");  // 随机字符串  String echostr = request.getParameter("echostr");  PrintWriter out = response.getWriter();  // 通过检验signature对请求进行校验,若校验成功则原样返回echostr,表示接入成功,否则接入失败  if (SignUtil.checkSignature(signature, timestamp, nonce)) {  out.print(echostr);  }  out.close();  out = null;  }  /** * 处理微信服务器发来的消息 */  public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {  }  } public class SignUtil {  // 与接口配置信息中的Token要一致  private static String token = "ylpt";  /** * 验证签名 *  * @param signature * @param timestamp * @param nonce * @return */  public static boolean checkSignature(String signature, String timestamp, String nonce) {  String[] arr = new String[] { token, timestamp, nonce };  // 将token、timestamp、nonce三个参数进行字典序排序  Arrays.sort(arr);  StringBuilder content = new StringBuilder();  for (int i = 0; i < arr.length; i++) {  content.append(arr[i]);  }  MessageDigest md = null;  String tmpStr = null;  try {  md = MessageDigest.getInstance("SHA-1");  // 将三个参数字符串拼接成一个字符串进行sha1加密  byte[] digest = md.digest(content.toString().getBytes());  tmpStr = byteToStr(digest);  } catch (NoSuchAlgorithmException e) {  e.printStackTrace();  }  content = null;  // 将sha1加密后的字符串可与signature对比,标识该请求来源于微信  return tmpStr != null ? tmpStr.equals(signature.toUpperCase()) : false;  }  /** * 将字节数组转换为十六进制字符串 *  * @param byteArray * @return */  private static String byteToStr(byte[] byteArray) {  String strDigest = "";  for (int i = 0; i < byteArray.length; i++) {  strDigest += byteToHexStr(byteArray[i]);  }  return strDigest;  }  /** * 将字节转换为十六进制字符串 *  * @param mByte * @return */  private static String byteToHexStr(byte mByte) {  char[] Digit = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };  char[] tempArr = new char[2];  tempArr[0] = Digit[(mByte >>> 4) & 0X0F];  tempArr[1] = Digit[mByte & 0X0F];  String s = new String(tempArr);  return s;  }
}   


结尾附上微信公众平台开发者文档地址:
http://mp.weixin.qq.com/wiki

微信公众号(01)---相关基础知识相关推荐

  1. 微信公众号--授权相关

    1.近期在做微信公众号相关授权,借此机会记录一下,以备后续 相关登录流程,请参考微信官方文档: 1.测试接口号申请 1.首先验证成功开发者 /*** @author: cc* @date: 2020/ ...

  2. 微信公众号“链接”与“超链接”知识大全

    胖友们,早上好! 都入冬了,却没想到"生活有波动,网络大爆炸",但无论事情如何,请胖友们一定要"稳住,我们能赢"!不信谣.不传谣.不跟风.不捏造!让子弹飞一会, ...

  3. 微信公众号开发相关功能

    1.controller代码 @Controller @RequestMapping("/wechat/platform") public class WechatControll ...

  4. 微信公众号01: ase实现access_token的存储和被动刷新

    一 知识点 1.1 memcached服务Memcached 是一个高性能的分布式内存对象缓存系统,可以用于动态 Web 应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而 ...

  5. 『总结』微信公众号开发相关问题

    公众号问题列表 1. 软键盘遮住输入框的问题:ios键盘被挡住(fixed定位或者absolute定位) 方法1: <script> window.onload = function(){ ...

  6. 基于SENPARC盛派微信sdk的.net WebService微信公众号的相关开发(包含从零开始本机测试环境搭建//token验证//获取微信推送消息//向微信推送消息)

    前言: 由于微信公众号正式号,一直在被使用,所以在研发的时候,本机测试环境,就显得非常重要. 而且在自己闲暇之余,可以自己尝试更深程度的微信公众号的研发工作. 1.首先,必要的网站 http://sd ...

  7. 微信公众号开发相关问题

    官方文档 开发者文档 在线接口调试工具 公众平台测试帐号 http://mp.weixin.qq.com/debug/cgi-bin/sandboxinfo?action=showinfo&t ...

  8. 微信公众号-开发相关信息了解

    最近想了解微信小程序开发流程,在知乎里面看到了这篇文章,供大家参考 作者:初雪 链接:https://www.zhihu.com/question/50907897/answer/128494332 ...

  9. 微信公众号python_wechat: 微信 Python SDK,支持微信公众号以及企业号的上行消息及 OAuth 接口...

    微信公众号Python-SDK 本SDK支持微信公众号以及企业号的上行消息及OAuth接口.本文档及SDK假设使用者已经具备微信公众号开发的基础知识,及有能力通过微信公众号.企业号的文档来查找相关的接 ...

最新文章

  1. 在Ubuntu 14.04 64bit上生成ATS本地离线文档
  2. 淮海工学院linux实验报告三,作业三 实验报告
  3. OpenCV —数据持久化: FileStorage类的数据存取操作与示例
  4. java Base64转码传图到C#
  5. 1224 哥德巴赫猜想(2)
  6. 深度解读OpenYurt:从边缘自治看YurtHub的扩展能力
  7. Nginx基本数据结构之ngx_list_t
  8. Linux关闭开启防火墙命令
  9. l380废墨收集垫已到使用寿命_湖北土工网垫
  10. UVA - 11729 Commando War
  11. 资源下载源码极致cms精纺资源网的模板整站源码
  12. 对啊网初级会计2-1会计基础1
  13. VS2010启动后鼠标失灵解决方法
  14. web文件上传-0x00漏洞
  15. Linux 系统下各种包的安装方法
  16. 《伟大的小细节:互联网产品设计中的微创新思维》——3.6 基于当前场景的前因后果推演...
  17. 什么是云仓一件代发?电商物流云仓,新疆云仓
  18. 串口的使用-ttyUSB0设备
  19. BI开发流程和ETL介绍
  20. gabor 幅值域 matlab,基于全局二值模式的特征提取方法及其应用

热门文章

  1. python输入姓名专业班级_Python — 学生成绩管理
  2. 毕业论文关键字HTML5,论文关键词一般是几个?
  3. 新生必备清单:不想成为虚度青春的“小透明”,手机应该怎样选?
  4. Infludb概念与架构
  5. switch 方法 计算器
  6. QQ会员的“十元”生意逻辑:人以群分
  7. 基于改进EAST算法的文本检测
  8. 2021Java就业前景如何?值得去学习吗?
  9. 剑指offer77:链表排序(归并排序)
  10. IOS手机侧滑返回与Vue过渡动画冲突