微信小程序-获取不限制的小程序码(二)

2023-05-16

一、获取小程序码

获取小程序码 | 微信开放文档

与 createQRCode 总共生成的码数量限制为 100,000,请谨慎调用 

调用方式

HTTPS 调用


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

二、获取小程序二维码

与 wxacode.get 总共生成的码数量限制为 100,000,请谨慎调用

调用方式

HTTPS 调用


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

获取不限制的小程序码 getUnlimitedQRCode

获取不限制的小程序码 | 微信开放文档

接口应在服务器端调用,详细说明参见服务端API。

本接口支持云调用。需开发者工具版本 >= 1.02.1904090(最新稳定版下载),wx-server-sdk >= 0.4.0

接口说明

接口英文名

getUnlimitedQRCode

功能描述

该接口用于获取小程序码,适用于需要的码数量极多的业务场景。通过该接口生成的小程序码,永久有效,数量暂无限制。 更多用法详见 获取小程序码。

注意事项

  • 如果调用成功,会直接返回图片二进制内容,如果请求失败,会返回 JSON 格式的数据。
  • POST 参数需要转成 JSON 字符串,不支持 form 表单提交。
  • 调用分钟频率受限(5000次/分钟),如需大量小程序码,建议预生成

获取 scene 值

  • scene 字段的值会作为 query 参数传递给小程序/小游戏。用户扫描该码进入小程序/小游戏后,开发者可以获取到二维码中的 scene 值,再做处理逻辑。
  • 调试阶段可以使用开发工具的条件编译自定义参数 scene=xxxx 进行模拟,开发工具模拟时的 scene 的参数值需要进行 encodeURIComponent

小程序

Page({
  onLoad (query) {
    // scene 需要使用 decodeURIComponent 才能获取到生成二维码时传入的 scene
    const scene = decodeURIComponent(query.scene)
  }
})

小游戏

// 在首次启动时通过 wx.getLaunchOptionsSync 接口获取
const {query} = wx.getLaunchOptionsSync()
const scene = decodeURIComponent(query.scene)

// 或者在 wx.onShow 事件中获取
wx.onShow(function ({query}) {
  // scene 需要使用 decodeURIComponent 才能获取到生成二维码时传入的 scene
  const scene = decodeURIComponent(query.scene)
})

调用方式

HTTPS 调用


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

云调用

  • 出入参和HTTPS调用相同,调用方式可查看云调用说明文档

  • 接口方法为: openapi.wxacode.getUnlimited

第三方调用

  • 调用方式以及出入参和HTTPS相同,仅是调用的token不同

  • 该接口所属的权限集id为:17、58

  • 服务商获得其中之一权限集授权后,可通过使用authorizer_access_token代商家进行调用

请求参数

属性类型必填说明
access_tokenstring接口调用凭证,该参数为 URL 参数,非 Body 参数。使用getAccessToken 或者 authorizer_access_token
scenestring最大32个可见字符,只支持数字,大小写英文以及部分特殊字符:!#$&'()*+,/:;=?@-._~,其它字符请自行编码为合法字符(因不支持%,中文无法使用 urlencode 处理,请使用其他编码方式)
pagestring默认是主页,页面 page,例如 pages/index/index,根路径前不要填加 /,不能携带参数(参数请放在scene字段里),如果不填写这个字段,默认跳主页面。
check_pathbool默认是true,检查page 是否存在,为 true 时 page 必须是已经发布的小程序存在的页面(否则报错);为 false 时允许小程序未发布或者 page 不存在, 但page 有数量上限(60000个)请勿滥用。
env_versionstring要打开的小程序版本。正式版为 "release",体验版为 "trial",开发版为 "develop"。默认是正式版
widthnumber默认430,二维码的宽度,单位 px,最小 280px,最大 1280px
auto_colorbool自动配置线条颜色,如果颜色依然是黑色,则说明不建议配置主色调,默认 false
line_colorobject默认是{"r":0,"g":0,"b":0} 。auto_color 为 false 时生效,使用 rgb 设置颜色 例如 {"r":"xxx","g":"xxx","b":"xxx"} 十进制表示
is_hyalinebool默认是false,是否需要透明底色,为 true 时,生成透明底色的小程序

返回参数

属性类型说明
bufferbuffer图片 Buffer
errcodenumber错误码
errmsgstring错误信息

调用示例

示例说明: HTTPS调用

请求数据示例


{
 "page": "pages/index/index",
 "scene": "a=1",
 "check_path": true,
 "env_version": "release"
} 

