关于pc端微信登录前后端分离的java后台开发

关于微信登录呢首先要去腾讯开发者平台选择微信开发者平台点进去注册登录网址为https://open.tencent.com/

选择到网站应用进行创建申请博主是为公司开发所以一些东西都有  那要是个人开发的话微信好像有测试数据可以用你可以去了解一下就只是需要两个值一个是APPID一个是secret来进行开发创建网站应用时指定的回调地址不能写http://或者https://开头就好直接写你的www.xxx.com这样的格式

首先需要写一个接口给前端来获取跳转到微信二维码登录界面的url需要传递的参数就是你在网站创建完成后得到的APPID以及一些其他参数如下需要注意的是redirect_uri这个是回调地址其他的应该解释的很清楚了吧

参数	            是否必须	            说明
appid	              是	          应用唯一标识
redirect_uri	      是	请使用urlEncode对链接进行处理
response_type	      是	填code
scope	              是	应用授权作用域,拥有多个作用域用逗号(,)分隔,网页应用目前仅填写snsapi_login即
state	              否	用于保持请求和回调的状态,授权请求后原样带回给第三方。该参数可用于防止csrf攻击(跨站请求伪造攻击),建议第三方带上该参数,可设置为简单的随机数加session进行校验

那么请求地址就是为https://open.weixin.qq.com/connect/qrconnect?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect

相应的参数填入然后返回给前端由前端进行访问,回调地址(回调是回调到前端页面)要与你注册网站应用时的地址一样不过之后可以在网站应用中修改 构建代码如下(注意这里的回调地址要做一点处理相信你应该能看懂) 

   //pcwechatId为APPID
        String url= "https://open.weixin.qq.com/connect/qrconnect?appid="+pcwechatId+"&redirect_uri=https%3a%2f%2fpc.my51.com%2fWXLOGIN&response_type=code&scope=snsapi_login&state="+state+"#wechat_redirect";

 

这时用户进入了微信提供的一个页面用户扫码授权登录用户如果不授权则不会跳转到回调地址上,回调完成之后会给前端传送code以及state参数由前端传送到后端接口,那么我们后端收到了code和state的值之后就要去访问微信提供的请求地址来获取access_token只有这个值才能获取用户信息那么参数为

参数       是否必须      说明

appid       是          应用唯一标识,在微信开放平台提交应用审核通过后获得

secret      是          应用密钥AppSecret,在微信开放平台提交应用审核通过后获得

code        是          填写获取的code参数

grant_type  是          填authorization_code

那么请求微信的网址为https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code

相应的填入参数就可以了下面是本人打的代码

String url="https://api.weixin.qq.com/sns/oauth2/access_token?appid="+pcwechatId+"&secret="+pcwechatSecret+"&code="+codes+"&grant_type=authorization_code";
        String retText = OKHttpUtils.client(url);
        Gson gson = new Gson();
        Map result = gson.fromJson(retText, new TypeToken() {
        }.getType());
        if (result.get("errcode") != null) {
         code=1;
         codeMessage=result.get("errcode").toString();
         map.put("memberInfo",null);
         map.put("codeMessage",codeMessage);
         map.put("code", code);
         return  map;
        }
        String accessToken = (String) result.get("access_token");
        String openid = (String) result.get("openid");
        String unionid = (String) result.get("unionid");

请求地址后得到数据封装成map然后根据名字获取对应的值本人用的springboot对与Appid和Secret都做了封装所以是看不到的后面拿到值后再次请求微信接口参数如下

参数         是否必须     说明
access_token    是       调用凭证
openid          是       普通用户的标识,对当前开发者帐号唯一
lang            否       国家地区语言版本,zh_CN 简体,zh_TW 繁体,en 英语,默认为zh-CN

那么请求地址为https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID

根据获取的值填入就行了傻瓜式操作应该都会吧接下来是本人的代码

  url="https://api.weixin.qq.com/sns/userinfo?access_token="+accessToken+"&openid="+openid;
            String retTexts = OKHttpUtils.client(url);
            Map results = gson.fromJson(retTexts, new TypeToken() {
            }.getType());
            if (results.get("errcode")==null){
                //普通用户的标识,对当前开发者帐号唯一
                String Openid=results.get("openid").toString();
                //用户头像,最后一个数值代表正方形头像大小(有0、46、64、96、132数值可选,0代表640*640正方形头像),用户没有头像时该项为空
                String headImgUrl= results.get("headimgurl").toString();
                //普通用户昵称
                String nickName=results.get("nickname").toString();
                //普通用户性别,1为男性,2为女性
                String sex= results.get("sex").toString();
                //普通用户个人资料填写的城市
                String city=results.get("city").toString();
                //普通用户个人资料填写的省份
                String province=results.get("province").toString();
                //用户统一标识。针对一个微信开放平台帐号下的应用,同一用户的unionid是唯一的
                String registrationID=results.get("unionid").toString();

一样的操作封装成map然后根据名字获取值然后该保存保存 该返回前端返回前端  到此完成

 

                                                                            这次分享就到这里   一个不严谨的博主        dw_weiwei

 

你可能感兴趣的:(java)