微信公众号开发流程

1、首先注册微信公众号,要根据实际需求考虑清楚应该申请哪一种公众号
以下是官方给出的建议,大家可以多参考参考
1)如果想简单的发送消息,达到宣传效果,建议可选择订阅号;
2)如果想用公众号获得更多的功能,例如开通微信支付,建议可以选择服务号;
3)如果想用来管理内部企业员工、团队,对内使用,可申请企业号;
4)订阅号可通过微信认证资质审核通过后有一次升级为服务号的入口,升级成功后类型不可再变;
5)服务号不可变更成订阅号。
2、自定义菜单设置
自定义菜单官方说明文档地址:https://developers.weixin.qq.com/doc/offiaccount/Custom_Menus/Creating_Custom-Defined_Menu.html
我个人使用的是view方式创建菜单,因为后面要获取用户基本信息,做单点登录
1)通过APPID和appsecret获取access_token(有效期是两小时)
接口地址:https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=appsecret
获取access_token示例
注意:获取的时候一定要当前获取的服务器ip添加相应的白名单,如下图:
白名单设置
2)拿到access_token后,调用创建菜单地址
创建菜单地址:https://api.weixin.qq.com/cgi-bin/menu/create?access_token=access_token
创建菜单示例图
3)查询自己创建的菜单
查询菜单地址:https://api.weixin.qq.com/cgi-bin/get_current_selfmenu_info?access_token=access_token
查询菜单接口

3、后台对接微信用户基本信息(java)
1)查看接口权限中网页授权说明,可以清晰看到需要4步,如下:
网页授权步骤图
2)上述4步中的第一步,获取code:
前端第一步用下图中的地址获取code,其中的scope、redirect_uri最为重要,一个是获取用户基本信息的权限,一个是微信端跳转到你登录页面,然后会带入code和state字段给我们的页面,如果地址没问题,code会在返回的url中,通过截取可以获得。
单点第一步
3)写后端接口,通过code换取网页授权access_token
Controller层

