首页 > 编程语言 >JAVA微信公众号页面授权

JAVA微信公众号页面授权

时间:2022-12-20 18:22:06浏览次数:60  
标签:code 网页 String 微信 token 授权 JAVA 页面

一、前提条件

1.申请微信公众号测试号申请一个微信公众号测试号。测试号申请:https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login

2.扫码登陆注册,注册成功后就会生成微信公号的appID和appsecret

 

3.需要设置网页授权(体验接口权限表 —》 网页服务 —》网页帐号 —》 网页授权获取用户基本信息

 

 

4.点击修改,填写域名,切记一定不能加上http://协议,

 注:没有域名的话可以用内网穿透动态解析一个域名:https://natapp.cn/register

注册登录成功后可以看到下图,选择免费隧道进行购买

 

 

购买免费的隧道之后,点击我的隧道就会看下图1,同时在本地新建一个natapp目录,并且下载客户端到natapp目录下,将压缩包解压,同时在需要在新建一个config.ini文件,这样我们就拿到了我们的域名(步骤5)

 

下载客户端

 config.ini文件内容:

#将本文件放置于natapp同级目录 程序将读取 [default] 段
#在命令行参数模式如 natapp -authtoken=xxx 等相同参数将会覆盖掉此配置
#命令行参数 -config= 可以指定任意config.ini文件
[default]
authtoken=xxxxxxxxxx                      #对应一条隧道的authtoken
clienttoken= #对应客户端的clienttoken,将会忽略authtoken,若无请留空,
log=none #log 日志文件,可指定本地文件, none=不做记录,stdout=直接屏幕输出 ,默认为none
loglevel=ERROR #日志等级 DEBUG, INFO, WARNING, ERROR 默认为 DEBUG
http_proxy= #代理设置 如 http://10.123.10.10:3128 非代理上网用户请务必留空

 

5.配置域名

 

 

 

 

6.下载微信开发者工具:https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html

二:实现逻辑

网页授权流程分为四步:参考官方:https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html

1.引导用户进入授权页面同意授权,获取code

public void getCode(HttpServletResponse response) throws Exception{
String appId = "wxbac840ef8aba6443";
// 官方地址
String urlFir = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=";
// 微信申请的域名(提前准备)
String domain = "http://rhvp5f.natappfree.cc";
// 自定义跳转方法
String redirectMethod = "/v1/weChat/callback";
String encoderUrl = getURLEncoderString(domain + redirectMethod);
String url = urlFir + appId + "&redirect_uri=" + encoderUrl + "&response_type=code&scope=snsapi_base" + "&state=123" + "#wechat_redirect";
response.sendRedirect(url);
}
public static String getURLEncoderString(String str) {
String result = "";
if (null == str) {
return "";
}
try {
result = java.net.URLEncoder.encode(str, "GBK");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return result;
}

2.通过 code 换取网页授权access_token(与基础支持中的access_token不同)

public void callback(@RequestParam String code, @RequestParam String state)  {
String appId = "wxbac840ef8aba6443";
String appIdSecret = "dbf4aadaae8dab4e699ff5259c0c0ad8";
log.info("获取code:{}",code);
String url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid="
+ appId + "&secret=" + appIdSecret + "&code=" + code + "&grant_type=authorization_code";
Map<String, Object> paramMap = null;
String res = HttpUtil.get(url, paramMap);
String openid = JSONObject.parseObject(res).getString("openid");
//只有在用户将公众号绑定到微信开放平台帐号后,才会出现该字段。
String unionid = JSONObject.parseObject(res).getString("unionid");
log.info("根据code查询得到openId:{}",openid);
log.info("unionid:{}",unionid);

}

注:网页授权的作用域为snsapi_base,则本步骤中获取到网页授权access_token的同时,也获取到了openid,snsapi_base式的网页授权流程即到此为止。本次文章也是到本步骤结束。

3.如果需要,开发者可以刷新网页授权access_token,避免过期

4.通过网页授权access_token和 openid 获取用户基本信息(支持 UnionID 机制)

三:测试

 

标签:code,网页,String,微信,token,授权,JAVA,页面
From: https://www.cnblogs.com/qiangzaiBlog/p/16985548.html

相关文章

  • 页面布局
    今天浅浅搞一下html的页面布局吧利用一下html的表格属性下面是代码美化还不太会,学会之后再来一个个重新排版下面的小白的初步理解html是页面head是头部,是标签部分......
  • 6-1 sdust-Java-模拟主板、USB口、TypeC口、PS2口设备 (30 分))
    @[TOC](6-1sdust-Java-模拟主板、USB口、TypeC口、PS2口设备(30分))题目描述使用Java编码设计实现模拟计算机硬件中的主板、USB口、TypeC口、PS2口及其组合方式。通常,计......
  • JAVA原子类 AtomicInteger
    JAVA原子类java原子类位于:JUC包(java.util.concurrent.atomic.Atomic*)中举例:classAtomicIntegerextendsNumberimplementsjava.io.Serializableimportjava.util.co......
  • java—Cron表达式范例
    1.cronExpression配置说明字段允许值允许的特殊字符 秒0-59,-*/ 分0-59,-*/ 小时0-23,-*/ 日期1-31,-*?/LWC 月份1-12或者JAN-DEC,-......
  • vscode 调试 C++/JavaScript
     MicrosoftVisualStudioCode  在调试JavaScript代码时,其中三种比较简单:1.使用Chrome等浏览器调试2. 使用Ctrl+Shift+B 快捷键运行html文件,需要在Task......
  • JavaScript 逆向 ( 一 ) --- JavaScript 语法基础
    1、JavaScript基础菜鸟教程JavaScript教程:​​https://www.runoob.com/js/js-tutorial.html​​1.基础数据类型:number、string、boolean、null、undefined、object2.顺......
  • Java内部类详解
    说起内部类这个词,想必很多人都不陌生,但是又会觉得不熟悉。原因是平时编写代码时可能用到的场景不多,用得最多的是在有事件监听的情况下,并且即使用到也很少去总结内部类的用法......
  • 浅析Java中的final关键字
    谈到final关键字,想必很多人都不陌生,在使用匿名内部类的时候可能会经常用到final关键字。另外,Java中的String类就是一个final类,那么今天我们就来了解final这个关键字的用法。......
  • Java 如何有效地避免OOM:善于利用软引用和弱引用
    想必很多朋友对OOM(OutOfMemory)这个错误不会陌生,而当遇到这种错误如何有效地解决这个问题呢?今天我们就来说一下如何利用软引用和弱引用来有效地解决程序中出现的OOM问题。下......
  • java中的模板设计模式【抽象类的最佳实践】
    本文主要讲述抽象类最佳实践,模板设计模式。老韩的介绍:示例代码如下:1/**2*需求:计算出执行一个job()方法,所需要花费的时间.3*使用模板设计模式【抽......