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

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

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<String,Object> map = new HashMap<String,Object>();
    	Map<String,Object> map1 = new HashMap<String,Object>();
    	Map<String, Object> result = new HashMap<String,Object>();
    	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<String, Object> 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<String, Object> 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

 

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Stone.小小的太阳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值