/*** @Description 微信的单点登录* @author xkh* @date 2021-9-31 10:27* @param code 票据* @return com.sx.common.result.RestResponse*/@PostMapping(value = "/login", produces = "application/json; charset=utf-8")@ApiOperation(value = "登录授权", notes = "登录授权", produces = "application/json; charset=utf-8")@ApiImplicitParam(name = "code", value = "code作为换取access_token的票据", required = true, dataType = "string", paramType = "query")public RestResponse login(@RequestParam(name = "code", required = true) String code, HttpServletRequest request, HttpServletResponse response) {return ResultGenerator.genSuccessResult(sysWxUserService.login(code, request, response));}实现层代码:
```/*** @param code 票据* @return com.sx.system.vo.WxUserVO* @Description 微信的单点登录* @author xkh* @date 2021-9-31 10:46*/@Overridepublic WxUserVO login(String code, HttpServletRequest request, HttpServletResponse response) {//TODO 1、先通过code获取access_token和openidMap<String, Object> params = new HashMap<>();String url = WxCommonConstants.GET_ACCESS_TOKEN_URL;//这种引用就不需要其他系统必须的,使用该功能再配置String appId = GlobalConfig.getConfig("wx.appid");String appSecret = GlobalConfig.getConfig("wx.appsecret");params.put("appid", appId);params.put("secret", appSecret);params.put("code", code);params.put("grant_type", "authorization_code");JSONObject jsonObject = JSONObject.parseObject(HttpClientUtil.doHttpsGet(url, params));if (StringUtil.isNotEmpty(jsonObject.get("errcode"))) {throw new SxException((Integer) jsonObject.get("errcode"), (String) jsonObject.get("errmsg"));}/*** {*   "access_token":"ACCESS_TOKEN",*   "expires_in":7200,*   "refresh_token":"REFRESH_TOKEN",*   "openid":"OPENID",*   "scope":"SCOPE"* }*/log.info("通过code换取access_token、openID:{}", jsonObject);String accessToken = (String) jsonObject.get("access_token");String openId = (String) jsonObject.get("openid");if (StringUtil.isEmpty(accessToken) || StringUtil.isEmpty(openId)) {throw new SxException(GovernExceptionEnum.WXUSER_OPENID_NOT_EXIST);}//TODO 2、通过access_token拉取用户信息(需scope为 snsapi_userinfo)String lang = GlobalConfig.getConfig("wx.lang");url = WxCommonConstants.GET_SNS_USER_INFO_URL;params = new HashMap<>();params.put("access_token", accessToken);params.put("openid", jsonObject.get("openid"));params.put("lang", lang);jsonObject = JSONObject.parseObject(HttpClientUtil.doHttpsGet(url, params));log.info("微信用户信息:{}", jsonObject);//TODO 3、查询数据库微信用户信息、保存或者更新用户信息SysWxUser sysWxUser = sysWxUserMapper.selectByOpenId((String) jsonObject.get("openid"));if (null == sysWxUser) {//新增用户信息sysWxUser = new SysWxUser();sysWxUser.setOpenId((String) jsonObject.get("openid"));}saveOrUpdateWxUser(sysWxUser, jsonObject);String affiliationApp = request.getHeader(SystemCommonConstants.AFFILIATIONAPP_KEY);String affiliationAppType = request.getHeader(SystemCommonConstants.AFFILIATIONAPPTYPE_KEY);if (StringUtils.isEmpty(affiliationApp) || StringUtils.isEmpty(affiliationAppType)) {throw new SxException(SysExceptionEnum.AFFILIATIONAPP_OR_AFFILIATIONAPPTYPE_EMPTY);}// 设置RefreshToken,时间戳为当前时间戳,直接设置即可(不用先删后设,会覆盖已有的RefreshToken)String currentTimeMillis = String.valueOf(System.currentTimeMillis());StringBuilder key = new StringBuilder();key.append(CommonConstant.PREFIX_SHIRO_REFRESH_TOKEN).append(sysWxUser.getId()).append(SymbolConstants.COLON).append(affiliationApp).append(SymbolConstants.COLON).append(affiliationAppType);redisUtil.setValue(key.toString(), currentTimeMillis, refreshTokenExpireTime);//把用户设置到redis中,不需要重复查询redisUtil.setValue(CommonConstant.PREFIX_SHIRO_WXUSER + sysWxUser.getId(), sysWxUser, refreshTokenExpireTime);// 从Header中Authorization返回AccessToken,时间戳为当前时间戳String token = JwtUtil.sign(String.valueOf(sysWxUser.getId()), currentTimeMillis, affiliationApp, affiliationAppType);response.setHeader("Authorization", token);response.setHeader("Access-Control-Expose-Headers", "Authorization");WxUserVO wxUserVO = new WxUserVO();BeanUtils.copyProperties(sysWxUser, wxUserVO);wxUserVO.setMobilePhone(sysWxUser.getMobilPhone());if (StringUtil.isNotEmpty(sysWxUser.getAreaId())) {//TODO 用户选择的地区名称SysArea sysArea = sysAreaMapper.selectById(sysWxUser.getAreaId());if (null != sysArea) {wxUserVO.setAreaName(sysArea.getName());}}//异步保存微信登录流水sysWxUserLogService.asyncSaveLog(sysWxUser);Integer areaId = StringUtils.isEmpty(sysWxUser.getAreaId()) ? null : Integer.valueOf(sysWxUser.getAreaId());hstLoginStatisService.saveInfo(sysWxUser.getId(), sysWxUser.getUserName(), areaId, CommonConstants.STRING_30);return wxUserVO;}
```java

4)刷新access_token(如果需要)
这步可以不需要,暂不做描述
5)拉取用户信息(需scope为 snsapi_userinfo)
地址:http:GET(请使用https协议) https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN
本人在上述第三步中已经调用
调用获取用户说明

可用微信开发者工具调试,实际调试结果如下:
调试结果

最后实际调试的采坑点记录:
1、后台重定向地址以及设置菜单的appid是测试公众号的appID,不是个人的,测试公众号在"开发者工具"–>“公众平台测试账号”–>里面含有appId和appsecret
2、设置JS接口安全域名 183.129.166.58:8999/
3、设置"网页服务"–>“网页账号”–>“网页授权获取用户基本信息”–>“授权回调页面域名:”: 183.129.166.58:8999

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/142885.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

