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

微信开放平台—-微信扫码登录告知:所有操作是基于域名已备案,并且具有企业级微信公众号!1.准备工作   1.1.注册微信开放平台帐号       https://open.weixin.qq.com   1.2.创建应用(网站应用),填写资料https://open.weixin.qq.com/cgi-bin/appcreate?t=manage/createWeb&type=…

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

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

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();

        //获取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账号...

(0)


相关推荐

  • sin的傅里叶变换公式_傅里叶变换的由来及复数下的傅里叶变换公式证明

    sin的傅里叶变换公式_傅里叶变换的由来及复数下的傅里叶变换公式证明1、考虑到一个函数可以展开成一个多项式的和,可惜多项式并不能直观的表示周期函数,由于正余弦函数是周期函数,可以考虑任意一个周期函数能否表示成为一系列正余弦函数的和。假设可以,不失一般性,于是得到:f(t)=A0+∑(n=1,∞)Ansin(nωt+Φn)2、将后面的正弦函数展开:Ansin(nωt+Φn)=AnsinΦncosnωt+AncosΦnsinnωt令a0/2=A0,an…

  • war3辅助工具_魔兽世界修改器

    war3辅助工具_魔兽世界修改器War3tools魔兽工具完成于2012年5月,工具包含:版本转换,注册表修复,一键启动游戏,以及将网上好用的改建精灵内置其中。War3tools魔兽工具还可以将自己的工具或者魔兽对战平台加入启动项目,只需在我的工具中添加即可,操作简单,功能实用。希望War3tools魔兽工具能给您的游戏带来方便。@risingsun下载地址:http://pan.baidu.com/share/li

  • IDEA全局查找快捷键不管用(不起作用、没反应)[通俗易懂]

    IDEA全局查找快捷键不管用(不起作用、没反应)[通俗易懂]这种情况一般都是输入法快捷键冲突请参照博客https://blog.csdn.net/weixin_44018093/article/details/91542244进行修复

  • 字符串全排列cpp_输出字符串的全排列

    字符串全排列cpp_输出字符串的全排列String对象描述字符串是JavaScript的一种基本的数据类型String类定义了大量操作字符串的方法,例如从字符串中提取字符或子串,或者检索字符或子串。需要注意的是:JavaScript的字符串是不可变的(immutable),String类定义的方法都不能改变字符串的内容。像String.toUpperCase()这样的方法,返回的是全新的字符串,而不是修改原始字符串。String对象属性属性描述constructor对创建该对象的函数的引用

    2022年10月30日
  • binder原理和实现机制(金属强化机制及其强化原理)

    参考自大神https://zhuanlan.zhihu.com/p/35519585参考自大神https://blog.csdn.net/carson_ho/article/details/73560642一前言二Linux传统的进程间通信原理简述2.1Liunx中跨进程通信主要有三个关键信息2.2Linux下的传统IPC通信原理三Binder跨进程通信原理四…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号