当前位置: 首页 > news >正文

微信开发小程序开发授权获取 access_token

在小程序开发中,不能够把https://api.weixin.qq.com放到前台请求,发不出来肯定是不能够使用的,微信小程序也已经发布了通知。

后端 API

小程序还提供了一系列在后端服务器使用 HTTPS 请求调用的 API,帮助开发者在后台完成各类数据分析、管理和查询等操作。如 getAccessTokencode2Session 等。详细介绍请参考 API 文档。

access_token

access_token 是小程序全局唯一后台接口调用凭据,调用绝大多数后台接口时都需使用。开发者可以通过 getAccessToken 接口获取并进行妥善保存。

为了 access_token 的安全性,后端 API 不能直接在小程序内通过 wx.request 调用,即 api.weixin.qq.com 不能被配置为服务器域名。开发者应在后端服务器使用getAccessToken获取 access_token,并调用相关 API;

请求参数说明

  • 对于 GET 请求,请求参数应以 QueryString 的形式写在 URL 中。
  • 对于 POST 请求,部分参数需以 QueryString 的形式写在 URL 中(一般只有 access_token,如有额外参数会在文档里的 URL 中体现),其他参数如无特殊说明均以 JSON 字符串格式写在 POST 请求的 body 中。

返回参数说明

注意:当API调用成功时,部分接口不会返回 errcode 和 errmsg,只有调用失败时才会返回。

实现代码:

@Service
public class WechatAccessTokenService {@Value("${wechat.app-id}")private String appId;@Value("${wechat.app-secret}")private String appSecret;private final OkHttpClient httpClient = new OkHttpClient();// 内存缓存(简单实现,生产环境建议用Redis)private String cachedAccessToken;private long tokenExpireTime;/*** 获取微信AccessToken*/public String getAccessToken() throws IOException {// 检查缓存是否有效(提前5分钟过期)if (cachedAccessToken != null && System.currentTimeMillis() < tokenExpireTime - 300000) {return cachedAccessToken;}// 从微信API获取新tokenString url = String.format("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s", appId, appSecret);Request request = new Request.Builder().url(url).build();try (Response response = httpClient.newCall(request).execute()) {if (!response.isSuccessful()) {throw new IOException("HTTP请求失败: " + response.code());}String responseBody = response.body().string();// 解析JSON响应JsonObject jsonResponse = JsonParser.parseString(responseBody).getAsJsonObject();if (jsonResponse.has("errcode") && jsonResponse.get("errcode").getAsInt() != 0) {throw new IOException("微信接口错误: " + jsonResponse.get("errmsg").getAsString());}String accessToken = jsonResponse.get("access_token").getAsString();int expiresIn = jsonResponse.get("expires_in").getAsInt();// 更新缓存this.cachedAccessToken = accessToken;this.tokenExpireTime = System.currentTimeMillis() + (expiresIn * 1000);return accessToken;}}
}
@RestController
public class AccessTokenController {@Autowiredprivate WechatAccessTokenService wechatAccessTokenService;/*** 获取AccessToken接口* GET /getAccessToken*/@GetMapping("/getAccessToken")public Map<String, Object> getAccessToken() {Map<String, Object> response = new HashMap<>();try {String accessToken = wechatAccessTokenService.getAccessToken();response.put("code", 200);response.put("msg", "成功");response.put("data", Map.of("access_token", accessToken,"expires_in", 7200));} catch (Exception e) {response.put("code", 500);response.put("msg", "获取AccessToken失败: " + e.getMessage());response.put("data", null);}return response;}
}


文章转载自:

http://euVMQvjN.fhqdb.cn
http://Xmeroo9C.fhqdb.cn
http://fDpoV31R.fhqdb.cn
http://IH2xjxG0.fhqdb.cn
http://EMrpZzwd.fhqdb.cn
http://sCUOOiMs.fhqdb.cn
http://kRLYdXfT.fhqdb.cn
http://2RxuvmIg.fhqdb.cn
http://t9mtiCYV.fhqdb.cn
http://91JcisC7.fhqdb.cn
http://pnm9RGc0.fhqdb.cn
http://QplElR0B.fhqdb.cn
http://oTK1Osw2.fhqdb.cn
http://nRN8US9X.fhqdb.cn
http://vlFZHJ3h.fhqdb.cn
http://atQVqsRV.fhqdb.cn
http://GhV3Mytd.fhqdb.cn
http://FWLxS1TC.fhqdb.cn
http://VzLLXmdl.fhqdb.cn
http://IAiU8jgO.fhqdb.cn
http://yUQxgcqc.fhqdb.cn
http://CeLEsgvw.fhqdb.cn
http://X1LSZ4Fp.fhqdb.cn
http://34YONTZS.fhqdb.cn
http://rOIBHGPI.fhqdb.cn
http://lCLInoVE.fhqdb.cn
http://plrg1Tww.fhqdb.cn
http://dL7caQMC.fhqdb.cn
http://VC7cqebR.fhqdb.cn
http://ngbNjsRZ.fhqdb.cn
http://www.dtcms.com/a/368136.html

相关文章:

  • Spring Boot+Nacos+MySQL微服务问题排查指南
  • LeetCode 2749.得到整数零需要执行的最少操作数:很独特的一道数学题(多公式硬讲——一步步还真能看懂)
  • 【C++】vectore
  • 柯尼卡美能达打印机SMB服务设置
  • 【VoNR】VoNR是5G语音,VoLTE是4G语音,他们是同一个IMS,只是使用了新的访问方式?
  • Android/Java 泛型全面详解
  • 国产化PDF处理控件Spire.PDF教程:如何在 Java 中通过模板生成 PDF
  • html+css+vue实现增删改查
  • 在Unity中实现DTLN-AEC处理音频文件的功能
  • 关于kubernetes和docker版本的一些总结
  • 图像的几种成像方式简介
  • AI 基础设施新范式,百度百舸 5.0 技术深度解析
  • 中创中间件适配HGDB
  • 没 iCloud, 如何数据从iPhone转移到iPhone
  • 【技术教程】如何将文档编辑器集成至基于Java的Web应用程序
  • 基于华为云平台的STM32F103C8T6工业生产线温湿度监控系统
  • js设计模式-状态模式
  • 一文从零部署vLLM+qwen0.5b(mac本地版,不可以实操GPU单元)
  • Python核心基础:运算符、流程控制与字符串操作详解
  • Follow 幂如何刷屏?拆解淘宝闪购×杨幂的情绪共振品牌营销
  • 嵌入式学习4——硬件
  • 数据标注:人工智能视觉感知的基石
  • 【Linux系统】POSIX信号量
  • 【Python - 类库 - requests】(02)使用“requests“发起GET请求的详细教程
  • XSCT/Vitis 裸机 JTAG 调试与常用命令
  • 【GitHub每日速递】不止 TeamViewer 替代!RustDesk 与 PowerToys,Windows 效率神器
  • 使用海康机器人相机SDK实现基本参数配置(C语言示例)
  • Go 服务注册 Nacos 的坑与解决方案——从 404 到连接成功的排查之路
  • 智能相机还是视觉系统?一文讲透工业视觉两大选择的取舍之道
  • Go语言中atomic.Value结构体嵌套指针的直接修改带来的困惑