大家好,又见面了,我是你们的朋友全栈君。
告知:所有操作是基于域名已备案,并且具有企业级微信公众号!
1.准备工作
1.1.注册微信开放平台帐号
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.怎么组装?
!这个是服务器向微信开放平台发送的,目的就是返回二维码,供用户扫.
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();
//获取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);
//业务处理...
}
}
最终结果:
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/132105.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...