返回数据示例


{
 "errcode": 0,
 "errmsg": "ok",
 "contentType": "image/jpeg",
 "buffer": Buffer
} 

示例说明: 云函数调用

请求数据示例


const cloud = require('wx-server-sdk')
cloud.init({
  env: cloud.DYNAMIC_CURRENT_ENV,
})
exports.main = async (event, context) => {
  try {
    const result = await cloud.openapi.wxacode.getUnlimited({
        "page": 'pages/index/index',
        "scene": 'a=1',
        "checkPath": true,
        "envVersion": 'release'
      })
    return result
  } catch (err) {
    return err
  }
} 

返回数据示例


{
 "errcode": 0,
 "errmsg": "ok",
 "contentType": "image/jpeg",
 "buffer": Buffer
} 

三、遇到问题踩坑

1、获取小程序二维码getwxacodeunlimit出现41030

{"errcode":41030,"errmsg":"invalid page rid: 60ed0729-6826af96-2768e17d"}

原因:

check_path:默认是true,检查page 是否存在,为 true 时 page 必须是已经发布的小程序存在的页面(否则报错);为 false 时允许小程序未发布或者 page 不存在, 但page 有数量上限(60000个)请勿滥用

env_version:要打开的小程序版本。正式版为 "release",体验版为 "trial",开发版为 "develop"。默认是正式版

解决方案:

1、路径问题

传入的页面路径,pages前不可用加 " / "
正确:‘pages/index/index’
错误:‘/pages/index/index’

2、小程序参数问题

小程序的参数不能超过32个字符

3、小程序是否发布

传入page,生成指定页面的二维码的前提是,小程序必须审核并发布
审核成功并发布的小程序才能正常调用二维码生成接口

错误码

错误码错误码取值解决方案
-1system error系统繁忙,此时请开发者稍候再试
40001invalid credential  access_token isinvalid or not latest获取 access_token 时 AppSecret 错误,或者 access_token 无效。请开发者认真比对 AppSecret 的正确性,或查看是否正在为恰当的公众号调用接口

2、小程序码加载不全 

博主遇到小程序码加载不全,如下

 

1、设置图片大小,根据参数 width 设置

2、缓存原因

在图片的路径的后面拼接 '?时间戳' 或者 '?随机数'等,让浏览器和手机认为每次加载的其实不是同一张图片

3、检查小程序download和request域名是否配置

微信公众平台

开发管理----->开发设置

4、 CDN加载图片资源时,多台服务器中正在下载,或者图片流尚未回源

5、NFS同步图片资源延迟

如何通过Linux系统挂载NFS文件系统_文件存储NAS-阿里云帮助中心

基于文件close/open的CTO一致性

由于超时的最终一致性无法保证ECS-2可以立刻读ECS-1写入的数据。因此,为了提升性能,NFS还提供了基于文件的CTO(close-to-open)一致性保证,即当两个及以上计算节点同时读写相同的文件时,ECS-1的修改在ECS-2不一定能立即看到。但是,一旦ECS-1写入并关闭,之后在任何一个计算节点重新打开该文件都可以保证能访问到新写入的数据。

例如,生产者ECS生产了文件X,生产完毕后执行了close。然后给消息队列发一条消息说,文件X生产完毕。消费者ECS订阅消息队列,读到消息X(文件X生产完毕),此时,消费者ECS再去open这个文件,通过open返回的fd去读取这个文件,则一定能够读到文件X的所有内容。如果消费者ECS在生产者ECS生产完毕之前,就open了文件X,并且持有了fd,当收到消息后,直接用这个fd去读,是不保证能够读取到最新数据的

典型问题

文件创建“延迟”

  • 问题现象:

    ECS-1创建了文件abc,但是ECS-2需要过一段时间才能看到ECS-1创建的文件abc,有时会延迟1s,有时甚至会到1分钟,这是为什么?

  • 问题原因:

    这是Lookup Cache导致的,符合预期T时间。例如,ECS-2在ECS-1创建文件abc前进行了访问,导致ECS-2发生文件不存在,于是缓存了一条文件abc不存在的记录。在T时间内,由于FileAttr还没有过期,ECS-2再次访问时,仍会访问第一次缓存到文件abc不存在的记录。

  • 解决方案:如果要保证ECS-1创建文件后,ECS-2立即就能看到它,可以使用如下方案:
    • 方案一:关闭ECS-2的Nagtive Lookup Cache,不缓存不存在的文件。该方案开销最小。挂载时,添加 lookupcache=positive(默认值 lookupcache=all)字段,挂载命令如下所示:
      sudo mount -t nfs -o vers=3,nolock,proto=tcp,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport,lookupcache=positive file-system-id.region.nas.aliyuncs.com:/ /mnt
    • 方案二:关闭ECS-2的所有缓存。该方案会导致性能非常差,请根据业务实际情况选择合适的方案。挂载时,添加 actimeo=0字段,挂载命令如下所示:
      sudo mount -t nfs -o vers=3,nolock,proto=tcp,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport,actimeo=0 file-system-id.region.nas.aliyuncs.com:/ /mnt

