龙岗外贸网站建设公司价格,漳州做网站公司,wordpress怎么改cms,wordpress主题模板文件下载文章目录 接入目的效果展示技术积累如何成为服务商如何搭建第三方后端服务传统模式V云服务模式如何完成商家授权授权逻辑介绍 环境准备注册开发者平台-个人类型 传统模式后端代码接收公众号个人三方平台的票据根据票据获取三方平台访问令牌根据访问令牌获取预授权码通过预授权码… 文章目录 接入目的效果展示技术积累如何成为服务商如何搭建第三方后端服务传统模式V云服务模式如何完成商家授权授权逻辑介绍 环境准备注册开发者平台-个人类型 传统模式后端代码接收公众号个人三方平台的票据根据票据获取三方平台访问令牌根据访问令牌获取预授权码通过预授权码发起授权获取刷新令牌获取授权账号调用令牌根据授权码获取公众号菜单 踩坑记录 接入目的
根据公众号第三方平台开发流程可开发出一套可管理公众号/小程序的服务服务可以直接部署在微信生态作为服务商。只要公众号/小程序理员用个人微信扫码进行授权我们则可以拿到相关的业务接口权限从而帮助商家实现代运营。
效果展示
通过接入公众号授权我们拿到了authorizer_access_token用这个token调用微信公众号获取菜单的接口 https://api.weixin.qq.com/cgi-bin/component/api_query_auth
如图所示已经拿到我本人公众号的菜单。
技术积累
如何成为服务商
https://developers.weixin.qq.com/doc/oplatform/Third-party_Platforms/2.0/getting_started/how_to_be.html 1.1 注册开放平台并通过开发者纸质认证 https://developers.weixin.qq.com/doc/oplatform/Third-party_Platforms/2.0/operation/open/create.html 1.2 创建第三方平台与个人测试账号一致 如何搭建第三方后端服务
在完成第三方平台账号创建后需完成“开发资料”配置。而开发资料配置主要会涉及配置用于接收微信官方推送的消息以及授权链接域名。 除了搭建要与第三方平台对接的后端服务以外服务商仍需开发业务系统该系统主要是面向商家的例如xxxx微商城。 而为了满足服务商业务多样性也为了降低服务商搭建服务的成本平台支持“传统模式”和“云服务模式”进行搭建。可点击查看关于云服务模式的详细介绍。
传统模式V云服务模式
传统模式下第三方平台-开发资料的“授权事件接收配置”、“消息与事件接收配置”、“授权发起页域名”、“第三方授权页”均需要服务商按照文档进行开发、部署。如果使用云服务模式可一键部署官方服务并一键完成配置。 一键部署官方云服务后可通过“服务商微管家”管理工具获取授权页链接实现0代码完成第三方平台后端服务搭建。 此外服务商的业务系统亦可部署到微信云托管帮助服务商减少开发和运维成本。
如何完成商家授权
在完成服务商账号的创建后接下来则是进行业务系统与第三方平台的开发对接在联调测试完成之后即可进行第三方平台的全网发布。在完成全网发布之后该第三方平台已经具备为商家提供服务的基础条件了。大概的步骤如下
授权逻辑介绍
服务商为商家提供服务的基础是【服务商】获得【商家】的授权。 换句话说就是商家需要将其公众号或者小程序授权给第三方平台服务商才可以代商家进行相关操作。 完成一次完整的授权需要服务商与商家的配合相关流程如下操作截图可查看授权与解除授权。 服务商获得商家授权后再使用authorizer_access_token调用接口即可。注意别用错了token。
环境准备
注册开发者平台-个人类型
1.1 进入微信开发平台注册页面 https://open.weixin.qq.com/wxaopen/regist/index?tokenf4668ecb8d5397d42967cfeb1d3b69033134ec11
1.2 主体选择个人如果是企事业单位需要提供营业执照注册号
1.3 使用账号密码登录微信开放平台进入管理中心-第三方平台
1.4 创建一个第三平台个人测试号只能创建一个。注意绑定管理员微信号增加事件回调地址以及权限集的配置。
传统模式后端代码
接收公众号个人三方平台的票据
1、wx-java-open依赖引入
dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId
/dependency
dependencygroupIdcom.github.binarywang/groupIdartifactIdweixin-java-open/artifactIdversion4.6.0/version
/dependency
!-- 整合thymeleaf前端页面 授权页面使用 --
dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-thymeleaf/artifactId
/dependency2、yaml配置thymeleaf
spring:thymeleaf:mode: HTMLencoding: UTF-8content-type: text/htmlcache: falseprefix: classpath:/templates/4、微信票据回调接口逻辑
RequestMapping(/receive_ticket)
public Object receiveTicket(RequestBody(required false) String requestBody, RequestParam(timestamp) String timestamp,RequestParam(nonce) String nonce, RequestParam(signature) String signature,RequestParam(name encrypt_type, required false) String encType,RequestParam(name msg_signature, required false) String msgSignature) {log.info(\n接收微信请求[signature[{}], encType[{}], msgSignature[{}], timestamp[{}], nonce[{}], requestBody[\n{}\n] ,signature, encType, msgSignature, timestamp, nonce, requestBody);if (!StringUtils.equalsIgnoreCase(aes, encType)|| !wxOpenService.getWxOpenComponentService().checkSignature(timestamp, nonce, signature)) {throw new IllegalArgumentException(非法请求可能属于伪造的请求);}// aes加密的消息WxOpenXmlMessage inMessage WxOpenXmlMessage.fromEncryptedXml(requestBody,wxOpenService.getWxOpenConfigStorage(), timestamp, nonce, msgSignature);log.debug(\n消息解密后内容为\n{} , inMessage.toString());try {String out wxOpenService.getWxOpenComponentService().route(inMessage);log.debug(\n组装回复信息{}, out);} catch (WxErrorException e) {log.error(receive_ticket, e);}return success;
}当我们在个人的第三平台配置了票据接收地址后这里每10分钟就会收到票据
根据票据获取三方平台访问令牌
POST https://api.weixin.qq.com/cgi-bin/component/api_component_token 令牌的获取是有限制的每个令牌的有效期为 2 小时请自行做好令牌的管理在令牌快过期时比如1小时50分重新调用接口获取。 生成component_access_token需要依赖component_verify_ticket。
调用示例 示例说明: HTTPS请求 请求数据示例
{ “component_appid”: “appid_value” , #第三方平台appid “component_appsecret”: “appsecret_value”, #第三方平台appsecret “component_verify_ticket”: “ticket_value” #第三方平台推送的票据 }
返回数据示例
{ “component_access_token”: “61W3mEpU66027wgNZ_MhGHNQDHnFATkDa9-2llqrMBjUwxRSNPbVsMmyD-yq8wZETSoE5NQgecigDrSHkPtIYA”, #第三方平台访问令牌 “expires_in”: 7200 } 根据访问令牌获取预授权码
POST https://api.weixin.qq.com/cgi-bin/component/api_create_preauthcode?access_tokenACCESS_TOKEN ACCESS_TOKEN #第三方平台访问令牌
该接口用于获取预授权码pre_auth_code是第三方平台方实现授权托管的必备信息每个预授权码有效期为 1800秒。
调用示例 示例说明: HTTPS请求 请求数据示例
{ “component_appid”: “appid_value” #第三方平台appid }
返回数据示例
{ “pre_auth_code”: “Cx_Dk6qiBE0Dmx4EmlT3oRfArPvwSQ-oa3NL_fwHM7VI08r52wazoZX2Rhpz1dEw”, “expires_in”: 600 }
通过预授权码发起授权
1、后端增加接口
GetMapping(/authCodePage)
public ModelAndView index(ModelAndView model){model.addObject(message, Hello, Thymeleaf!);model.setViewName(authCodePage);return model;
}2、提供thymeleaf html文件
!DOCTYPE html
html xmlns:thhttp://www.thymeleaf.org
headmeta charsetUTF-8meta nameviewport contentwidthdevice-width, initial-scale1.0title公众号授权~/titlestylebody {font-family: Arial, sans-serif;text-align: center;margin: 20px;}h1 {color: #007bff;}p {font-size: 18px;color: #6c757d;}/style
/head
body
h1欢迎使用Thymeleaf模板/h1
p th:text${message?:is null}默认文本信息演示~~/p
button onclickauth()公众号授权/button
/body
scriptfunction auth() {console.log(auth);const url https://mp.weixin.qq.com/cgi-bin/componentloginpage?component_appid**pre_auth_code**redirect_uri**auth_type1;location.href url}
/script
/html3、启动项目访问页面用测试公众号管理员个人微信扫码
4、授权
5、授权成功后回调回调路径中包含auth_code http://zqeu9v.natappfree.cc/notify/authCode/callback?auth_codequeryauthcodeaCuSQBx6O0aV4SiMcEncY9orjevT6wZs7bFy0sg6LGXqX9wJ8sO1XuNvFGMmJe9MZecwdOuN5_1CmAoTJWsAZgexpires_in3600
获取刷新令牌
POST https://api.weixin.qq.com/cgi-bin/component/api_query_auth?access_tokenACCESS_TOKEN ACCESS_TOKEN #第三方平台访问令牌
当用户在第三方平台授权页中完成授权流程后第三方平台开发者可以在回调 URI 中通过 URL 参数获取授权码(authorization_code)。然后使用该接口可以换取公众号/小程序的刷新令牌authorizer_refresh_token。 建议保存授权信息中的刷新令牌authorizer_refresh_token 调用示例 示例说明: HTTPS请求 请求数据示例
{ “component_appid”:“appid_value” , #第三方平台appid “authorization_code”: “auth_code_value” #扫码回调返回的授权码 }
返回数据示例
{ “authorization_info”: { “authorizer_appid”: “wxf8b4f85f3a794e77”, #被授权公众号appid “authorizer_access_token”: “QXjUqNqfYVH0yBE1iI_7vuN_9gQbpjfK7hYwJ3P7xOa88a89-Aga5x1NMYJyB8G2yKt1KCl0nPC3W9GJzw0Zzq_dBxc8pxIGUNi_bFes0qM”, #被授权公众号授权码 “expires_in”: 7200, “authorizer_refresh_token”: “dTo-YCXPL4llX-u1W1pPpnp8Hgm4wpJtlR6iV0doKdY”,#刷新token “func_info”: [ #授权个功能 { “funcscope_category”: { “id”: 1 } }, { “funcscope_category”: { “id”: 2 } }, { “funcscope_category”: { “id”: 3 } } ] } } 获取授权账号调用令牌
POST https://api.weixin.qq.com/cgi-bin/component/api_authorizer_token?component_access_tokenACCESS_TOKEN ACCESS_TOKEN #第三方平台访问令牌
该接口用于获取授权账号的authorizer_access_token。authorizer_access_token 有效期为 2 小时authorizer_access_token 失效时可以使用 authorizer_refresh_token 获取新的 authorizer_access_token
调用示例 示例说明: HTTPS请求 请求数据示例
{ “component_appid”: “appid_value”, #第三方平台aopid “authorizer_appid”: “auth_appid_value”, #被授权公众号appid “authorizer_refresh_token”: “refresh_token_value” #刷新token }
返回数据示例
{ “authorizer_access_token”: “some-access-token”, “expires_in”: 7200, “authorizer_refresh_token”: “refresh_token_value” } 根据授权码获取公众号菜单
https://api.weixin.qq.com/cgi-bin/get_current_selfmenu_info?access_tokenACCESS_TOKEN ACCESS_TOKEN #授权账号调用令牌 授权码
至此我们已经根据授权码拿到了需要运营的公众号的菜单。此时此刻只要是权限内的接口你都可任意调用。
踩坑记录
1、授权发起页面与事件接收域名一致 2、域名的根目录下必须下载放置官方校验文件