第三方平台代微信公众号开发流程

一:准备工作

㈠ 微信开放平台相关

申请微信开放平台账号后,需前往微信开放平台,创建第三方平台,填写开发相关配置:

  1. 填写授权流程相关配置:

注意事项:

⑴ 授权发起页域名:为项目开发使用域名,调用公众号二维码授权页时,必须由本域名下页面发起,授权页会对调用它的页面请求信息Request Headers中的Referer内容进行校验,判断是否与微信第三方平台上填写的配置一致。
⑵  授权测试公众号列表:如未填写,在第三方平台扫码授权时,微信公众号无法获取公众号信息,微信小程序无法显示需要授权的小程序。

1.2 填写授权后实现业务相关配置:

注意事项:
⑴ 消息校验Token和消息加解密Key:消息推送、事件推送时,验证消息体的正确性,及对消息加解密,具体可见微信开放平台开发资源文档的消息加解密说明,可直接获取示例代码。
⑵ 公众号开发域名:校验文件需放到域名根目录下,①项目本地编译器启动,校验文件放到项目根目录下;②项目部署服务器启动,校验文件放到域名对应服务器的根目录下。所填写的域名必须有公网访问权限。

1.3 开发服务器IP白名单

服务器IP有内外网之分时,此处填写的为外网IP。可通过首次部署后,调用微信API查看返回日志信息获取。

1.4 全网发布

第三方开发者在使用授权测试公众号列表中所填写的测试白名单中的公众号自行测试完成后,可以申请全网发布,并等待审核通过。审核通过后,第三方平台可以面向所有符合要求的公众号进行登录授权。
为了确保经过全网发布的第三方平台都是可用的,微信服务器会自动对提交全网发布的第三方平台进行基础消息逻辑检测,以确保第三方平台稳定。具体检测过程说明请见 【全网发布接入检测说明】

㈡ 服务器相关:

2.1 服务器权限:

服务器访问有网关限制时,与微信服务器互访需做以下申请:

⑴ 申请访问微信服务器权限:
可根据微信公众号API文档,申请对域名api.weixin.qq.com,mp.weixin.qq.com的访问权限。

⑵ 申请微信服务器回访权限:
①可查看微信公众平台技术文档,获取微信服务器IP地址接口文档,通过该接口获得微信服务器IP地址列表或者IP网段信息,申请获取到的IP列表可回访通过。

② 申请腾讯云服务器,将项目部署在其上。

2.2 服务器jar包升级:
  由于需要对微信消息加解密,使用JDK原有jar包,出现异常:
