Java 后端 本地调试-获取微信公众号 openId

news2024/10/6 14:32:27

Java 后端 本地调试-获取微信公众号 openId

  • 申请测试微信公众号
  • 内网穿透工具
  • 配置公众号
  • 获取用户 openId

申请测试微信公众号

微信测试公众号

内网穿透工具

netapp

配置公众号

  1. 搜索网页账号选项
    在这里插入图片描述
  2. 点击修改,填写内网穿透的域名
    在这里插入图片描述

获取用户 openId

1 第一步:用户同意授权,获取code
2 第二步:通过 code 换取网页授权access_token
3 第三步:刷新access_token(如果需要)
4 第四步:拉取用户信息(需 scope 为 snsapi_userinfo)
5 附:检验授权凭证(access_token)是否有效
– 来源https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html

第2步 就可以获取到 openId 了
代码如下

package com.scd.serverless.controller;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

import javax.servlet.http.HttpServletRequest;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.UUID;

/**
 * @author James
 */
@RestController
@RequestMapping(value = "/wx")
public class WxController {
    private static final Logger LOGGER = LoggerFactory.getLogger(WxController.class);

    public static final String MAP_URL = "http://shootercheng.nat300.top";

    public static final String WE_CHAT_APP_ID = "wxfcfbe0c738b569a5";

    public static final String WE_CHAT_APP_SECRET = "002b379cbe62689eab9d0a7cfc227dd8";

    public static final String WE_CHAT_CLIENT_URL = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=%s&redirect_uri=%s&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect";

    public static final String WE_CHAT_ACCESS_TOKEN_URL = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=%s&secret=%s&code=%s&grant_type=authorization_code";

    @Autowired
    private RestTemplate restTemplate;


    @RequestMapping(value = "/config")
    public String testConfig(HttpServletRequest request) {
        String signature = request.getParameter("signature");
        // 时间戳
        String timestamp = request.getParameter("timestamp");
        // 随机数
        String nonce = request.getParameter("nonce");
        // 随机字符串
        String echostr = request.getParameter("echostr");
        LOGGER.info("config return info {}", echostr);
        // TODO check
        return echostr;
    }

    @RequestMapping(value = "/client")
    public String genWxUrl() throws UnsupportedEncodingException {
        String redirectUrl = MAP_URL + "/wx/callback?token=" + UUID.randomUUID();
        String encodeUrl = URLEncoder.encode(redirectUrl, StandardCharsets.UTF_8.name());
        String clientUrl = String.format(WE_CHAT_CLIENT_URL, WE_CHAT_APP_ID, encodeUrl);
        LOGGER.info("client url {}", clientUrl);
        return clientUrl;
    }

    @RequestMapping(value = "/callback")
    public String wxCallBack(HttpServletRequest request) throws JsonProcessingException {
        String code = request.getParameter("code");
        String token = request.getParameter("token");
        LOGGER.info("current token {}", token);
        // 校验 token
        String tokenUrl = String.format(WE_CHAT_ACCESS_TOKEN_URL, WE_CHAT_APP_ID, WE_CHAT_APP_SECRET, code);
        String result = restTemplate.getForObject(tokenUrl, String.class);
        LOGGER.info("token result {}", result);
        return result;
    }
    
}

debug启动服务之后,执行以下步骤

  1. 获取微信客户端url
    访问 http://shootercheng.nat300.top/wx/client
    在这里插入图片描述
    在这里插入图片描述
  2. 使用微信打开此地址
    在这里插入图片描述
    如图,已在本地调试获取到 openId

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/28265.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

国家高新技术企业的好处

国家高新技术企业的好处:享受税收减免优惠政策;国家科研经费支持和财政拨款;国家级的资质认证硬招牌;提升企业品牌形象;促进企业科技转型;提高企业市场价值;提高企业资本价值;吸引市…

【电脑讲解】电脑如何实现双系统

