微信小程序、微信第三方授权登录

1、理解微信中用到的概念
code:调用微信接口的临时票据,有效时间应该是5分钟。
openid:公众平台(小程序,公众号等)下的唯一值
unionid:开放平台下用户的唯一值,一个开放平台下可以包含多个公众平台
要想调用微信的接口,需要申请账号获取appid和appsecret。先要注册一个开放平台账号,在该账号下可以添加公众平台小程序、公众号、移动应用等微信服务。申请链接如下:
https://open.weixin.qq.com/cgi-bin/index?t=home/index&lang=zh_CN
2 、小程序
通过code获取用户unionid:
https\://api.weixin.qq.com/sns/jscode2session?appid\=APPID&secret\=SECRET&js_code\=JSCODE&grant_type\=authorization_code

public static String decodeUserInfo(String code) {
		Map<String,Object> map = new HashMap<String,Object>();
		 
        //登录凭证不能为空
        if (code == null || code.length() == 0) {
            map.put("status", 0);
            map.put("msg", "code 不能为空");
            return null;
        }
 
        //1、向微信服务器 使用登录凭证 code 获取 session_key 和 openid 
        String url = MINIPROGRAM_AUTH_URL.replace("JSCODE", code);
        JSONObject json = HttpsUtils.doGet(url);
        
        if(json.getInteger("errcode")!=null){
        	map.put("status", 0);
            map.put("msg", json.toString());
            return null;
        }
        //从json中根据需要获取值
        //String openid = json.getString("openid");
        String unionid = json.getString("unionid");
       // map.put("unionId", unionid);
       // map.put("openid", openid);
        return unionid;
	}

3、 移动应用微信登录
        前端使用uni-app开发,最初使用uni.login()直接获取unionid传到后台校验,但是为了安全前端改成了获取code,传到后台校验,获取code参考如下链接:
https://blog.csdn.net/sqlquan/article/details/111872547
注意:前端获取code时就不要在用uni.login方法了,可能会造成传到后台时提示code been used,在打包Android时没有问题,在打包ios时出现的问题。
通过code获取openid和access_token: 
https\://api.weixin.qq.com/sns/oauth2/access_token?appid\=APPID&secret\=SECRET&code\=CODE&grant_type\=authorization_code
然后在获取unionid:
https\://api.weixin.qq.com/sns/userinfo?access_token\=ACCESS_TOKEN&openid\=OPENID

public static String getMobileAppUnionid(String code){
		String unionid = null;
		//1、向微信服务器 使用登录凭证 code
        String url = MOBILEAPP_AUTH_URL.replace("CODE", code);
        JSONObject jsonOpenid = HttpsUtils.doGet(url);
        //先获取openid和access_token     if(StringUtils.isNotBlank(jsonOpenid.getString("access_token"))&&StringUtils.isNotBlank(jsonOpenid.getString("openid"))) {
        	//获取用户信息unionid
        	String unionidUrl = MOBILEAPP_UNIONID_URL.replace("ACCESS_TOKEN", jsonOpenid.getString("access_token")).replace("OPENID", jsonOpenid.getString("openid"));
            JSONObject json = HttpsUtils.doGet(unionidUrl);
        	if(StringUtils.isNotBlank(json.getString("unionid"))){
       
            	unionid = json.getString("unionid");
            }
        }
        //按开发文档上
		return unionid;
	}

参考开发文档:

https://developers.weixin.qq.com/doc/oplatform/Mobile_App/WeChat_Login/Authorized_API_call_UnionID.html
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值