微信公众号开发--第二章 获取用户信息

前言:本文主要内容是微信后端逻辑。

前言:本项目前端用vue,微信后端用ssm,后台用ssm。后端主要处理与微信的交互,转发入参给后台,接收后台给的出参,转发出参给前端。后台是真正涉及业务的。

前言:本文依据的项目,前端后端在本地启动,后台部署在linux服务器上。后端通过拼接接口路径访问后台。部署配置,详情见第一章。

微信公众号开发–第二章 获取用户信息

一、页面操作

1、本地启动前后端后,在微信开发者工具上,输入超链接local.test.com:8989。

2、页面自动进入授权页面
在这里插入图片描述

​ 若没有跳到授权链接,报redirect_uri参数错误,返回码是10003,应该是回调地址写错了,参考第一章的配置的授权回调页面域名。

​ 微信授权机制,详情请参考官方文档https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html

3、点击同意,获取code,进入公众号首页
在这里插入图片描述
​ 前端请求头Request Headers会封装进后端入参HttpServletRequest request。客户端浏览器发出的请求被封装成为一个HttpServletRequest对象。对象包含了客户端请求信息包括请求的地址,请求的参数,提交的数据,上传的文件客户端的ip甚至客户端操作系统都包含在其内。

​ 前端请求参数body,对应后端入参UserBean bean,由@RequestBody自动装配。

二、微信后端逻辑

​ 1、获取前端传来的code。请求https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code获取access_token和openid。

​ 2、根据access_token和openid,请求https://api.weixin.qq.com/sns/userinfo?access_token=TOKEN&openid=OPENID&lang=zh_CN拉取用户信息。

​ 3、根据用户信息,判断用户是否关注了公众号。没有关注,则返回error并提示用户关注。若关注了进行第4步。

​ 4、从后台拿到tokenid,tokenid其实就是后台redis的key。

​ 5、根据tokenid,在后端生成redis的key和value,使后端的value和tokenid相同。这样后端就能方便地调用后台接口。

三、微信后端代码

接口定义
/**
 * 通过code获取用户信息
 * @param request
 * @return 返回用户信息
 * @throws Exception
 */
@RequestMapping(value = "/getUserInfo", method = RequestMethod.POST)
@ResponseBody
public Result getUserInfo(@RequestBody UserBean bean, HttpServletRequest request)
      throws Exception {
   }
接口入参
public class UserBean {
   
   private String tokenid;// 权限验证码,对应后台redis的key
   private String channelcode;// 渠道
   private String accountName;// 用户名
   private String accountPwd;// 密码
   private String openid;// 微信openid
   private String code;// 微信网页授权中获取的code
}

javax.servlet.http.HttpServletRequest
方法:根据code,获取access_token和openid
//网页授权授权地址
private final String oauthApiURL = "https://api.weixin.qq.com/sns";

/**
* 方法:根据code,获取access_token和openid
* @param code
* @return result
* result包括access_token、expires_in、efresh_token、openid和scope
* appid、appSecret 是测试号信息,详见第一章
*/
public JSONObject getUserInfoAuth(String code) {
   
	String apiUrl = oauthApiURL+ "/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code";
	apiUrl = apiUrl.replace("APPID", appid).replace("SECRET", appSecret).replace("CODE", code);
	JSONObject result = httpRequest(apiUrl);
	if (!result.isNullObject() && result.containsKey("openid")) 
  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值