首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >微信开放平台—-微信扫码登录

微信开放平台—-微信扫码登录

作者头像
全栈程序员站长
发布2022-06-30 19:32:30
发布2022-06-30 19:32:30
8.7K00
代码可运行
举报
运行总次数:0
代码可运行

大家好,又见面了,我是你们的朋友全栈君。

告知:所有操作是基于域名已备案,并且具有企业级微信公众号!

1.准备工作

1.1.注册微信开放平台帐号

https://open.weixin.qq.com

1.2.创建应用(网站应用),填写资料

https://open.weixin.qq.com/cgi-bin/appcreate?t=manage/createWeb&type=app&lang=zh_CN&token=f95883efa2cf7187c7b020d3cd26a53e89b4dc91

注意:

!填写的域名与备案号必须一致.

!!授权回调域名必须与微信公共号的授权域名一致

微信开放平台:

微信公共平台: 权限接口(修改) —> 设置 —-> 填写域名 !需要将xxx.txt文件上传到服务器根目录

!!!整个微信开放平台填写信息的最好是一致的,比如说域名,联系人邮箱,

1.3.申请成为开发者(不申请,没有权限调用微信扫码登录接口)

1.3.1.申请开通

1.3.2.填写资料

!保证资料真实就OK了

1.3.3.拿命来!,….哦不,是交钱,300大洋

2.微信扫码登录流程 图(自己画的…)

可以去看官网啦,这里自己的理解,还有个问题,这个二维码对于用户来说是一个请求到我们服务器,然后我们服务器就 会返回一个二维码给他,但是对于开发人员就不是了,这里不要给我误带了,看看官网就知道了.

3.实现

首先,前端肯定是有一个请求到后台的,这个请求就是用于获取微信登录二维码的.

3.1.1.前端请求

例如:<a href=”/wexinlogin/xxx”>微信登录</a>,当然,后台肯定是要进行映射的.

3.2.1.组装URL,发送请求到微信

3.2.1.1.怎么组装?

https://open.weixin.qq.com/connect/qrconnect?appid=自己的APPID&redirect_uri=回调&response_type=code&scope=按情况填写&state=随机数#wechat_redirect

!这个是服务器向微信开放平台发送的,目的就是返回二维码,供用户扫.

3.2.1.2.怎么发,拿什么发?

居然是在服务器上向其它网络获取资源,那么必定就是HttpClient(原谅我见识短,大家补充…)

package weixinlogin;

import net.sf.json.JSONObject; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.util.EntityUtils;

import java.io.IOException;

/*** * 微信扫码登录:工具类 */ public class wexinUtils { //参数 public static final String APPID = “”; public static final String APPSECRETID = “”; //回调地址 public static final String CALLBACK = “”;

/*** * * @param url : 组装发送请求的URL * @return * 该方法用于发送请求到微信开放平台,将返回值转化为json */ public static JSONObject getjson(String url) throws IOException {

//初始化JSONObject JSONObject jsonObject = null;

//初始化HttpClient(该对象用于在服务器内部发送请求) DefaultHttpClient client = new DefaultHttpClient();

//GET请求 HttpGet httpGet = new HttpGet(url);

//发送请求 HttpResponse response = client.execute(httpGet);

//获取返回结果 HttpEntity entity = response.getEntity();

//内容不为null if(entity!=null){ //转化字符为为JSON String result = EntityUtils.toString(entity,”UTF-8″); //转化为Json jsonObject = jsonObject.fromObject(result); } //释放 httpGet.releaseConnection(); return jsonObject; }

}

!这里回调地址,跟之前审核的哪个没有一点关系,这个URL是服务器真实存在的,并且能够访问得该资源.而哪个只是一个字符串,没有太多的作用(这是我的看法啦…,真实的希望各位大佬解释一下啦…)

3.3.1. 回调数据怎么获取?

经历上次请求后,如果用户选择了登录授权,那么微信开放平台就会将请求发到之前我们指定的URL去.这个时候就会有CODE返回了,通过这个Code与AppID\SecretID获取Access_token,就可以获取到OPENID,这个OPENID就是微信用户唯一标识,通过这个标识,我们又可以组装URL,进而获取当前微信用户信息.

代码语言:javascript
代码运行次数:0
运行
复制
package weixinlogin;

import io.cite.CiteRuntime;
import io.cite.plugin.cookie.cookie;
import io.cite.plugin.database.db;
import net.sf.json.JSONObject;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.sql.SQLException;
import java.util.Map;

/***
 *  微信登录成功回调,获取access_token
 */
public class weixincallback {

    public void execute(CiteRuntime runtime) throws IOException, SQLException {

        //请求,响应对象
        HttpServletRequest request = runtime.getRequest();
        HttpServletResponse response = runtime.getResponse();

        //获取Code
        String Code = request.getParameter("code");

        //通过Code/AppID/SecretID获取access_token
        String url  ="https://api.weixin.qq.com/sns/oauth2/access_token?appid=" + wexinUtils.APPID +
                "&secret=" + wexinUtils.APPSECRETID +
                "&code=" + Code +
                "&grant_type=authorization_code";

        //发送请求获取access_token
        JSONObject jsonobject =  wexinUtils.getjson(url);


        //微信登录用户标识(用于处理业务)
        String openid = jsonobject.getString("openid");

        //获取access_token
        String access_token = jsonobject.getString("access_token");


        //组装获取用户信息URL
        String userinfor  ="https://api.weixin.qq.com/sns/userinfo/access_token?appid=" + access_token + "&openid="+ openid
                            + "&lang=zh_CN";

        //发送请求,获取用户信息
        JSONObject userinforobj = wexinUtils.getjson(userinfor);

        //业务处理...

    }
}

最终结果:

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/132105.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档