微信公众号程序开发接入流程

文章目录 文章简介微信公众号程序介绍传统H5网页&#xff0c;无需微信支持建立在微信支持下开发的微信公众号程序第一步第二步 文章简介 公司常有微信公众号程序开发的项目&#xff0c;每次接入微信时都要四处查找以前的代码&#xff0c;百度接入微信公众号的流程。浪费大量时间…

微信公众号白名单配置

微信公众号白名单配置 微信公众号升级之后&#xff0c;在获取access_token的时候需要配置IP白名单&#xff0c;如下图&#xff1a; 那么这个白名单是干什么的呢&#xff1f;微信给的解释是&#xff1a;为了提高公众平台开发者接口调用的安全性&#xff0c;避免一旦开发者ID和密…

uni-app开发微信公众号

一、公众号JSSDK使用 【1】验证后端返回的签名是否正确 https://mp.weixin.qq.com/debug/cgi-bin/sandbox?tjsapisign &#xff08;1&#xff09;jsapi_ticket获取方法&#xff1a;&#xff08;注意把本地IP放入白名单&#xff09; 1&#xff09; https://api.weixin.qq.com…

微信公众号--发送模板消息

目录 一、登录微信公众平台二、开通模板消息三、增加及选择模板四、在项目中配置使用五、遇见的问题 一、登录微信公众平台 1、搜索微信公众平台 2、扫码登录后即可跳转 二、开通模板消息 1、在左侧菜单栏找到模板消息 若找不到则点击新的功能 2、点击新的功能后&#x…

SpringBoot微信公众号开发

SpringBoot微信公众号开发 环境准备 微信测试公众号申请 访问https://weixin.qq.com/&#xff0c;点击公众号&#xff0c;申请一个订阅号&#xff08;个人能申请订阅号&#xff0c;服务号只有企业才能申请&#xff09;。 公众号填写服务器配置 注意&#xff1a;服务器提交需要…

微信公众号接入开发

目录 前言&#xff1a; 一、公众号中配置 1、获取AppID、AppSecret&#xff1a; 2、配置IP白名单&#xff1a; 问题&#xff1a; 解决&#xff1a; 3、配置JS接口安全域名&#xff1a; 重要&#xff1a;认真阅读系统提示的注意事项&#xff1a; 问题&#xff1a; 解决…

电子科技大学编译原理复习笔记(三):控制结构

目录 前言 重点一览 语句级控制结构 单元级控制结构 四种单元级控制结构 本章小结 前言 本复习笔记基于张老师的课堂PPT&#xff0c;供自己期末复习与学弟学妹参考用。 重点一览 语句级控制结构 定义&#xff1a;用来构造各种语句执行顺序的机制 传统三种语句级控制结…

geotools简介

geotools简介 官网 https://docs.geotools.org/latest/userguide/index.html 架构图 特性 1. 主要特性 Geotools主要提供各种GIS算法&#xff0c;实现各种数据格式的读写和显示。在显示方面要差一些&#xff0c;只是用Swing实现了地图的简单查看和操作。用户可以根据Geoto…

Linux学习笔记 --- Linux基础命令Part2

