一 微信开发

微信开发

概念

平台

  1. 微信公众号平台
    1. 微信公众平台用于管理、开放微信公众号(包括订阅号、服务号、企业号),简单的说就是微信公众号的后台运营、管理系统
    2. 仅对单一公众号提供服务
  2. 微信开放平台
    1. 主要面对移动应用/网站应用开发者,为其提供微信登录、分享、支付等相关权限和服务。微信开放平台还提供了数据统计功能,用于开发者统计接入应用的登录、分享等数据情况。
    2. 可以实现多公众号和移动用户间的用户共通(如绑定到同一开放平台来获取unionid)

公众号

  1. 由微信公众号平台进行管理

  2. 分为订阅号,服务号和 企业号以及小程序(区别

    1. 订阅号
      1. 订阅号的主要功能是每天可以群发信息,具有信息发布与传播的能力,适合个人与媒体注册,侧重于消息
    2. 服务号
      1. 具有用户管理和提供业务服务的能力,适合企业与组织注册,侧重与服务
    3. 企业号
      1. 面向企业,企业内部沟通使用
    4. 小程序
      1. 用户可便捷地获取服务,无需安装或下载即可使用,可以便捷的使用
  3. 公众号接口

    1. 公众号所提供的功能本质为微信本身实现,当外部需要实现某些功能,如发送消息等,需要将数据传递到微信,然后微信再将对应的数据发送到到对应的用户。此过程,通过访问微信向外暴露的接口来实现
    2. 公众号提供的功能通过访问相关的接口来实现,如获取tocken,二维码等
    3. 接口的访问存在一定的限额,但大部分接口没有限制
    4. 微信公众号接口必须以http://或https://开头,分别支持80端口和443端口。并非单独的80
  4. OpenID

    1. 用于识别用户,每个用户针对每个公众号会产生一个安全的OpenID,可以唯一的识别用户
    2. 是用户微信号加密后产生的结果
  5. 消息会话

    1. 公众号是以微信用户的一个联系人形式存在的,消息会话是公众号与用户交互的基础
    2. 群发消息:公众号可以以一定频次(订阅号为每天1次,服务号为每月4次),向用户群发消息,包括文字消息、图文消息、图片、视频、语音等。
    3. 被动回复消息:在用户给公众号发消息后,微信服务器会将消息发到开发者预先在开发者中心设置的服务器地址(开发者需要进行消息真实性验证),公众号可以在5秒内做出回复,可以回复一个消息,也可以回复命令告诉微信服务器这条消息暂不回复。被动回复消息可以设置加密(在公众平台官网的开发者中心处设置,设置后,按照消息加解密文档来进行处理。其他3种消息的调用因为是API调用而不是对请求的返回,所以不需要加解密)
    4. 客服消息:在用户给公众号发消息后的48小时内,公众号可以给用户发送不限数量的消息,主要用于客服场景。用户的行为会触发事件推送,某些事件推送是支持公众号据此发送客服消息的,详见微信推送消息与事件说明文档。
    5. 模板消息:在需要对用户发送服务通知(如刷卡提醒、服务预约成功通知等)时,公众号可以用特定内容模板,主动向用户发送消息。(不存在限额)
  6. 公众号内网页

    1. 可以使公众号通过网页的方式来提供服务
    2. 网页授权获取用户基本信息:通过该接口,可以获取用户的基本信息(获取用户的OpenID是无需用户同意的,获取用户的基本信息则需用户同意)
    3. 微信JS-SDK:是开发者在网页上通过JavaScript代码使用微信原生功能的工具包,开发者可以使用它在网页上录制和播放微信语音、监听微信分享、上传手机本地图片、拍照等许多能力
  7. 公众号本地服务器(开发者)

    1. 用于对接微信服务器,通过本地服务器来调用微信接口以实现相关功能
    2. 初次设置时,存在一个本地服务器与微信服务器对接的过程
  8. 微信服务器

    1. 微信端服务,所有的功能实现均通过该服务器,本地服务器通过该服务器来进行操作
    2. 向外暴露对应的接口来实现相应的功能
    3. 可以通过getcallbackip和get_api_domain_ip获取微信服务器的ip以及所调用接口的ip地址
  9. 接口域名

    1. 公众平台的域名,存在多个,可以自主选择,也可将选择方式交给微信
    2. 具体具体
  10. access_token

    1. 通过 AppID和AppSecret生成,access_token是公众号的全局唯一接口调用凭据,公众号调用各接口时都需使用access_token
    2. access_token的存储至少要保留512个字符空间。 access_token的有效期目前为2个小时,需定时刷新,重复获取将导致上次获取的access_token失效。
    3. 过期时间会通过expire_in参数返回
    4. tocken的刷新过程中,会保证五分钟的新旧tocken可用
    5. tocken的有效期可能会调整
    6. 在使用时,应该提供被动刷新access_token的接口,这样便于业务服务器在API调用获知access_token已超时的情况下,可以触发access_token的刷新流程。
  11. 接口报警

    1. 微信服务器向开发者推送消息失败次数达到预定阈值时,会将报警消息发送到指定微信报警群中(设置方式:公众平台->开发-运维中心->接口报警)
    2. 此情况可能存在的情况为微信服务器与本地服务器的交互出现了问题,会触发该报警并将消息发送到指定的微信群中
  12. 微信菜单

    1. 分为以及菜单和二级菜单,仅分两级,且名称长度存在限制;菜单接口按钮存在多种类型,如click,view,小程序等等等;点击类型与消息对应,可以设置具体的key,还可以触发网页,扫码,发送位置,发送图片,接受开发者在平台中配置的永久素材等,拍照等功能
    2. 定义菜单最多包括3个一级菜单,每个一级菜单最多包含5个二级菜单。
    3. 一级菜单最多4个汉字,二级菜单最多7个汉字,多出来的部分将会以“…”代替。
    4. 创建自定义菜单后,菜单的刷新策略是,在用户进入公众号会话页或公众号profile页时,如果发现上一次拉取菜单的请求在5分钟以前,就会拉取一下菜单,如果菜单有更新,就会刷新客户端的菜单。测试时可以尝试取消关注公众账号后再次关注,则可以看到创建后的效果。​
    5. 用户点击菜单后,本地服务器会收到推送(弹出子菜单不会推送)详细
    6. 存在个性化菜单,根据一定的条件,如用户标签,年龄,地区(由大到小进行筛选,存在省,则国家必须存在),对不同的用户显示不同的菜单
    7. 个性化菜单的更新是会被覆盖的。 例如公众号先后发布了默认菜单,个性化菜单1,个性化菜单2,个性化菜单3。那么当用户进入公众号页面时,将从个性化菜单3开始匹配,如果个性化菜单3匹配成功,则直接返回个性化菜单3,否则继续尝试匹配个性化菜单2,直到成功匹配到一个菜单。 根据上述匹配规则,为了避免菜单生效时间的混淆,决定不予提供个性化菜单编辑API,开发者需要更新菜单时,需将完整配置重新发布一轮
    8. 普通公众号的个性化菜单的新增接口每日限制次数为2000次,删除接口也是2000次,测试个性化菜单匹配结果接口为20000次
  13. 消息

    1. 用户向微信公众号所发送的消息,如文本,图片,音频等,微信服务器会将这些数据通过post 的方式发送到本地服务器,格式为xml
    2. 微信服务器在五秒内收不到响应时会断开连接,并重新发送,可以通过xml中msgid参数进行排重
    3. 假如服务器无法保证在五秒内处理并回复,可以直接回复空串(直接空)或者sucess,微信服务器不会对此作任何处理,并且不会发起重试
    4. 若需要在五秒内需要回复,则可配置被动回复,回复内容可以事先准备,格式为xml类型,同时,为了增加安全性,此类消息可以加密,
    5. 本地服务器向微信服务器返回消息中的图片,音频等资源要上传到临时素材或者永久素材,消息中仅使用对应的资源id
  14. 事件推送

    1. 微信用户和公众号产生交互的过程中,用户的某些操作会使得微信服务器通过事件推送的形式通知到开发者在开发者中心处设置的服务器地址,从而开发者可以获取到该信息。其中,某些事件推送在发生后,是允许开发者回复用户的,某些则不允许
    2. 一般的事件为关注/取消关注,扫描带参数的二维码,等详细
    3. 在触发事件后,微信服务器会将相应的信息发送到本地服务器中,本地服务器可以做出一定的处理
  15. 消息加密和解密

    1. 为了增加安全性所设置,微信服务器向本地服务器所发送的消息为加密后的数据,本地回复消息时也需要进行加密,加密的密钥在后台配置,是否启用该加密过程也在后台配置
  16. 客服消息:在用户和公众号产生特定的交互事件之后,微信回将数据传递给公众号,公众号在一段时间内(目前48小时),通过客服账号,调用客服接口,来和用户进行交互动作,一般用与人工消息处理环节

  17. 素材:存在一些需要使用多媒体文件或者消息的场景时,将对应的素材上传到微信服务器端,对这些数据的调用通过其media_id来使用

    1. 临时素材:存在一定的时间,一般保留3天
    2. 永久素材:此类素材可永久使用 图文消息素材、图片素材上限为100000,其他类型为1000 ,大小存在一定的限制

概念过程

本地服务器接入(成为开发者)

  1. 填写服务器地址(URL)、Token和EncodingAESKey,
    1. URL是开发者用来接收微信消息和事件的接口URL。
    2. Token可由开发者可以任意填写,用作生成签名(该Token会和接口URL中包含的Token进行比对,从而验证安全性)
    3. EncodingAESKey由开发者手动填写或随机生成,将用作消息体加解密密钥
  2. 选择消息加解密方式:明文模式、兼容模式和安全模式
  3. 信息提交后,微信服务器会发送get请求到填写的Url中
  4. 请求参数
参数描述
signature微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。
timestamp时间戳
nonce随机数
echostr随机字符串
  1. 校验请求是否来自为微信
    1. 将token、timestamp、nonce三个参数进行字典序排序
    2. 将三个参数字符串拼接成一个字符串进行sha1加密
    3. 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信
    4. 认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败

获取Access_tocken

  1. 获取AppID和AppSecret。AppID和AppSecret可在“微信公众平台-开发-基本配置”页中获得(需要已经成为开发者,且帐号没有异常状态)。
  2. 将服务器的ip添加到公众平台配置中的白名单中, 小程序无需配置IP白名单。
  3. 发送get请求,添加对应的参数
  4. https 请求方式: GET https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET,其中参数grant_type=client_credential为固定值

Access_tocken 的使用

1. 中控服务器定时(建议1小时)调用微信api,刷新access_token,将新的access_token 存入mysql(或其他存储),
2. 其他工作服务器每次调用微信api时从mysql(或其他存储)获取access_token,并可在内存缓存一段时间(建议1分钟)。
3. 向缓存中存储tocken时,需要存储其过期时间
4. 公众平台会保证在access_token刷新后,旧的access_token在5分钟内仍能使用,以确保第三方在更新access_token时不会发生第三方调用微信api的失败。
5. 获取tocken时,从缓存中获取,判断是否超时,若超时,则刷新tocken;若缓存中不存在,则从数据库中获取,且判断是否超时,若超时,则刷新tocken
6. 刷新tocken时,更新数据库内容,并将数据设置到缓存中,并返回对应的tocken
7. 额外开启定时任务,从数据库查询出tocken,判段是否超时,然后执行刷新操作(同步更新数据库和缓存中的tocken)
8. 经常会存在tocken的失效问题,一般为没有使用统一的中控服务器来获取tocken,多个业务端同时获取tocken导致tocken失效

菜单

  1. 增加

    1. http请求方式:POST(请使用https协议) https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKENpost请求中携带json数据,[详情](https://developers.weixin.qq.com/doc/offiaccount/Custom_Menus/Creating_Custom-Defined_Menu.html)
    2. 通过后台页面进行菜单的配置
    3. 个性化菜单
      1. https://api.weixin.qq.com/cgi-bin/menu/addconditional?access_token=ACCESS_TOKEN,post方式,传入具体的菜单信息
      2. matchrule为匹配规则
      3. matchrule共六个字段,均可为空,但不能全部为空,至少要有一个匹配信息是不为空的。 country、province、city组成地区信息,将按照country、province、city的顺序进行验证,要符合地区信息表的内容。地区信息从大到小验证,小的可以不填,即若填写了省份信息,则国家信息也必填并且匹配,城市信息可以不填。 例如 “中国 广东省 广州市”、“中国 广东省”都是合法的地域信息,而“中国 广州市”则不合法,因为填写了城市信息但没有填写省份信息。
  2. 查询

    1. 正常查询
      1. http请求方式: GET(请使用https协议)https://api.weixin.qq.com/cgi-bin/get_current_selfmenu_info?access_token=ACCESS_TOKEN
      2. 返回通过api设定的菜单或者通过网站功能设置的菜单
      3. 本接口中返回的图片/语音/视频为临时素材(临时素材每次获取都不同,3天内有效,通过素材管理-获取临时素材接口来获取这些素材),本接口返回的图文消息为永久素材素材(通过素材管理-获取永久素材接口来获取这些素材)。
    2. 自定义菜单的查询
      1. 进返回自定义菜单和个性化菜单,不返回通过网站设置的菜单
      2. http请求方式:GET https://api.weixin.qq.com/cgi-bin/menu/get?access_token=ACCESS_TOKEN
  3. 删除

    1. http请求方式:GET https://api.weixin.qq.com/cgi-bin/menu/delete?access_token=ACCESS_TOKEN
    2. 会删除自定义菜单, 当菜单为个性化菜单时,调用此接口会删除默认菜单及全部个性化菜单。
    3. 个性化菜单
      1. https://api.weixin.qq.com/cgi-bin/menu/delconditional?access_token=ACCESS_TOKEN,post方式,在请求体中指定菜单的id(可以从查询接口中获取)

群发消息

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值