>>分享Java Web开发技术,并且对孙卫琴的《Tomcat与Java Web开发技术详解》提供技术支持 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 24796 个阅读者 刷新本主题
 * 贴子主题:  Java微信Java SDK方式进行网页授权 回复文章 点赞(0)  收藏  
作者:flybird    发表时间:2024-02-12 07:15:15     消息  查看  搜索  好友  邮件  复制  引用

微信Java SDK开发文档(2.0.0)地址:https://github.com/wechat-group/weixin-java-tools/wiki

微信Java SDK使用说明:https://github.com/wechat-group/weixin-java-tools/

SDK作用:他已经把微信大部分功能都做好了,我们只需要进行配置,再调用其方法就可以完成微信的一些功能开发。

目前开源的微信公众号SDK有:jfinal-weixin,weixin-java-tools,fastweixin,weixin-popular
本次使用weixin-java-tools。

1.在maven中添加依赖
<!-- 微信公众号 -->
<dependency>
  <groupId>com.github.binarywang</groupId>
  <artifactId>weixin-java-mp</artifactId>
  <version>3.0.0</version>
</dependency>

2.在项目中进行配置,

一般配置信息不会在项目代码中进行配置,会统一做一个全局配置

package com.wechat.order.config;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

/*微信公众号账号设置*/
@Data//使用了lombok依赖,相当于在代码中getter和setter的作用
@Component
@ConfigurationProperties(prefix = "wechat")//账号信息写在了application.yml中。
public class WeChatAccountConfig {

    private String mpAppId;

    private String mpAppSecret;
}
package com.wechat.order.config;

import me.chanjar.weixin.mp.api.WxMpConfigStorage;
import me.chanjar.weixin.mp.api.WxMpInMemoryConfigStorage;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.api.impl.WxMpServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;

/*微信公众号配置*/
@Component
public class WeChatMpConfig {

    @Autowired
    private WeChatAccountConfig weChatAccountConfig;

    //把你要实例化的对象转化成一个Bean,放在IoC容器中
    @Bean
    public WxMpService wxMpService() {
        WxMpService wxService = new WxMpServiceImpl();// 实际项目中请注意要保持单例,不要在每次请求时构造实例,具体可以参考demo项目
        wxService.setWxMpConfigStorage(wxMpConfigStorage());
        return wxService;
    }

    @Bean
    private WxMpConfigStorage wxMpConfigStorage() {
        WxMpInMemoryConfigStorage config = new WxMpInMemoryConfigStorage();
        config.setAppId(weChatAccountConfig.getMpAppId()); // 设置微信公众号的appid
        config.setSecret(weChatAccountConfig.getMpAppSecret()); // 设置微信公众号的app corpSecret
        return config;
    }
}


3.调用方法

package com.wechat.order.controller;

import com.wechat.order.enums.ResultEnum;
import com.wechat.order.exception.SellException;
import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.common.api.WxConsts;
import me.chanjar.weixin.common.exception.WxErrorException;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.bean.result.WxMpOAuth2AccessToken;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import java.net.URLEncoder;

@Controller
@RequestMapping("/wechat")
@Slf4j//日志注解
public class WeChatController {
    @Autowired
    private WxMpService wxMpService;

     /**
     * 换取微信用户openId
     * @param returnUrl
     * @return
     */
    @GetMapping("/authorize")
    public String authorize(@RequestParam("returnUrl")String returnUrl) {
        //1.配置(在上步已配置完毕)
        //2.调用方法
        String url = "http://e724bad2.ngrok.io/sell/wechat/userInfo";//实际项目中,网站根目录应该做一个全局配置,此处为了方便,直接写
        String redirectUri = wxMpService.oauth2buildAuthorizationUrl(url, WxConsts.OAuth2Scope.SNSAPI_USERINFO, URLEncoder.encode(returnUrl));
        log.info("redirectUri={}", redirectUri);//日志
        return "redirect:" + redirectUri;//跳转
    }

    /*获得用户信息*/
    @GetMapping("/userInfo")
    public String userInfo(@RequestParam("code") String code,
                           @RequestParam("state") String returnUrl) {
        //获得access token
        WxMpOAuth2AccessToken wxMpOAuth2AccessToken = new WxMpOAuth2AccessToken();
        try {
            wxMpOAuth2AccessToken = wxMpService.oauth2getAccessToken(code);
        }catch (WxErrorException e){
            log.error("【微信网页授权】{}",e);
            throw new SellException(ResultEnum.WECHAT_MP_ERROR);//授权失败抛出异常,此方法同学们自行编写,若不会可删除此行。
        }
        //获取openId
        String openId = wxMpOAuth2AccessToken.getOpenId();
        log.info("openId={}",openId);
        return "redirect:" + returnUrl+"?openid="+openId;
    }
}
笔者为学生,初次写博客。若写的不好之处,请大家见谅,指出。
---------------------
作者:xsg6509
转自:https://blog.csdn.net/xsg6509/article/details/80295807



程序猿的技术大观园:www.javathinker.net
  Java面向对象编程-->Java语言的基本语法和规范
  JavaWeb开发-->JSP中使用JavaBean(Ⅱ)
  JSP与Hibernate开发-->域对象在持久化层的四种状态
  Java网络编程-->Java网络编程入门
  精通Spring-->绑定表单
  Vue3开发-->绑定CSS样式
  Servlet@WebFilter注解方式——过滤器链的执行顺序
  JSP 调试 技巧
  Servlet 类的包名,存放路径和打包
  Servlet 处理日期
  Apache网页与安全优化——网页压缩及缓存(理论实践相结合!...
  深入解读HTTP Session
  Servlet的高级运用技巧:备注、模块化、异步处理、优化文件上...
  在Tomcat9中配置HTTP/2
  jsp从数据库获取数据填充下拉框实现二级联动菜单的方法
  开发Web服务的几种框架的对比:XFire和Axis2
  JavaWeb面试题总结
  Java EE改名Jakarta EE
  观看视频:孙卫琴讲解的Servlet等对象的生命周期,生动直观!
  欢迎读者们为《Tomcat与JavaWeb开发技术详解》书的升级提出宝...
  如何修改request的parameter的几种方式
  更多...
 IPIP: 已设置保密
楼主      
1页 0条记录 当前第1
发表一个新主题 开启一个新投票 回复文章


中文版权所有: JavaThinker技术网站 Copyright 2016-2026 沪ICP备16029593号-2
荟萃Java程序员智慧的结晶,分享交流Java前沿技术。  联系我们
如有技术文章涉及侵权,请与本站管理员联系。