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

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

相关推荐

  • Java–LinkedList真的比ArrayList添加元素快?Open JDK JMH带你揭开真相「建议收藏」

    Java–LinkedList真的比ArrayList添加元素快?Open JDK JMH带你揭开真相「建议收藏」【学习背景】欢迎进来学习的小伙伴~不管你是学生,还是职场小白,还是入行1~3年的小伙伴,相信很多小伙伴在面试Java工作岗位时,发现LinkedList和ArrayList这个问题基本是必面的一道题,【面试场景】当面试官问到LinkedList和ArrayList的区别时,可能很多准备得不够充分的小伙伴第一反应的回答仅仅是这样的:LinkedList底层数据结构是链表,添加和删除元素效率比ArrayList高~ArrayList底层数据结构是数组,查询效率比LinkedList高~面试官:哦

  • Linux查看CUDA版本以及cudnn版本号[通俗易懂]

    Linux查看CUDA版本以及cudnn版本号[通俗易懂]文章目录1.查看CUDA版本2.查看cudnn版本1.查看CUDA版本方法1:查看文件cat/usr/local/cuda/version.txt方法2:命令nvcc–version2.查看cudnn版本cat/usr/local/cuda/include/cudnn.h|grepCUDNN_MAJOR-A2输出如下:(图中版本…

  • strstr函数实现

    strstr函数实现strstr()函数用来查找子串的首地址,函数实现如下:char*strstr(char*str1,char*str2){ char*p1=NULL; char*p2=NULL; while(*str1) { p1=str1; p2=str2; while(*p1==*p2&&*p2!=NULL) { p1++; p2…

  • 学习计算机一个很好的免费资料下载网站地址(大家学习网论坛)

    学习计算机一个很好的免费资料下载网站地址(大家学习网论坛)原文发布时间为:2008-07-30——来源于本人的百度文章[由搬家工具导入]http://club.topsage.com子版面本版版规3today全国计算机等级考试版主:妖僧三

  • python垃圾回收机制原理

    python垃圾回收机制原理#python垃圾回收机制详解一、概述:  python的GC模块主要运用了“引用计数(referencecounting)”来跟踪和回收垃圾。在引用计数的基础上,还可以通过标记清除(markandsweep)解决容器(这里的容器值指的不是docker,而是数组,字典,元组这样的对象)对象可能产生的循环引用的问题。通过“分代回收(generationcollection)”以空间换取时间来进一步提高垃圾回收的效率。二、垃圾回收三种机制  1、引用计数  在Python中,大多数对象的生命周

  • html表白代码大全_跨年倒计时源码

    html表白代码大全_跨年倒计时源码html跨年代码,可直接使用,文中有详细使用说明。

    2022年10月21日

发表回复

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

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