利用wxjava实现网站集成微信登录功能,核心代码竟然不超过10行[通俗易懂] -金沙1005

利用wxjava实现网站集成微信登录功能,核心代码竟然不超过10行[通俗易懂]最近网站pc端集成微信扫码登录,踩了不少坑,在此记录下实现过程和注意事项。本文目录一、微信开放平台操作步骤1.创建“网站应用”2.获取appid和appsecret二、开发指南三、开发实战1、pom.xml引入jar包2、配置文件添加对应的配置3、初始化配置4、控制层核心代码四、

最近网站pc端集成微信扫码登录,踩了不少坑,在此记录下实现过程和注意事项。

本文目录

一、微信开放平台操作步骤

  1.创建“网站应用”

  2.获取appid和appsecret

二、开发指南三、开发实战

  1、pom.xml引入jar包

  2、配置文件添加对应的配置

  3、初始化配置

  4、控制层核心代码

四、运行效果

  1.构造pc端链接

  2.微信扫描生成的二维码

  3.获取微信用户信息

一、微信开放平台操作步骤

微信开放平台地址:https://open.weixin.qq.com

一定要注意,网站集成微信登录需要在微信开放平台操作,它和微信公众平台不一样,虽然双方最后的用户唯一标识都是openid,但是是不互通的。如果开发平台想和公众平台相互通,两个平台得互相绑定,然后获取唯一识别的unionid。

下面说下在开放平台上的操作步骤:

1.创建“网站应用”

由于到对接pc网站登录,所以创建“网站应用”,操作截图如下:

利用wxjava实现网站集成微信登录功能,核心代码竟然不超过10行[通俗易懂]

利用wxjava实现网站集成微信登录功能,核心代码竟然不超过10行[通俗易懂]

新建网站应用截图

2.获取appid和appsecret

等微信审核通过后,会分配对应的appid,appsecret需要管理员扫描生成,生成后截图如下:

利用wxjava实现网站集成微信登录功能,核心代码竟然不超过10行[通俗易懂]

二、开发指南

微信oauth2.0授权登录让微信用户使用微信身份安全登录第三方应用或网站,在微信用户授权登录已接入微信oauth2.0的第三方应用后,第三方可以获取到用户的接口调用凭证(access_token),通过access_token可以进行微信开放平台授权关系接口调用,从而可实现获取微信用户基本开放信息和帮助用户实现基础开放功能等,整体流程为:

1. 第三方发起微信授权登录请求,微信用户允许授权第三方应用后,微信会拉起应用或重定向到第三方网站,并且带上授权临时票据code参数;
2. 通过code参数加上appid和appsecret等,通过api换取access_token;
3. 通过access_token进行接口调用,获取用户基本数据资源或帮助用户实现基本操作。

希望我今天分享的这篇文章可以帮到您。

三、开发实战

