SpringCloud : 接入 微信公众号平台(四)、获取微信用户信息接口

代码参考:

复制代码
import com.phpdragon.wechat.proxy.config.WeChatConfig;
import com.phpdragon.wechat.proxy.dto.mp.user.GetOauthUserInfoDto;
import com.phpdragon.wechat.proxy.dto.mp.user.GetOpenidDto;
import com.phpdragon.wechat.proxy.dto.mp.user.GetUserInfoDto;
import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.bean.result.WxMpOAuth2AccessToken;
import me.chanjar.weixin.mp.bean.result.WxMpUser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;

@Slf4j
@RequestMapping("/user/")
@RestController
public class UserController {

    @Autowired
    private WeChatConfig weChatConfig;

    /**
     * 通过openid获得基本用户信息
     * 详情请见: https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html#3
     *
     * @param req
     * @return
     */
    @ResponseBody
    @PostMapping("/getUserInfo")
    public WxMpUser getUserInfo(@RequestBody @Valid GetUserInfoDto req) throws WxErrorException {
        WxMpService wxMpService = weChatConfig.getWxMpService(req.getAppId());
        return wxMpService.getUserService().userInfo(req.getOpenid(), req.getLang());
    }

    /**
     * 通过code获得基本用户信息
     * 详情请见:
     * https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html#1
     * https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html#3
     *
     * @param req
     * @return
     */
    @ResponseBody
    @RequestMapping("/getOAuth2UserInfo")
    public WxMpUser getOAuth2UserInfo(@RequestBody @Valid GetOauthUserInfoDto req) throws WxErrorException {
        WxMpService wxMpService = weChatConfig.getWxMpService(req.getAppId());
        WxMpOAuth2AccessToken accessToken = wxMpService.oauth2getAccessToken(req.getCode());
        return wxMpService.getUserService().userInfo(accessToken.getOpenId(), req.getLang());
    }

    /**
     * 用code换取oauth2的openid
     * 详情请见: https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html#1
     *
     * @param req
     */
    @ResponseBody
    @PostMapping("/getOpenid")
    public String getOpenid(@RequestBody @Valid GetOpenidDto req) throws WxErrorException {
        WxMpService wxMpService = weChatConfig.getWxMpService(req.getAppId());
        WxMpOAuth2AccessToken accessToken = wxMpService.oauth2getAccessToken(req.getCode());
        return accessToken.getOpenId();
    }

}
复制代码

 

 

PS:

公众号开发文档wiki

Java开发微信公众号之整合weixin-java-tools框架开发微信公众号

从零实现 Spring Boot 2.0 整合 weixin-java-mp(weixin-java-tools) 获取 openId,用于微信授权

 

Demo 列表

  1. 微信支付 Demo:GitHub码云
  2. 企业号/企业微信 Demo:GitHub码云
  3. 微信小程序 Demo:GitHub码云
  4. 开放平台 Demo:GitHub码云
  5. 公众号 Demo:
    • 使用 Spring MVC 实现的公众号 Demo:GitHub码云
    • 使用 Spring Boot 实现的公众号 Demo(支持多公众号):GitHub码云
    • 含公众号和部分微信支付代码的 Demo:GitHub码云

 

posted @   phpdragon  阅读(1371)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
历史上的今天:
2016-03-24 使用 ssh -R 穿透局域网访问内部服务器主机,反向代理 无人值守化
点击右上角即可分享
微信分享提示