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

微信开放平台—-微信扫码登录告知:所有操作是基于域名已备案,并且具有企业级微信公众号!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);

        //业务处理...

    }
}

最终结果:微信开放平台----微信扫码登录

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • linux命令之groupadd_linux umask命令

    linux命令之groupadd_linux umask命令usermod[选项]登录名usermod修改用户基本信息。(1).常用选项(2).实例修改用户UID修改登录shell修改主目录并转移主目录内容,-m-d选项修改说明信息(注释信

    2022年8月5日
    5
  • Linux常用基本命令

    Linux常用基本命令目录文件管理cd切换目录cd绝对路径/相对路径 切换目录cd.. 返回上一级目录cd../.. 返回上两级目录cd/ 进入根目录ls列出目录ls 列出文件(不包括隐藏文件)ls-a 列出所有文件(包括隐藏文件)ls-l 列出文件和详细信息(不包括隐藏文件)ls-al 列出文件和详细信息(包括隐藏文件)pwd显示当前路径pwd 显示当前用户所在目录

    2022年4月11日
    44
  • 测试数据增强_预测模型最佳cutoff值

    测试数据增强_预测模型最佳cutoff值cutout是2017年提出的一种数据增强方法,想法比较简单,即在训练时随机裁剪掉图像的一部分,也可以看作是一种类似dropout的正则化方法。ImprovedRegularizationofConvolutionalNeuralNetworkswithCutoutpaper:https://arxiv.org/pdf/1708.04552.pdfcode:https://github.com/uoguelph-mlrg/Cutoutcutout采用的操作是随机裁剪掉图像中..

    2022年9月25日
    3
  • mysql通配符_mysql通配符使用

    mysql通配符_mysql通配符使用mysql通配符使用:w3cchool在mysql查询中,经常会用到通配符,而且mysql的通配符和pgsql是有所不同的,甚至mysql中还可以使用正则表达式。本文就为大家带来mysql查询中通配符的使用。SQL模式匹配:“_”匹配单个字符,”\_”匹配”_”“%”匹配任意个字符,包括零个字符sql模式下的匹配,缺省是对于字母的大小写没有要求,并且sql模式下,“=”或”!=”是不能在模…

    2022年6月24日
    34
  • python机器学习手写算法系列——线性回归「建议收藏」

    python机器学习手写算法系列——线性回归「建议收藏」本文致力于手把手教你实现一个最简单的机器学习模型–一元线性回归模型。短短的14行代码,就实现了。希望读完以后,你也能自己实现它。并对线性回归有更好的了解,或者从不了解到了解。

    2022年8月21日
    6
  • vimrc配置_vim环境配置

    vimrc配置_vim环境配置博文背景写代码没vim难受,装个vim它对于快捷键的设置并不能和visualstudio一样很方便地设置将所有快捷键映射到vim插件,所以记录配置后的文件非常有必要。具体操作切换vim插件状态的快捷键设置:文件路径:C:\Users\Administrator\AppData\Roaming\JetBrains\WebStormXXX\options\vim_settings.xml文件内容:<application><componentname=”VimEdito

    2022年9月27日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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