微信小程序码

参考文档: wxacode.get | 微信开放文档

一、接口选择

微信开发文档中生成小程序码有三种API,如下:

  • createQRCode(该接口生成的小程序码,永久有效,有数量限制)A

  • get(该接口生成的小程序码,永久有效,有数量限制)B

  • getUnlimited(该接口生成的小程序码,永久有效,数量暂无限制)C

注意点,如下:

  • 接口 A 加上接口 B,总共生成的码数量限制为 100,000,这是总共的数量,不是每天的数量,因此需要谨慎使用,它们两可带较长参数。
  • 接口 C 调用分钟频率受限(5000次/分钟),如需大量小程序码,建议预生成,只能带短参数。

二、获取accessToken

GET https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
属性类型默认值必填说明
grant_typestring填写 client_credential
appidstring小程序唯一凭证,即 AppID,可在「微信公众平台 - 设置 - 开发设置」页中获得。(需要已经成为开发者,且帐号没有异常状态)
secretstring小程序唯一凭证密钥,即 AppSecret,获取方式同 appid
//获取小程序的token
public static final String GETWXTOKEN_URL = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + APPID + "&secret=" + APPSECRET;

@Get("${getwxTokenUrl}")
String getwxTokenUrl(@Var("getwxTokenUrl") String getwxTokenUrl);

String wxtoken = etoClient.getwxTokenUrl(ElectronicUtil.GETWXTOKEN_URL);
HashMap datamap = JSON.parseObject(wxtoken, HashMap.class);
String token = (String) datamap.get("access_token");
System.out.println("token值:"+token);

三、createQRCode

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

请求参数

属性类型默认值必填说明
access_token / cloudbase_access_tokenstring接口调用凭证
pathstring扫码进入的小程序页面路径,最大长度 128 字节,不能为空;对于小游戏,可以只传入 query 部分,来实现传参效果,如:传入 "?foo=bar",即可在 wx.getLaunchOptionsSync 接口中的 query 参数获取到 {foo:"bar"}

参考 下面get

四、get

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

请求参数

属性类型默认值必填说明
access_token / cloudbase_access_tokenstring接口调用凭证
pathstring扫码进入的小程序页面路径,最大长度 128 字节,不能为空;对于小游戏,可以只传入 query 部分,来实现传参效果,如:传入 "?foo=bar",即可在 wx.getLaunchOptionsSync 接口中的 query 参数获取到 {foo:"bar"}
public static final String GETWXACODEUN_URL = "https://api.weixin.qq.com/wxa/getwxacode?access_token=%s";// 生成小程序码地址
public static final String BASE_PREFIX = "data:image/png;base64,"; // base64图片固定前缀


@Post("${getwxCodeUrl}")
byte[] getwxCodeUrl(@Var("getwxCodeUrl") String getwxCodeUrl, @JSONBody Map<String, Object> map);

String url = String.format(ElectronicUtil.GETWXACODEUN_URL, token);
Map<String, Object> map = new HashMap<>();
map.put("path", "pages/eshopModule/pages/productDetail/index?productId=" + omsdata.getProduct_id() + "&spu=" + omsdata.getSpu() + "&shareShopId=24");
byte[] wxCode = etoClient.getwxCodeUrl(url, map);
String baseCode = ElectronicUtil.BASE_PREFIX + Base64.encodeBase64String(wxCode);
System.out.println("base64编码"+baseCode);
               

五、getUnlimited

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

请求参数

属性类型默认值必填说明
access_token / cloudbase_access_tokenstring接口调用凭证
scenestring最大32个可见字符,只支持数字,大小写英文以及部分特殊字符:!#$&'()*+,/:;=?@-._~,其它字符请自行编码为合法字符(因不支持%,中文无法使用 urlencode 处理,请使用其他编码方式)
pagestring主页页面 page,例如 pages/index/index,根路径前不要填加 /,不能携带参数(参数请放在scene字段里),如果不填写这个字段,默认跳主页面
public static final String GETWXACODEUNLIMIT_URL = "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=%s";// 生成小程序码地址

@Post("${getwxCodeUrl}")
byte[] getwxCodeUrl(@Var("getwxCodeUrl") String getwxCodeUrl, @JSONBody Map<String, Object> map);

String url = String.format(GETWXACODEUNLIMIT_URL, token);
Map<String, Object> map = new HashMap<>();
map.put("scene", "productId=70381");
map.put("page", "pages/eshopModule/pages/productDetail/index");
byte[] wxCode = etoClient.getwxCodeUrl(url, map);
String baseCode = ElectronicUtil.BASE_PREFIX + Base64.encodeBase64String(wxCode);
System.out.println("base64编码"+baseCode);

特别注意:使用此接口时,scene传递参数的接收方式,与上面get的path中传递参数小程序接收的方式是不同的,因此,可以生成的小程序码,但是扫此码会出现无效的参数报错,需要改变接收参数的方式。获取小程序码/wxa/getwxacodeunlimit页面参数如何携带? | 微信开放社区

六、base64解码

//生成二维码
boolean imgcode = ElectronicUtil.GenerateImage(baseCode, "F:\\pic\\" + omsdata.getSpu() + ".jpg");
System.out.println("图片生成:"+imgcode);

// 对字节数组字符串进行Base64解码并生成图片
    public static boolean GenerateImage(String imgStr, String imgFilePath) {
        if (imgStr == null) // 图像数据为空
            return false;
        try {
            // Base64解码
            String partSeparator = ",";
            if (imgStr.contains(partSeparator)) {
                String encodedImg = imgStr.split(partSeparator)[1];
                byte[] decodedImg = Base64.decodeBase64(encodedImg.getBytes(StandardCharsets.UTF_8));
                Path destinationFile = Paths.get(imgFilePath);
                Files.write(destinationFile, decodedImg);
            }
            return true;
        } catch (Exception e) {
            return false;
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值