文件写入延时

  • 问题现象:

    ECS-1更新了文件abc,但是ECS-2立即去读它,仍然是旧的内容,这是为什么?

  • 问题原因:涉及如下两个原因。
    • 第一个原因:ECS-1写了abc后,不会立即flush,会先进行PageCache,依赖应用层调用fsync或者close。
    • 第二个原因:ECS-2存在文件Cache,可能不会立即去服务端取最新的内容。例如,ECS-2在ECS-1更新文件abc之时,就已经缓存了数据,当ECS-2再次去读时,仍然使用了缓存中的内容。
  • 解决方案:如果要保证ECS-1创建文件后,ECS-2立即就能看到它,可以使用如下方案:
    • 方案一:CTO一致性,让ECS-1或ECS-2的读写符合CTO模式,则ECS-2一定能读到最新数据。具体来说,ECS-1更新文件后,一定要执行close或者执行fsync。ECS-2读之前,重新open,然后再去读。
    • 方案二:关闭ECS-1和ECS-2的所有缓存。该方案会导致性能非常差,请根据业务实际情况选择合适的方案。
      • 关闭ECS-1的缓存。挂载时,添加noac字段,保证所有写入立即落盘。挂载命令如下所示:
        sudo mount -t nfs -o vers=3,nolock,proto=tcp,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport,noac file-system-id.region.nas.aliyuncs.com:/ /mnt
        说明
        • 如果ECS-1的写操作完成后会调用fsync,或者使用sync写,可以将上面的noac替换为actimeo=0,性能会稍好一点。
        • noac等价于actimeo=0加sync(即,强制所有写入都为sync写)。
      • 关闭ECS-2的缓存。挂载时,添加actimeo=0字段,忽略所有缓存。挂载命令如下所示:
        sudo mount -t nfs -o vers=3,nolock,proto=tcp,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport,actimeo=0 file-system-id.region.nas.aliyuncs.com:/ /mnt
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

微信小程序-获取不限制的小程序码(二) 的相关文章