项目中使用了开源项目wxjava,wxjava源码地址(https://github.com/wechat-group/wxjava);

先新建要给spring boot项目

新建好项目后,继续按照下面步骤操作即可。

1、pom.xml引入jar包

<dependency>
    <groupid>com.github.binarywanggroupid>
    <artifactid>weixin-java-mpartifactid>
    <version>4.2.0version>
dependency>

2、配置文件添加对应的配置

配置appid和appsecret,application.yml内如下:

wx:
mp:
useredis: true
configs:
- appid: xxxxxxxxxxxxx
secret: xxxxxxxxx
token: xxxxxxxxxxxx
aeskey: xxxxxxxxxxx

3、初始化配置

wxmpproperties.java代码如下:

import lombok.data;
import org.springframework.boot.context.properties.configurationproperties;
import java.util.list;
/**
 * wechat mp propertie【微信公众号】
 *
 * @author xiaoqiang
 */
@data
@configurationproperties(prefix = "wx.mp")
public class wxmpproperties {
    /**是否使用redis存储access token*/
    private boolean useredis;
    /**redis 配置*/
    private redisconfig redisconfig;
    @data
    public static class redisconfig {
        /**redis服务器 主机地址*/
        private string host;
        /**redis服务器 端口号*/
        private integer port;
    }
    /**多个公众号配置信息*/
    private list configs;
    @data
    public static class mpconfig {
        /**设置微信公众号的appid*/
        private string appid;
        /**设置微信公众号的app secret*/
        private string secret;
        /**设置微信公众号的token*/
        private string token;
        /**设置微信公众号的encodingaeskey*/
        private string aeskey;
    }
}

 

wxmpconfiguration.java代码如下:

import lombok.allargsconstructor;
import me.chanjar.weixin.common.redis.redistemplatewxredisops;
import me.chanjar.weixin.mp.api.wxmpservice;
import me.chanjar.weixin.mp.api.impl.wxmpserviceimpl;
import me.chanjar.weixin.mp.config.impl.wxmpdefaultconfigimpl;
import me.chanjar.weixin.mp.config.impl.wxmpredisconfigimpl;
import org.springframework.beans.factory.annotation.autowired;
import org.springframework.boot.context.properties.enableconfigurationproperties;
import org.springframework.context.annotation.bean;
import org.springframework.context.annotation.configuration;
import org.springframework.data.redis.core.stringredistemplate;
import java.util.list;
import java.util.stream.collectors;
/**
 * 公众号配置
 * wechat mp configuration
 *
 * @author xiaoqiang
 */
@allargsconstructor
@configuration
@enableconfigurationproperties(wxmpproperties.class)
public class wxmpconfiguration {
    private final wxmpproperties properties;
    @autowired
    private stringredistemplate redistemplate;
    @bean
    public wxmpservice wxmpservice() {
     // 代码里 getconfigs()处报错的同学,请注意仔细阅读项目说明,你的ide需要引入lombok插件!!!!
final list configs = this.properties.getconfigs(); if (configs == null) { throw new runtimeexception("添加相关配置"); } wxmpservice service = new wxmpserviceimpl(); service.setmulticonfigstorages(configs .stream().map(a -> { wxmpdefaultconfigimpl configstorage; if (this.properties.isuseredis()) { configstorage = new wxmpredisconfigimpl(new redistemplatewxredisops(redistemplate), a.getappid()); } else { configstorage = new wxmpdefaultconfigimpl(); } configstorage.setappid(a.getappid()); configstorage.setsecret(a.getsecret()); configstorage.settoken(a.gettoken()); configstorage.setaeskey(a.getaeskey()); return configstorage; }).collect(collectors.tomap(wxmpdefaultconfigimpl::getappid, a -> a, (o, n) -> o))); return service; } }

4、控制层核心代码

@slf4j
@controller
@requestmapping("/redirect/{appid}")
public class wxredirectcontroller {
    /**
     * 获取用户信息
     *
     */
    @requestmapping("/getuserinfo")
    public void getbase(httpservletrequest request, httpservletresponse response, @pathvariable string appid, @requestparam("code") string code) {
        wxmpservice mpservice = wxmpconfiguration.getmpservices().get(appid);
        try {
            wxmpoauth2accesstoken accesstoken = mpservice.oauth2getaccesstoken(code);
            log.info("accesstoken={}", json.tojsonstring(accesstoken));
            wxmpuser wxmpuser = mpservice.oauth2getuserinfo(accesstoken, null);
            log.info("wxmpuser={}", json.tojsonstring(wxmpuser));
        } catch (exception e) {
            log.error("获取用户信息异常!", e);
        }
    }
}

 

四、运行效果

1.构造pc端链接

https://open.weixin.qq.com/connect/qrconnect?appid=wx12345678redirect_uri=http://www.test.com/redirect/wx12345678/getuserinfo&response_type=code&scope=snsapi_login&state=state#wechat_redirect

打开上面链接后截图如下:

利用wxjava实现网站集成微信登录功能,核心代码竟然不超过10行[通俗易懂]

2.微信扫描生成的二维码

微信扫描后手机端截图如下:

利用wxjava实现网站集成微信登录功能,核心代码竟然不超过10行[通俗易懂]

微信用户使用微信扫描二维码并且确认登录后,pc端会跳转到

http://www.test.com/redirect/wx12345678/getuserinfo?code=code&state=state

3.获取微信用户信息

控制层代码可以接收到上code和state参数,根据这两个参数可以获取微信用户信息,请求过来后打印用户信息的日志如下:

[http-nio-8104-exec-2] info  c.t.m.s.c.wxredirectcontroller - accesstoken={"accesstoken":"24_vwnvrsv9vmr7qoqhjkroer93bhspg","expiresin":7200,"openid":"orxsdsuh6scakof3d1i4d3c","refreshtoken":"24_wmknxcn9ff2pl2xhlfw-ky96p6zgiqfjy8lmiop_camzohem","scope":"snsapi_login","unionid":"ojxukwffosyu1oc6of2h6pti"}
[http-nio-8104-exec-2] info  c.t.m.s.c.wxredirectcontroller - wxmpuser={"city":"","country":"","headimgurl":"https://thirdwx.qlogo.cn/mmopen/vi_32/q3auhgzwzm4ibeasuovif3qr4qxjnnwh4q1wiawcfnfzkgmzvqubponr0ha3micwsu1ltblq7phimdysc2nic6ouicq/132","language":"","nickname":"阿白","openid":"orxsdsuh6scakof3d1i4d3c","privileges":[],"province":"","sex":0,"sexdesc":"未知","unionid":"oadukwvfcpmjosyu1oc2of2h6pti"}
到此pc网站集成微信登录已经全部实现完成了,有问题欢迎留言沟通哦!
金沙1005的版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由思创斯整理,转载请注明出处:https://ispacesoft.com/379108.html

(0)


相关推荐

  • java 14中对switch的增强,终于可以不写break了面对这样的if语句,你是不是很难受呢? if (flag == 1) { log.info("didispace.com: 1"); } else if (flag == 2) {

  • java jdk8下载 (jdk-8u251-windows-x64和jdk-8u271-linux-x64.tar)jdk-8u251-windows-x64和jdk-8u271-linux-x64.tar链接:https://pan.baidu.com/s/1gci6asifhehjy8f48qh39q提取码:l289复制这段内容后打开百度网盘手机app,操作更方便哦jdk国国内金沙1005官网下载地址:https://www.oracle.com/cn/java/technologies/javase-downloads.htmljdk8国内金沙1005官网下载地址:https://www.oracle.com/cn/j

  • java fakepath_20140920遇到的问题–java—-js——tomcat7.0 onselect灵敏度 fakepath等若干问题…首先说第一个问题:相信大家在配置tomcat的时候,运行之后有时候出现一个8005的问题,这个解决很简单:提示错误是:地址已经被占用,其实就是含有8005这个进程已经在使用了,具体应该是这样的:tcp127.0.0.1:800522802280指的是pid强制性杀死该进程是无用的:{方法是这样的:cmd:窗口:taskkill/pid2280/f如果不出意外的话他会弹出:没有权…

  • java获取微秒_java获取时分秒()为获取当前系统时间,也可使用当前时间戳获取时间戳三种方法执行效率比较:importjava.util.calendar;importjava.util.date;publicclasstimetest{……java获得系统时间转换成字符串关键字:java有时候经常用到java时间转换如字符串转换成时间,时间转换成字符串1.long字符串转换成…_java获取微秒

  • vscode配置java代码运行环境[通俗易懂]vscode配置java代码运行环境本文章适合哪类群体如何去运行一个java文件安装java插件运行java代码本篇文章的前置条件是您已安装vscode本文章适合哪类群体想运行一个简单的java文件,又不想去启动庞大的ide。如何去运行一个java文件笔者最近更偏爱于vscode,所以决定在vscode中去运行java代码。vscode本身就是一个“平平无奇”的编辑器,之所以深受代码工作者喜爱,源于其强大的插件。因此,无论是c 编译运行环境还是java运行环境,只需要安装相应的插件即可满足。

  • 基于java.lang.illegalargumentexception异常报错问题及解决「终于解决」这篇文章主要介绍了基于java.lang.illegalargumentexception异常报错问题及金沙1005的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  • java规约-卫语句(guardclauses)2017-9-29/0评/码移动设备上继续阅读首先说一下“卫语句”是什么东东?卫语句就是把复杂的条件表达式拆分成多个条件表达式,比如一个很复杂的表达式,嵌套了好几层的if-then-else语句,转换为多个if语句,实现它的逻辑,这多条的if语句就是卫语句.其实几行简单的代码说明一下:if(obj!=null…

  • javaswing_java bundlespringboot内嵌容器undertow参数设置配置项:#设置io线程数,它主要执行非阻塞的任务,它们会负责多个连接,默认设置每个cpu核心一个线程#不要设置过大,如果过大,启动项目会报错:打开文件数过多server.undertow.io-threads=16#阻塞任务线程池,当执行类似servlet请求阻塞io操作,undertow会从这个线程池中取得线程#它的值设置取…

    2022年11月16日

发表回复

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

联系js555888金沙老品牌

关注“java架构师必看”公众号

回复4,添加站长微信。

附言:ispacesoft.com网而来。

关注微信
网站地图