2.9 查找命令(which、find&#xff09; 目标&#xff1a;1. 掌握使用which命令查找命令的程序文件 2. 掌握使用find命令查找指定文件 which命令 我们在前面学习的Linux命令&#xff0c;其实它们的本体就是一个个的二进制可执行程序。 和Windows系统中的.exe文件&#x…

清除一键还原精灵开机热键F11的正确方法

刚开通博客园&#xff0c;就写我刚才才处理的一个问题吧。 先描述一下问题吧&#xff0c;我以前才装Win7系统的时候&#xff0c;想弄个还原&#xff0c;于是去下载了一个一键还原精灵&#xff0c;结果安装失败了&#xff0c;不过开机热键却保留了下来&#xff0c;每次开机都要提…

u深度重装系统详细教程_u深度一键还原精灵电脑重装系统使用教程

电脑已经是家家户户必备的电子产品&#xff0c;有了它可以为我们带来一系列不同的乐趣以及帮助。当然&#xff0c;电脑也有出差错的时候&#xff0c;在遇上电脑系统无法正常使用时&#xff0c;大多数人会使用附带有应急系统的u盘启动盘为电脑重装系统的操作。但是pe系统中附带的…

冰点还原精灵和惠普增霸卡安装软件的方法

还原系统无法安装东西 适用于冰点还原精灵和惠普增霸卡发现这个方法的经过 适用于冰点还原精灵和惠普增霸卡 在我们使用还原系统如健康上网专家或者惠普增霸卡这样的还原系统的时候&#xff0c;难免出现想后期安装点软件。但是安装后电脑重启后就被还原了&#xff0c;软件也就…

破解还原卡的方法总结

分享一下我老师大神的人工智能教程&#xff01;零基础&#xff0c;通俗易懂&#xff01;http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章。分享知识&#xff0c;造福人民&#xff0c;实现我们中华民族伟大复兴&#xff01; 破解三茗还原卡还原卡及还原精灵的破解还原…

冰点还原精灵卸载

冰点还原是一个系统的保护软件&#xff0c;不论什么原因你的系统出现了故障&#xff0c;它都可以快速的恢复到你原先的状态和设置。它会随时记录你的操作&#xff0c;当前打开的文件&#xff0c;运行着的程序和各项设置。 但是当你有一天不想用他了&#xff0c;你是否懂…

冰点还原无法修改计算机时间,系统还原后无法更改系统时间?这个方法必须会...

原标题&#xff1a;系统还原后无法更改系统时间&#xff1f;这个方法必须会 对于公用电脑&#xff0c;为了防止乱装软件&#xff0c;都会安装了冰点还原精灵这类的系统还原软件来保护电脑系统。但是之后发现系统时间不对&#xff0c;双击修改时弹出“您没有适当的特级权&#x…

按键精灵 手机 oracle,按键精灵Android版:软件使用

1.1按键精灵Android版(APP) 1.1.1脚本管理器 按键精灵Android版的APP在界面功能层次上尽量扁平化&#xff0c;大多数操作均在脚本管理器内完成&#xff0c;界面由菜单栏、脚本列表及可伸缩的脚本操作栏组成&#xff0c;用户可以在这里直接进行脚本的创建、管理与编辑。(如图1) …

冰点还原精灵是怎么用的

有很多网友说装了冰点还原精灵后想卸载&#xff0c;可又不知道怎么卸?网上下的工具不是报毒就是用不了&#xff0c;在这里小编详细图文教您们一遍。 冰点是利用驱动的形式加入操作系统的内核模块中来实现其还原功能的&#xff0c;它必须依附于原来的系统,一旦进入另外一个系统…

冰点还原精灵有什么作用

冰点还原精灵是一款超强大的系统还原软件&#xff0c;可使计算机配置免遭破坏&#xff0c;从而将 IT帮助台收到的求助数量和耗费的成本降低 75%。它可以确保每个台式机、笔记本和服务器始终处于部署该软件之初的最佳运行状态。 公司&#xff0f;组织的计算机的可靠性得以显著提…

分享一款好用的电脑背单词软件

推荐一下这款单词风暴&#xff0c;虽然看起来很老了&#xff0c;但是好用&#xff0c;功能多。 下载地址 单词风暴免费版下载_官方免费版_单词风暴官方网站 (wordstorming.com) 下面是主界面 需要登陆ID:285804755-QGJTE-HCUMQ 下面是词库 不过我最喜欢的功能是这里面可以…

MYSQL数据库同步工具

MYSQL数据库同步工具 MYSQL数据库同步工具功能说明配图 MYSQL数据库同步工具 GIT地址&#xff1a;https://gitee.com/michlee/mysql-sync 因开发需要&#xff0c;经常要同步MYSQL数据库结构及部分基础数据到其他生产服务器。而且有时候需要一次性同步到多台服务器&#xff0c;…