Java后端生成小程序二维码调用官方API参数限制问题

本文介绍了微信提供的三个小程序二维码生成接口:createWXAQRCode、getWXACode和getWXACodeUnlimit,这些接口用于不同数量需求的业务场景。所有接口都需要在后端服务器调用,生成的二维码永久有效,但有数量限制。getWXACodeUnlimit接口适用于大量需求,数量暂无限制。为解决scene字段长度限制,建议使用MD5加密并存储在Redis或数据库中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述
1、createWXAQRCode
本接口应在后端服务器调用,详细说明参见后端API。
获取小程序二维码,适用于需要的码数量较少的业务场景。通过该接口生成的小程序码,永久有效,有数量限制
注意:
POST 参数需要转成 JSON 字符串,不支持 form 表单提交。
接口只能生成已发布的小程序的二维码。开发版的带参二维码可以在开发者工具预览时生成。
与 getWXACode 总共生成的码数量限制为 100,000,请谨慎调用
请求地址

POST https://api.weixin.qq.com/cgi-bin/wxaapp/createwxaqrcode?access_token=ACCESS_TOKEN

2、getWXACode
本接口应在后端服务器调用,详细说明参见后端API。
获取小程序码,适用于需要的码数量较少的业务场景。通过该接口生成的小程序码,永久有效,有数量限制,详见获取二维码。
注意:
POST 参数需要转成 JSON 字符串,不支持 form 表单提交。
接口只能生成已发布的小程序的二维码
与 createWXAQRCode 总共生成的码数量限制为 100,000,请谨慎调用。
请求地址

POST https://api.weixin.qq.com/wxa/getwxacode?access_token=ACCESS_TOKEN

3、getWXACodeUnlimit
本接口应在后端服务器调用,详细说明参见后端API。
获取小程序码,适用于需要的码数量极多的业务场景。通过该接口生成的小程序码,永久有效,数量暂无限制。 更多用法详见 获取二维码。
注意:
POST 参数需要转成 JSON 字符串,不支持 form 表单提交。
接口只能生成已发布的小程序的二维码
调用分钟频率受限(5000次/分钟),如需大量小程序码,建议预生成
获取 scene 值
scene 字段的值会作为 query 参数传递给小程序/小游戏。用户扫描该码进入小程序/小游戏后,开发者可以获取到二维码中的 scene 值,再做处理逻辑。
调试阶段可以使用开发工具的条件编译自定义参数 scene=xxxx 进行模拟,开发工具模拟时的 scene 的参数值需要进行 encodeURIComponent
请求地址

POST https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=ACCESS_TOKEN

微信开发API:scene最大32个字符
在这里插入图片描述
解决方案:
把scene数据md5加密;
后端 redis:key-value(md5加密后的scene:scene原文) 或 数据表 存scene的数据;
小程序获取到scene之后,请求后端接口根据md5后的值获取加密前的数据。

Md5Utils.GetMD5Code("原始参数")
以下是Java生成微信小程序参数二维码的完整代: ```java import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLEncoder; import java.util.HashMap; import java.util.Map; import org.apache.commons.codec.binary.Base64; import org.json.JSONObject; public class WxMaQrcodeUtils { private static final String API_URL = "https://api.weixin.qq.com/cgi-bin/wxaapp/createwxaqrcode"; private static final String PARAM_PAGE = "page"; private static final String PARAM_SCENE = "scene"; private static final String ACCESS_TOKEN_URL = "https://api.weixin.qq.com/cgi-bin/token"; /** * 获取access_token * * @param appid 小程序appid * @param secret 小程序secret * @return access_token */ public static String getAccessToken(String appid, String secret) { String accessToken = null; try { String url = ACCESS_TOKEN_URL + "?grant_type=client_credential&appid=" + appid + "&secret=" + secret; URL obj = new URL(url); HttpURLConnection con = (HttpURLConnection) obj.openConnection(); con.setRequestMethod("GET"); int responseCode = con.getResponseCode(); if (responseCode == HttpURLConnection.HTTP_OK) { InputStream inputStream = con.getInputStream(); BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream)); StringBuilder stringBuilder = new StringBuilder(); String line; while ((line = bufferedReader.readLine()) != null) { stringBuilder.append(line); } bufferedReader.close(); JSONObject jsonObject = new JSONObject(stringBuilder.toString()); accessToken = jsonObject.getString("access_token"); } } catch (Exception e) { e.printStackTrace(); } return accessToken; } /** * 生成小程序参数二维码 * * @param accessToken 小程序access_token * @param page 小程序页面路径 * @param scene 小程序页面参数 * @return base64格式的二维码图片数据 */ public static String createQrcode(String accessToken, String page, String scene) { String base64Image = null; try { Map<String, Object> params = new HashMap<>(); params.put(PARAM_PAGE, page); params.put(PARAM_SCENE, scene); URL obj = new URL(API_URL + "?access_token=" + accessToken); HttpURLConnection con = (HttpURLConnection) obj.openConnection(); con.setRequestMethod("POST"); con.setRequestProperty("Content-Type", "application/json"); con.setDoOutput(true); con.getOutputStream().write(new JSONObject(params).toString().getBytes("UTF-8")); int responseCode = con.getResponseCode(); if (responseCode == HttpURLConnection.HTTP_OK) { InputStream inputStream = con.getInputStream(); byte[] imageBytes = new byte[inputStream.available()]; inputStream.read(imageBytes); inputStream.close(); base64Image = Base64.encodeBase64String(imageBytes); } } catch (Exception e) { e.printStackTrace(); } return base64Image; } public static void main(String[] args) { String appid = "your_appid"; String secret = "your_secret"; String accessToken = getAccessToken(appid, secret); String page = "pages/index/index"; String scene = "key=value"; String base64Image = createQrcode(accessToken, page, URLEncoder.encode(scene)); System.out.println(base64Image); } } ``` 注意,需要引入Apache Commons Codec库。 其中,getAccessToken方法用于获取小程序的access_token,createQrcode方法用于生成小程序参数二维码并返回base64格式的图片数据。在main方法中调用以上两个方法即可生成小程序二维码
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值