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

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,进而获取当前微信用户信息.

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();//获取CodeString Code = request.getParameter("code");//通过Code/AppID/SecretID获取access_tokenString url  ="https://api.weixin.qq.com/sns/oauth2/access_token?appid=" + wexinUtils.APPID +"&secret=" + wexinUtils.APPSECRETID +"&code=" + Code +"&grant_type=authorization_code";//发送请求获取access_tokenJSONObject jsonobject =  wexinUtils.getjson(url);//微信登录用户标识(用于处理业务)String openid = jsonobject.getString("openid");//获取access_tokenString access_token = jsonobject.getString("access_token");//组装获取用户信息URLString userinfor  ="https://api.weixin.qq.com/sns/userinfo/access_token?appid=" + access_token + "&openid="+ openid+ "&lang=zh_CN";//发送请求,获取用户信息JSONObject userinforobj = wexinUtils.getjson(userinfor);//业务处理...}
}

最终结果:

微信开放平台----微信扫码登录相关推荐

  1. 微信开放平台实现扫码登录(java)

    微信第三方登录准备阶段 微信官方文档 准备工作 在进行第三方授权登录之前,需要在微信开放平台注册开发者账号,拿到相应的AppId和AppSecret以及redirect_uri,即可进行授权接入流程 ...

  2. 微信开放平台·微信公众号接口调用报错【“errcode“:48001“errmsg“:“api unauthorized...“】

    目录 问题描述 使用场景 解决方案 问题描述 使用场景 复现场景: 微信开放平台·微信公众号链接:微信开发平台 按照文档说明通过 code 获取 access_token 检验授权凭证(access_ ...

  3. 微信第三方扫描登录 java源代码_微信开放平台基于网站应用授权登录源码(java)...

    1. 第三方发起微信授权登录请求,微信用户允许授权第三方应用后,微信会拉起应用或重定向到第三方网站,并且带上授权临时票据code参数: 2. 通过code参数加上AppID和AppSecret等,通过 ...

  4. 微信公众号开发扫码登录(java版)

    文章有不当之处,欢迎指正,如果喜欢微信阅读,你也可以关注我的微信公众号:好好学java,获取优质学习资源. 商家信息管理系统登录时可以用微信扫码登录. 参考文档是微信开放平台,**着重需要关注文档(开 ...

  5. 一文详析微信和淘宝扫码登录背后的实现原理!

    关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 作者:imtech my.oschina.net/u/4231722/blog/3 ...

  6. 面试官:说说微信和淘宝扫码登录背后的实现原理?

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | my.oschina.net/u/423172 ...

  7. 面试官:聊聊微信和淘宝扫码登录背后的实现原理?

    本文来源: my.oschina.net/u/4231722/blog/3154805 <Java工程师面试突击(第3季)>重磅升级,由原来的70讲增至140讲,内容扩充一倍,升级部分内容 ...

  8. 微信和淘宝扫码登录背后的实现原理

    点击上方"Java基基",选择"设为星标" 做积极的人,而不是积极废人! 源码精品专栏 原创 | Java 2019 超神之路,很肝~ 中文详细注释的开源项目 ...

  9. 微信电脑版只能扫码登录的原因,你一定想不到

    来源:电脑报CQCPCW 谁能想到,微信原本是作为一款社交软件,如今却成了很多上班族使用频率最高的办公软件.很多人电脑上安装了PC版微信,工作聊天两不误,传输文件也算方便. 但微信PC版总是不尽人意, ...

  10. 阿里面试官:分别说说微信和淘宝扫码登录背后的实现原理

    作者:imtech my.oschina.net/u/4231722/blog/3154805 1.引言 扫码登录这个功能,最早应该是微信的PC端开始搞,虽然有点反人类的功能(不扫码也没别的方式登录) ...

最新文章

  1. Java回调函数的理解
  2. (pwn) C语言 write函数且使用write函数泄露 libc版本
  3. python 项目管理_【Python基础(十三)】文件的操作(II)
  4. [vue] 跟keep-alive有关的生命周期是哪些?描述下这些生命周期
  5. 网络存储 linux 访问,Linux基础教程学习笔记28——使用Samba访问网络存储
  6. 速度提升一倍,无需实例掩码预测即可实现全景分割
  7. 3 - Spring AOP
  8. 新能源充电桩后台管理系统平台
  9. 快递100支持的物流公司
  10. 有向图和无向图转化为邻接表后链表中结点个数
  11. MT【337】糖水不等式
  12. API-天气预报接口详情
  13. 云脉OCR文档管理软件档案加工管理必备
  14. YS-FS150型电缆防水接头的操作步骤
  15. R语言--模型的定阶、估计和显著性检验
  16. Jenkins 流水线语法 02 片段生成器和声明式语法生成器
  17. 手机网站常用的推广方式有哪些
  18. [计算机、网络相关历史]unix简史
  19. 临危受命 MDOP企业桌面管理的价值
  20. 操作系统基础知识点(从题目中总结)期末复习总结 终极版 ctrl+f 寻找你想要的答案

热门文章

  1. C语言程序判断一个数是否是素数,C语言中怎么判断一个数是否是素数(即质数)...
  2. mysql begin tran_SQL事务用法begin tran,commit tran和rollback tran的用法
  3. uni-app获取微信openid及其他信息
  4. JAVA----JSON序列化错误:InvalidDefinitionException: No serializer found for class org.apache.ibatis.execut
  5. 如何做蛋白质互作网络图
  6. linux jvm gc日志分析,JVM之GC统计以及日志分析
  7. 软件测试面试,面试官最后问:你有什么要问我的吗?应该如何回答
  8. MSE(误差平方和)/RMSE/R²/TSS/RSS
  9. 思科模拟器CiscoPacketTracer下载
  10. kinect体感绿幕抠像,AR虚拟互动拍照,体感抠像拍照