java.security.InvalidKeyException:illegal Key Size,解决方案在官方网站下载JCE无限制权限策略文件(JDK7的下载地址

下载后解压,可以看到local_policy.jar和US_export_policy.jar以及readme.txt,如果安装了JRE,将两个jar文件放到%JRE_HOME%\lib\security目录下覆盖原来的文件;如果安装了JDK,将两个jar文件放到%JDK_HOME%\jre\lib\security目录下覆盖原来文件

二:授权流程

公众平台第三方平台是为了让公众号或小程序运营者,在面向垂直行业需求时,可以一键授权给第三方平台(并且可以同时授权给多家第三方),通过第三方平台来完成业务,具体授权流程如图:

步骤1:第三方平台方获取预授权码(pre_auth_code)

获取预授权码,配置入调用授权二维码页面路径中。
步骤2:引入用户进入授权页

引导页面调起授权二维码页面,展示授权二维码。

步骤3:用户确认并同意登录授权给第三方平台方

授权用户使用微信客户端扫码后,点击同意授权。

步骤4:授权后回调URI,得到授权码(authorization_code)和过期时间

可通过回调URI设置使用第三方平台的授权用户信息,及获取公众号基础信息。

步骤5:利用授权码调用公众号或小程序的相关API

获取维护公众号或小程序接口调用的令牌authorizer_access_token。

三:公众号或小程序接口调用令牌维护

授权用户一键授权公众号后,后续相关功能开发(即调用微信公众号API)均会使用接口调用令牌authorizer_access_token。根据微信技术文档上说明,此token是2小时刷新一次,开发者需要自行进行token的缓存,避免token的获取次数达到每日的限定额度,所以维护token的时效性至关重要。

以下为令牌维护的一种实现方案:
⑴ 用户进行一键授权公众号,通过授权信息及调用获取token API获取token。

⑵ 将token放入Redis缓存和保存MySQL数据库持久化,设置token缓存有效期为1.5h。

⑶ 通过定时任务,每5min判断一次缓存数据是否过期,未过期不处理,过期调用获取token API更新令牌。

⑷ 如果token缓存数据过期,有新的请求需要token,查询缓存无果,可从数据库获取,待下次定时到达时,判断缓存过期,重新调用获取token API获取,并补充入缓存和数据库。

示例图如下:

四:开发过程中遇到的问题

1.在接收到微信服务器的消息及事件推送时,如何正确回复success?
    微信技术开发文档说明如下:代开发公众号服务器,在收到微信服务器的消息及事件推送时,需在五秒内回复“success”或者“”(空串)。假如服务器无法保证在五秒内处理回复,则必须先回复“success”或者“”(空串),否则微信后台会发起三次重试。三次重试后,依旧没有及时回复任何内容,系统自动在粉丝会话界面出现错误提示“该公众号暂时无法提供服务,请稍后再试”。

①五秒内可回复:

②五秒内无法回复:

2.如何实现授权用户连续扫码授权?

调用授权二维码页面时,请求路径需要预授权码入参,微信技术文档显示,预授权码有效期10min。实际开发发现,如果同一预授权码,两个授权用户发起授权页扫码,先扫码确认的用户将先使用这个预授权码,导致后一用户将无法正常授权。解决方案:保证每次调起授权页的预授权码必须是新的

3.如何实现微信公众号群发剩余次数与微信公众MP后台保持一致?

在用户使用第三方平台时,对于微信公众号的群发功能,既可能需要在第三方平台使用,也可能需要在微信公众MP后台使用。但是根据微信群发API文档,在公众平台网站上,为服务号提供每月(自然月)4条的群发权限。微信公众MP后台可展示群发剩余次数,次数用尽,群发按钮置灰,如何做到第三方平台群发剩余次数与微信公众MP后台保持同步?

微信群发API文档显示,微信公众号群发有两种类型:①根据标签进行群发,②根据OpenID列表群发。微信公众MP后台,使用的是根据标签群发类型。在调用群发API接口时,提交群发消息给微信服务器成功后,会返回msg_id字段(消息发送任务的ID),群发消息结果以事件推送形式通知开发者服务器,推送的消息内容中亦含有msg_id字段,与提交结果返回的msg_id字段值一致。一旦公众号授权到第三方平台后,在微信公众MP后台发送的群发消息,群发消息结果也会以事件推送形式通知开发者服务器,内容也包含msg_id字段。

解决方案:第三方平台群发功能使用根据标签群发类型,可以记录第三方平台公众号群发提交的msg_id与对应公众号的唯一标识,用msg_id做为判断条件,计算第三方平台群发剩余次数,以便展示。

流程图:

4.如何实现同一篇图文消息,避免重复上传微信服务器?

上传到微信服务器的图文消息,会作为永久素材展示在微信公众MP后台的素材库中,在使用同一篇图文消息,进行各类型消息发送时(群发消息,客服消息),必须保证只被上传一次。发送各类消息前,需将图文消息上传到微信永久素材,获取此条图文素材对应的media_id,然后使用media_id进行消息发送。即同一公众号号,同一篇图文,上传获取一次media_id(不同公众号对应同一篇图文,media_id不同)。

解决方案:第三方平台创建图文消息保存时,对图文的标题、作者、摘要、内容、封面图片、原文地址字段做MD5加密,得到md5值,与图文id保存入素材表。上传图文获取到media_id后,将公众号唯一标识appid,图文id,md5值,media_id对应保存入中间表。待同一篇图文再次上传时,通过appid和图文id查询中间表,得到md5值,与上传图文的md5值对比,相同使用原有media_id,不相同重新上传获取media_id并更改中间表。

流程图:

5.上传图文素材时,如何准确的将图文内容中图片替换成微信域名下图片?

在图文编辑阶段,用户很可能直接从某个网页直接复制一些可用的图文,复制的图文在本平台编辑器中回显时,由于编辑器兼容性问题,可能显示不正常。

为了保证复制后的图文显示正常,在图文复制后,会将图文中的图片链接进行统一获取,上传本平台文件资源服务器,转换成本平台域名下的图片显示,并以字段储存。在调用微信上传图文素材是,可直接遍历字段中的链接,获取到微信域名下的链接后,替换图文中的原有路径。

6.如何在第三方平台页面展示微信服务器推送的图片、语音消息?

图片:微信服务器推送用户发送的语音消息到第三方平台,推送的消息中包含PicUrl图片链接字段,此链接是微信域名下的链接,微信有做图片防盗处理,直接使用在第三方平台页面无法正常展示。用此字段的值,上传本平台文件资源服务器,转换成本平台域名下链接,可在页面正常展示。

语音:微信服务器推送用户发送的语音消息到第三方平台,推送的消息中包含MediaId语音消息媒体id字段,用此字段的值,调用微信获取临时素材API接口获取源文件,上传本平台文件资源服务器,转换成本平台域名下链接,可在页面正常展示。

第三方平台代微信公众号开发相关推荐

  1. 公众号第三方平台和微信公众号平台的区别与开发步骤

    我们知道通过微信公众号平台的开放API可以实现用户个性制定制的功能,我们又知道使用开放API时必须知道AppID(应用ID)和AppSecret(应用密钥),而且还要配置URL(服务器地址).Toke ...

  2. 网络架构、云平台和微信公众号开发接入--基于嵌入式工程师的视觉

    云与后端相关的技术似乎并不属于嵌入式和物联智能硬件开发工程师的范畴,但是嵌入式开发工程师有必要认识成熟的网络架构和相关的云技术,以拓展自己在系统架构方面的视野.大数据分析是物联网背后的核心价值,物联智 ...

  3. 微信公众号开发C#系列-12、微信前端开发利器:WeUI

    本文目录 1.前言 2.WeUI基本介绍 2.1 WeUI概述 2.2 为什么选择jQuery WeUI 3.jQuery WeUI基本用法 4.其他基础组件展示 4.1.switch开关 4.2.文 ...

  4. 微信公众号开发系列-玩转微信开发-目录汇总

    引言 最遗憾的不是把理想丢在路上,而是理想从未上路. 每一个将想法变成现实的人,都值得称赞和学习.致正在奔跑的您! 在现在这个无处不在的互联网背景下,各种应用已不再仅仅局限于网页或桌面应用了,IOS. ...

  5. 微信公众号开发系列-13、基于RDIFramework.NET框架整合微信开发应用效果展示

    微信公众号开发系列-13.基于RDIFramework.NET框架整合微信开发应用效果展示 1.前言 通过前面一系列文章的学习,我们对微信公众号开发已经有了一个比较深入和全面的了解. 微信公众号开发为 ...

  6. 微信公众号三方平台开发【代微信公众号接收消息事件并响应】

    今天要讲的是代微信公众号接收消息并进行回复,这里要用到的就是咱们之前在微信公众号三方平台开发[帐号注册.平台创建]里写到的"公众号消息与事件接收URL",在接收的目标方法里,我们首 ...

  7. 微信公众号开发之微信公众平台与公众号第三方平台区别

    微信公众号开发分为微信公众平台和公众号第三方平台. 首先需要一个认证服务号,然后在设置,基本配置里面配置公众号开发信息和服务器配置. 这是我们会得到开发者ID(AppID),开发者密码(AppSecr ...

  8. 微信公众号开发(1)--微信公众平台与后台服务器

    一.前言 今天开始整理一下前面两个月关于微信公众号开发的学习,鉴于本人是边学习边总结,故错误与不足之处还望包涵.鉴于很多例如购买服务器.搭建服务器等大条的操作就不展开叙述了. 本博文主要包涵以下内容: ...

  9. 微信公众号开发之——第三方自动回复机器人接入

    开发微信订阅号,服务号的朋友都知道,在微信公众号开发中有一个自动回复的消息功能,一般来说,自动回复的 内容需要我们自定义,而且每次返回的内容基本没什么特别的变化,如果要根据提问的内容返回不同的消息,那 ...

  10. 微信公众号开发之实现自定义微信公众号菜单和跳转第三方网页

    自定义菜单创建接口: http请求方式:POST(请使用https协议) https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCE ...

最新文章

  1. EntityFramework中实体类到表名的批量映射
  2. 六 运行级别调整增加启动项
  3. JVM - 基本类型的包装类和对象池
  4. 第三次学JAVA再学不好就吃翔(part93)--LinkedHashMap
  5. Sharepoint学习笔记—ECM系列—1 Content Type Syndication
  6. SQLite3基本使用从shell到python
  7. 字符串乘一个数_【思维拓展】三位数乘两位数,构造最大积和最小积
  8. arma预测matlab讲解,MATLAB中ARMA模型预测差分问题
  9. Docker启动一个Centos镜像
  10. java做jsp问题_java/jsp中 中文问题详解
  11. 特定时间循环增加一个时间段值
  12. Jquery弹出层插件,非常好用绚丽Lee dialog 1.0
  13. 一路PN码串行捕获设计--基于《通信收发信机的verilog实现与仿真》实例
  14. FlashFxp 设置主动模式
  15. 每日工作记录——W5500网口ping中出现的问题
  16. 《七哥说道》第八章:约在410,北漂可还行?
  17. 随手写了一个鸡肋的二叉树
  18. “窗体”工具栏控件和“控件工具箱”控件基础
  19. 中国海外文物拍卖天价
  20. 大数据学习之Hive

热门文章

  1. SQL Server 数据查询
  2. IOS回调机制——代理,通知中心以及Block
  3. 人工智能数学基础--微分:定义、运算以及应用
  4. 西魏拓地与侯景防线之关系
  5. Linux每日一讲:awk命令
  6. Classic界面chatter中的子选项卡配置
  7. 用html+css作个简单的九宫格
  8. 【1076】正常血压
  9. 对话职业经理人阿朱:程序员转型期的职业选择
  10. 王道考研操作系统复习笔记