核心提示:电脑双系统,大家应该不会太陌生,有的网吧就装的是双系统,双系统可以满足不同人群的需要,可以这样说,一个系统可以专门工作使用,另一个可以供玩游戏使用,(电脑硬…

[Linux打怪升级之路]-环境变量

前言 作者:小蜗牛向前冲 名言:我可以接受失败,但我不能接受放弃 如果觉的博主的文章还不错的话,还请点赞,收藏,关注👀支持博主。如果发现有问题的地方欢迎❀大家在评论区指正。 目录 一、认识环…

一文详解JVM的内存结构

目录 前言 内存结构 程序计数器 虚拟机栈 本地方法栈 堆内存 方法区 内部组成 前言 Java的JVM解决的问题是跨操作系统问题。程序员只需要专注于代码的编写,这些代码能够在不同的操作系统Mac,Linux和Windows运行的前提是JVM。JVM还提供了垃圾回收机制…

Linux终端操作-Xshell和Xftp(家庭版)

目录一,终端操作二,软件安装1,Xshell, Xftp下载2,Xshell安装3,Xftp安装三,使用1,Xshell建立连接2,Xftp上传文件一,终端操作 上一篇博客记录了如何本地安装虚拟机并实现本…

SpringSecurity(十五)---OAuth2的运行机制(上)-OAuth2概念和授权码模式讲解

一、前言 鸽了很久,其实也因为自己确实比较忙,加之自己在造demo的时候也遇到了很多问题,并且网上这方面的解答非常之少,不过也正是因为少,才更加让我想写这样的知识分享,最终,在一篇博客的解答…

中文drupal教程(4)Session会话系统

Session(会话)在网站中扮演非常重要的角色,储存临时用户数据、登录数据等等都用到了它,Drupal使用到了Symfony的Session组件,该组件非常强大灵活,drupal在此基础上有所改造和扩展,要理解Symfony…

企业微信接口测试实战(一)

本文为在霍格沃兹测试开发学社中学习到的一些技术,写出来分享给大家,希望有志同道合的小伙伴可以一起交流技术,一起进步~ 霍格沃茨启发: 测试开发进阶班>接口自动化测试>企业微信接口测试实战 企业微信接口测试实战 一、准备环境二、脚本实现2.1、 获得access_token2…

防火墙用户管理理论+实验

目录 注:实验需要有安全策略配置、NAT配置基础 一、防火墙用户管理重要知识点 用户管理 访问控制策略 NGFW下一代防火墙 AAA 鉴别方式——认证 用户认证的分类: 上网用户上线流程: 二、用户认证实验: 实验拓扑 先配置防…

pmp考试是什么?

PMP是一个全球资格认证,也是目前项目管理领域大家公认的证书,相当于项目管理的入门证书。 一、PMP 是什么 pmp 中文叫项目管理专业人士资格认证,目前项目管理领域大家公认的证书,是一个用来评估项目管理人员的知识技能是否已经达…

D. Divide and Summarize(BFS+二分+预处理)

Problem - 1461D - Codeforces 迈克收到一个长度为n的数组作为生日礼物,决定测试一下它的漂亮程度。 如果有一种方法可以通过一定数量(可能是零)的切片操作得到一个元素总和为si的数组,那么这个数组将通过第i次漂亮度测试。 一个…

红红火火的VB,悄然离去,新型中文编程,如日中天

“悲哀!现在用VB连1200都赚不到。”一位VB程序员有感而发。曾经红红火火的VB编程语言,如今却徘徊在被淘汰边缘,让人惋惜。 依稀记得,读大学时候,有一位财务专业同学,特别喜欢计算机,有空就自学V…

密码学引论 | DES

文章目录DES算法1 算法流程2 算法细节(1)子密钥的产生(2)初始置换IPIPIP(3)加密函数(4)逆初始置换IP−1IP^{-1}IP−1例题DES算法 1 算法流程 64位密钥经子密钥产生算法产生出16个子…

用 TypeScript 类型运算实现一个五子棋游戏

之前有看到有大佬用类型运算实现了中国象棋程序 和 Lisp 解释器 甚是震惊,之前不太会看不懂。 最近也学了点类型体操的内容想着自己也玩一下。选择五子棋的原因是相对来说规则是更简单一些的也比较好实现。此实现没有考虑性能上优化和最佳实现方式只关注功能的实现…

详细步骤讲解matlab代码通过Coder编译为c++并用vs2019调用

项目上需要C,奈何本人不会,所以就用matlab写好测试后,用matlab Coder编译为c并用vs2019调用 一个简单的例子,求取两个4*4矩阵相加后,在求取最大值与最小值。matlab代码如下 function [a,b] min_max(m,n)temp mn;a m…

STM32F407 电机编码器测量

文章目录一、STM32F407 定时器编码器功能1.1 STM32定时器简介1.2 STM32定时器编码器功能二、带编码器的直流电机三、代码与验证3.1 初始化代码3.2 验证一、STM32F407 定时器编码器功能 1.1 STM32定时器简介 STM32的定时器功能非常强大,根据官方手册,定…

旅游网页设计 web前端大作业 全球旅游私人订制 旅游公司网站模板(HTML+CSS+JavaScript)

👨‍🎓学生HTML静态网页基础水平制作👩‍🎓,页面排版干净简洁。使用HTMLCSS页面布局设计,web大学生网页设计作业源码,这是一个不错的旅游网页制作,画面精明,排版整洁,内容…

OctaneRender界面布局自定义界面教程丨使用教程

您可以通过单击并拖动每个窗格左上角的方块(图 1)来重新排列 OctaneRender 界面(图形编辑器、渲染视口、节点检查器和大纲视图)中每个窗格的窗口。 图 1:窗格排列图标 用任何鼠标按钮单击同一个方块会显示更多用于…

SpringBoot SpringBoot 开发实用篇 5 整合第三方技术 5.20 ActiveMQ 安装

SpringBoot 【黑马程序员SpringBoot2全套视频教程,springboot零基础到项目实战(spring boot2完整版)】 SpringBoot 开发实用篇 文章目录SpringBootSpringBoot 开发实用篇5 整合第三方技术5.20 ActiveMQ 安装5.20.1 下载5.20.2 安装5.20.3 使…

[附源码]SSM计算机毕业设计基于的城镇住房公积金管理系统JAVA

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…