生成微信二维码以及扫码获取用户信息

生成微信二维码以及扫码获取用户信息

最近项目中遇到一个自己之前没有接触过的新功能,即就是要生成一个二维码,微信用户扫码可以进行登录,并把用户的信息,如:昵称,头像、省份...获取到并入库。

https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html 微信开放文档地址。

一:先说怎样生成二维码?

1.可以百度“草料二维码”,可以利用网站生成二维码。前提是要输入一个URL,才可以生成这个二维码;

2.此URL就是

https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect

,要改动的就是openid,和redirect_uri,这个edirect_uri就是回调域名,公众号上面配置的(前端工程师做的);至此二维码生成了。

二:扫码获取用户信息?扫码调下面的接口

由于之前接触过微信支付,知道怎样获取openid,不懂得朋友可以去我的另一篇

《全面详细的微信支付思路流程以及项目代码分享》https://blog.csdn.net/zhangleiyes123/article/details/82857195中去了解,接下来就是怎样获取到用户信息,进入到微信公众号查找相关文档,获取用户信息有两个接口,我们要使用第二个接口,

//获取用户信息接口 此接口的access_token 是接口基础调用access_token 不是网页授权access_token

//public static String GET_USERINFO="https://api.weixin.qq.com/cgi-bin/user/info?access_token={0}&openid={1}&lang=zh_CN";

//获取用户信息接口 此接口是网页授权access_token

public static String GET_USERINFO="https://api.weixin.qq.com/sns/userinfo?access_token={0}&openid={1}&lang=zh_CN";

直接上代码:

/**

* 获取openId 微信登录 获取用户姓名

* @param code

* @return

*/

@ApiOperation(value="根据code获取openid",notes="")

@GetMapping("/getOpenId")

public BaseResult getOpenId(@RequestParam("code") String code){

Map map = new HashMap();

Map map1 = new HashMap();

Map result = new HashMap();

try {

map.put("status", 0);//默认失败

map.put("appId", WxPayConfig.APPID);//为了给前端用

if(!StringUtil.isNullOrEmpty(code)){//有code

//请求api获取openid(获取access_token,access_token里面带有openid)

String str = HttpInvoker.sendGetRequest(StringUtil.format(WxPayConfig.GET_OPENID, new Object[]{WxPayConfig.APPID,WxPayConfig.APPSECRET,code}));

//将json转map

Map toMap = WeixinUtil.jsonStrToMap(str);

if(!StringUtil.isNullOrEmpty(toMap.get("openid"))){//获取openid成功

map.put("status", 1);//成功

map.put("openId", toMap.get("openid").toString());

map.put("access_token", toMap.get("access_token").toString());

//=================================================================================

//获取用户信息

String str1 =HttpInvoker.sendGetRequest(StringUtil.format(WxPayConfig.GET_USERINFO, new Object[]{toMap.get("access_token").toString(),toMap.get("openid").toString()}));

//将json转map

Map toMap1 = WeixinUtil.jsonStrToMap(str1);

map1.put("nickname", toMap1.get("nickname").toString());//微信名

map1.put("sex",toMap1.get("sex").toString());//性别 值为1时是男性,值为2时是女性,值为0时是未知

map1.put("province",toMap1.get("province").toString());//省

map1.put("city",toMap1.get("city").toString());//城市

map1.put("country",toMap1.get("country").toString());//国家

map1.put("headimgurl",toMap1.get("headimgurl").toString());//用户头像

if(!StringUtils.isEmpty(str) && !StringUtils.isEmpty(str1)) {

User user=userRepo.findByOpenId(toMap.get("openid").toString());

if(user==null) {

//用户设置用户名和openid

User user1=new User(toMap1.get("nickname").toString(),toMap.get("openid").toString());

userRepo.save(user1);

}

result.put("openid", toMap.get("openid").toString());

result.put("nickname", toMap1.get("nickname").toString());

}

return new BaseResult(Constants.SUCCESS_CODE,Constants.SUCCESS_MSG,result);//返回openid

}else {

return new BaseResult(Constants.ERROR_CODE,Constants.ERROR_MSG,"获取openid失败");

}

}else {

return new BaseResult(Constants.ERROR_CODE,Constants.ERROR_MSG,"没有传入code值");

}

} catch (Exception e) {

e.printStackTrace();

return new BaseResult(Constants.EXCEPTION_CODE,Constants.EXCEPTION_MSG);

}

}

现在,数据库中就有扫码人的信息了。

相关参考链接:https://blog.csdn.net/qq_33696345/article/details/80521077

相关推荐

「爬」字笔顺详解,动画演示,字帖下载
beat365官方app安卓版下载

「爬」字笔顺详解,动画演示,字帖下载

📅 07-09 👁️ 5905
极限挑战
365ba

极限挑战

📅 08-01 👁️ 8167
五种环境说明: 开发环境、测试环境、生产环境、UAT环境、仿真环境