随机推荐

  • 【网络编程学习之旅】一文学习网络编程之NIO

    一文学习网络编程之NIO 前置知识 xff1a Java基础知识 xff1b BIO网络编程知识 xff1b 多线程编程知识 xff1b 一 网络编程模型 1 编程模型 模型 xff1a 对事务共性的抽象 xff1b 编程模型 xff1a
  • 【秋招&毕业】自由奔赴的行者2021年终总结

    秋招 amp 毕业 自由奔赴的行者2021年终总结 xff01 2022年1月18日晚7点在实验室敲下我的2021年终总结 xff0c 两个关键词用来概括我的2021 秋招 和 毕业 一 秋招 本人情况简略介绍 xff08 脱敏处理部分信息
  • 【网络编程学习之旅】Netty之WebSocket编程实战

    Netty之WebSocket编程实战 一 Netty初介绍 1 1 什么是Netty xff1f 高性能 事件驱动 异步非阻塞 xff1b 基于NIO的客户端 服务端编程框架 xff1b 稳定性和 伸缩性 xff1b 1 2 Netty使
  • 【Docker学习之旅】手把手教你Java应用进行Docker化

    手把手教你Java应用进行Docker化 简介 xff1a 简介 xff1a Docker是一个使用Go语言开发的开源的应用容器引擎 xff0c 让开发者可以打包他们的应用以及依赖包到一个可移植的容器中 xff0c 然后发布到任何流行的机器
  • 【RPC学习之旅】手把手实现一个RPC框架

    手把手实现一个RPC框架 一 RPC前置知识介绍 1 什么是RPC xff1f RPC是远程过程调用 xff08 Remote Procedure Call xff09 的缩写形式 假设我们有两台服务器A与B xff0c 一个在A服务器上部
  • 【SpringBoot之旅】手把手教你Swagger接口文档神器使用

    手把手教你Swagger接口文档神器使用 相关内容地址Swagger官方文档swagger io docs specif Swagger常用注解blog csdn net weixin 4252 Swagger2常用注解blog csdn
  • 年度回忆录(2011.01----2011.07)

    看了看上次的总结是 2011 年 1 月 1 日 xff0c 距离这次的总结有将近七个月的时间 xff0c 下面来说一说这七个月的学习情况 xff08 按照时间进度 xff09 l 英语 xff08 1 月 now xff09 上次做总结的
  • VFH避障流程以及策略

    VFH避障核心代码讲解 xff0c 以及避障流程 VFH是一种由人工势场法改进而来的机器人导航算法 在机器人移动的过程中 xff0c 利用传感器探测周围障碍物信息 xff08 图1 xff09 xff0c 生成极坐标直方图 xff08 图2
  • 解决E: 仓库 “ubuntu bionic Release” 没有 Release 文件

    span class token function sudo span span class token function apt get span update 时候 xff0c 发现404 Not Found E 仓库 http ppa
  • c#/winform 串口编程

    这里结合看到的一些知识和在实际项目中应用的一些方法说明一下如何在 NET平台下使用C 创建串口通信程序 在 net 2 0中提供了串口通信的功能 xff0c 其功能的实现主要是System IO Ports 命名空间下实现的 可以通过加入这
  • c++:线程和进程的区别

    线程是指进程内的一个执行单元 也是进程内的可调度实体 与进程的区别 1 地址空间 进程内的一个执行单元 进程至少有一个线程 它们共享进程的地址空间 而进程有自己独立的地址空间 2 资源拥有 进程是资源分配和拥有的单位 同一个进程内的线程共享
  • Mac设置环境变量

    环境变量是电脑操作系统中常用的一些变量 xff0c 作用类似于将一些常用命令所在的文件夹位置预先告诉操作系统 xff0c 当以后需要用到这些命令时 xff0c 操作系统就自动来这些位置取 例如 xff0c 常见的Java开发中配置的相关环境
  • Java--Java版本和JDK版本

    对于Java初学者 xff0c 经常会听到同事 xff0c 或看到网上Java版本和JDK版本不一的叫法 xff0c 不明白这两者到底什么关系 xff1f 其实博主当年初学Java时也有这样的困惑 xff0c 今天我们就来好好探讨一下 xf
  • Oracle-Windows双击Oracle的setup.exe一闪而过;Oracle安装后的默认账号和密码

    双击Oracle解压包之后的setup exe之后 xff0c 界面一闪而过 xff0c 主要是如下三种原因 1 安装路径不要包含中文 2 安装路径不要包含空格 3 右击 xff0c 选择 以管理员身份运行 顺带提下Oracle安装之后的默
  • Java--Stream流详解

    Stream 是Java 8 API添加的一个新的抽象 xff0c 称为流Stream xff0c 以一种声明性方式处理数据集合 xff08 侧重对于源数据计算能力的封装 xff0c 并且支持序列与并行两种操作方式 xff09 Stream
  • Kubernetes - Kubernetes详解;安装部署(一)

    一 Kubernetes Kubernetes 这个单词源于希腊语 xff0c 意为 舵手 或 飞行员 Kubernetes xff0c 也称为K8S xff0c 其中8是代表中间 ubernete 的8个字符 xff0c 是Google在
  • Shiro - Shiro简介;Shiro与Spring Security区别;Spring Boot集成Shiro

    一 Shiro 以下引自百度百科 shiro xff08 java安全框架 xff09 百度百科 Apache Shiro是一个强大且易用的Java安全框架 xff0c 执行身份验证 授权 密码和会话管理 使用Shiro的易于理解的API
  • 最近

    距离软考还有 3 天的时间 xff0c 该复习的都复习了 xff0c 复习不到的知识点也只有搁置了 任何事情都不可能是完美的 xff0c 软考也一样 xff0c 要的只是追求完美的过程 xff0c 结果重要但是过程更重要 复习到现在感觉基础
  • 微信小程序-微信小程序登录流程(一)

    微信小程序 xff0c 小程序的一种 xff0c 英文名Wechat Mini Program xff0c 是一种不需要下载安装即可使用的应用 xff0c 它实现了应用 触手可及 的梦想 xff0c 用户扫一扫或搜一下即可打开应用 冷启动
  • 微信小程序-获取不限制的小程序码(二)

    一 获取小程序码 获取小程序码 微信开放文档 与 createQRCode 总共生成的码数量限制为 100 000 xff0c 请谨慎调用 调用方式 HTTPS 调用 POST https api weixin qq com wxa get