概述

本文适合有初步了解的开发者阅读,入门请参见指南。

⚠️ xr-frame在基础库v2.32.0开始基本稳定,发布为正式版,但仍有一些功能还在开发,请见限制和展望。

xr-frame是一套微信小程序官方提供的XR/3D应用解决方案,基于混合方案实现,性能逼近原生、效果好、易用、强扩展、渐进式、遵循微信小程序开发标准:

<xr-scene>
  <xr-assets>
    <!-- 加载一个GLTF模型 -->
    <xr-asset-load type="gltf" asset-id="gltf-model" src="..." />
  </xr-assets>
  <xr-env env-data="..." />

  <xr-node>
    <!-- 将一个GLTF模型渲染在AR场景中 -->
    <xr-ar-tracker ...>
      <xr-gltf model="gltf-model" ...></xr-gltf>
    </xr-ar-tracker>
    <xr-camera is-ar-camera ...></xr-camera>
  </xr-node>

  <xr-node>
    <!-- 场景光照 -->
    <xr-light type="ambient" ... />
    <xr-light type="directional" ... />
  </xr-node>
</xr-scene>

特性

比起目前的Canvas组件,xr-frame有以下显著的优势:

🍰 高度整合,上手简单

提供xml的方式来描述3D场景,并集成了AR、物理、动画、粒子、后处理等等系统,上手简单,符合微信小程序开发规范。

🌈 渲染效果好

内置完整的PBR效果、环境光照、阴影,原生支持glTF资源,提供的xr-frame-toolkit可以快速通过全景图生成环境数据。

⚡️ 高性能

混合方案,渲染性能逼近原生,xr-frame-toolkit可以对外部glTF文件进行优化,来提高加载性能,还有完善的缓存机制保证二次进入的加载性能。

🧱 易扩展

扩展性强,从资源到组件元素,皆可以由高阶用户自己定制,未来还可以暴露内部的渲染管线定制能力。

示例

上面的例子只是一部分简略代码,我们提供了丰富的示例并开源在xr-frame-demo,可以直接扫码体验:

demo

以下是部分示例需要用到的扫描资源:

典型案例 -> 扫描图片视频

典型案例 -> 扫描透视模型

典型案例 -> 扫描微信球

AR案例 -> 2DMarker

AR案例 -> OSD Marker

限制和展望

限制:

  1. 最低要求客户端iOS8.0.29、安卓8.0.30及以上,推荐稳定版在iOS8.0.36、安卓8.0.35及以上。
  2. 基础库最低2.27.1及以上,推荐2.32.0及以上。
  3. 开发工具需要最新版本,建议Nightly版本。
  4. 微信小程序全局同一时刻只能存在一个xr-frame组件,否则可能会发生异常。
  5. 同一个xr-frame组件只能存在一个xr-scene,并且必须为顶层。
  6. 目前不支持和微信小程序传统标签比如<view>混写。
  7. 目前不支持wxml自动补全,真机调试需要特别注意,见真机调试文档。

同时未来还会追加更多的能力,在未来的规划中,我们还会着重致力于:

  1. XR-FRAME内置特色的UI组件,让开发者可以在XR-FRAME组件中写UI,来实现一套酷炫的UI系统。
  2. AR/VR能力持续增强,支持眼睛设备。
  3. 交互手段进一步强化,物理碰撞、触发等功能(已完成,待发布)。
  4. 工具能力强化,包括标签属性自动补全等。

想要进一步了解整个框架的架构,请看架构一节。

page-meta

基础库 2.9.0 开始支持,低版本需做兼容处理。

微信 Windows 版:支持

微信 Mac 版:支持

微信 鸿蒙 OS 版:支持

渲染框架支持情况:Skyline (使用最新 Nightly 工具调试)、WebView

功能描述

页面属性配置节点,用于指定页面的一些属性、监听页面事件。只能是页面内的第一个节点。可以配合 navigation-bar 组件一同使用。

通过这个节点可以获得类似于调用 wx.setBackgroundTextStyle wx.setBackgroundColor 等接口调用的效果。

通用属性

属性 类型 默认值 必填 说明 最低版本
background-text-style string 否 下拉背景字体、loading 图的样式,仅支持 dark 和 light 2.9.0
background-color string 否 窗口的背景色,必须为十六进制颜色值 2.9.0
background-color-top string 否 顶部窗口的背景色,必须为十六进制颜色值,仅 iOS 支持 2.9.0
background-color-bottom string 否 底部窗口的背景色,必须为十六进制颜色值,仅 iOS 支持 2.9.0
root-background-color string 否 页面内容的背景色,用于页面中的空白部分和页面大小变化 resize 动画期间的临时空闲区域 2.12.1
page-style string “” 否 页面根节点样式,页面根节点是所有页面节点的祖先节点,相当于 HTML 中的 body 节点 2.9.0
page-font-size string “” 否 页面 page 的字体大小,可以设置为 system ,表示使用当前用户设置的微信字体大小 2.11.0
root-font-size string “” 否 页面的根字体大小,页面中的所有 rem 单位,将使用这个字体大小作为参考值,即 1rem 等于这个字体大小;自微信小程序版本 2.11.0 起,也可以设置为 system 2.9.0
page-orientation string “” 否 页面的方向,可为 auto portrait 或 landscape 2.12.0
bindresize eventhandle 否 页面尺寸变化时会触发 resize 事件, event.detail = { size: { windowWidth, windowHeight } } 2.9.0

WebView 特有属性

属性 类型 默认值 必填 说明 最低版本
scroll-top string “” 否 滚动位置,可以使用 px 或者 rpx 为单位,在被设置时,页面会滚动到对应位置 2.9.0
scroll-duration number 300 否 滚动动画时长 2.9.0
bindscroll eventhandle 否 页面滚动时会触发 scroll 事件, event.detail = { scrollTop } 2.9.0
bindscrolldone eventhandle 否 如果通过改变 scroll-top 属性来使页面滚动,页面滚动结束后会触发 scrolldone 事件 2.9.0

示例代码

在开发者工具中预览效果

<page-meta
  background-text-style="{{bgTextStyle}}"
  background-color="{{bgColor}}"
  background-color-top="{{bgColorTop}}"
  background-color-bottom="{{bgColorBottom}}"
  scroll-top="{{scrollTop}}"
  page-style="color: green"
  root-font-size="16px"
>
  <navigation-bar
    title="{{nbTitle}}"
    loading="{{nbLoading}}"
    front-color="{{nbFrontColor}}"
    background-color="{{nbBackgroundColor}}"
  />
</page-meta>
Page({
  data: {
    bgTextStyle: 'dark',
    scrollTop: '200rpx',
    bgColor: '#ff0000',
    bgColorTop: '#00ff00',
    bgColorBottom: '#0000ff',
    nbTitle: '标题',
    nbLoading: false,
    nbFrontColor: '#000000',
    nbBackgroundColor: '#ffffff',
  },
})

navigation-bar

基础库 2.9.0 开始支持,低版本需做兼容处理。

微信 Windows 版:支持

微信 Mac 版:支持

微信 鸿蒙 OS 版:支持

渲染框架支持情况:WebView

功能描述

页面导航条配置节点,用于指定导航栏的一些属性。只能是 page-meta 组件内的第一个节点,需要配合它一同使用。

通过这个节点可以获得类似于调用 wx.setNavigationBarTitle wx.setNavigationBarColor 等接口调用的效果。

属性说明

属性 类型 默认值 必填 说明 最低版本
title string 否 导航条标题 2.9.0
loading boolean false 否 是否在导航条显示 loading 加载提示 2.9.0
front-color string 否 导航条前景颜色值,包括按钮、标题、状态栏的颜色,仅支持 #ffffff 和 #000000 2.9.0
background-color string 否 导航条背景颜色值,有效值为十六进制颜色 2.9.0
color-animation-duration number 0 否 改变导航栏颜色时的动画时长,默认为 (即没有动画效果) 2.9.0
color-animation-timing-func string “linear” 否 改变导航栏颜色时的动画方式,支持 linear 、 easeIn 、 easeOut 和 easeInOut 2.9.0

示例代码

<page-meta>
  <navigation-bar
    title="{{nbTitle}}"
    loading="{{nbLoading}}"
    front-color="{{nbFrontColor}}"
    background-color="{{nbBackgroundColor}}"
    color-animation-duration="2000"
    color-animation-timing-func="easeIn"
  />
</page-meta>
Page({
  data: {
    nbFrontColor: '#000000',
    nbBackgroundColor: '#ffffff',
  },
  onLoad() {
    this.setData({
      nbTitle: '新标题',
      nbLoading: true,
      nbFrontColor: '#ffffff',
      nbBackgroundColor: '#000000',
    })
  }
})

aria-component

微信 Windows 版:支持

微信 Mac 版:支持

微信 鸿蒙 OS 版:支持

渲染框架支持情况:Skyline (使用最新 Nightly 工具调试)、WebView

功能描述

满足视障人士对于微信小程序的访问需求。

无障碍访问

为了更好地满足视障人士对于微信小程序的访问需求,基础库自2.7.1起,支持部分ARIA标签。

无障碍特性在读屏模式下可以访问,iOS可通过设置->通用->辅助功能->旁白打开。

以 view 组件为例,开发者可以增加aria-role和aria-label属性。 其中aria-role表示组件的角色,当设置为’img’时,读屏模式下聚焦后系统会朗读出’图像’。设置为’button’时,聚焦后后系统朗读出’按钮’。aria-label表示组件附带的额外信息,聚焦后系统会自动朗读出来。

微信小程序已经内置了一些无障碍的特性,对于非原生组件,开发者可以添加以下无障碍标签。

aria-activedescendant aria-atomic aria-autocomplete aria-busy aria-checked
aria-colcount aria-colindex aria-colspan aria-controls aria-current
aria-describedby aria-details aria-disabled aria-dropeffect aria-errormessage
aria-expanded aria-flowto aria-grabbed aria-haspopup aria-hidden
aria-invalid aria-keyshortcuts aria-label aria-labelledby aria-level
aria-live aria-modal aria-multiline aria-multiselectable aria-orientation
aria-owns aria-placeholder aria-posinset aria-pressed aria-readonly
aria-relevant aria-required aria-role aria-roledescription aria-rowcount
aria-rowindex aria-rowspan aria-selected aria-setsize aria-sort
aria-valuemax aria-valuemin aria-valuenow aria-valuetext

示例代码

<view aria-role="button" aria-label="提交表单">提交</view>

Tips

  1. 安卓和iOS读屏模式下设置aria-role后朗读的内容不同系统之间会有差异
  2. 可设置的aria-role可参看 Using Aria中的Widget Roles,部分role的设置在移动端可能无效。

native-component

微信 Windows 版:支持

微信 Mac 版:支持

微信 鸿蒙 OS 版:支持

渲染框架支持情况:Skyline (使用最新 Nightly 工具调试)、WebView

功能描述

微信小程序中的部分组件是由客户端创建的原生组件。

原生组件

微信小程序中的部分组件是由客户端创建的原生组件,这些组件有:

  • camera
  • canvas
  • input(仅在focus时表现为原生组件)
  • live-player
  • live-pusher
  • map
  • textarea
  • video

原生组件同层渲染

同层渲染是为了解决原生组件的层级问题,在支持同层渲染后,原生组件与其它组件可以随意叠加,有关层级的限制将不再存在。但需要注意的是,组件内部仍由原生渲染,样式一般还是对原生组件内部无效。

注:

  • 当前所有原生组件(除 input 组件 focus 状态)均已支持同层渲染。
  • 鸿蒙 OS 下只支持同层渲染。

原生组件的使用限制

除事件相关,同层渲染下已无以下限制

由于原生组件脱离在 WebView 渲染流程外,因此在使用时有以下限制:

  • 原生组件的层级是最高的,所以页面中的其他组件无论设置 z-index 为多少,都无法盖在原生组件上。
    • 后插入的原生组件可以覆盖之前的原生组件。
  • 原生组件还无法在 picker-view 中使用。
    • 基础库 2.4.4 以下版本,原生组件不支持在 scroll-view、swiper、movable-view 中使用。
  • 部分 CSS 样式无法应用于原生组件,例如:
    • 无法对原生组件设置 CSS 动画
    • 无法定义原生组件为 position: fixed
    • 不能在父级节点使用 overflow: hidden 来裁剪原生组件的显示区域
  • 原生组件的事件监听不能使用 bind:eventname 的写法,只支持 bindeventname。原生组件也不支持 catch 和 capture 的事件绑定方式。
  • 原生组件会遮挡 vConsole 弹出的调试面板。
  • 原生组件可通过 bindrendererror 事件监听同层渲染失败的情况并进行降级处理。 同层渲染失败通常由以下原因造成:
    • Android 端运行环境缺少同层渲染所需的内核
    • iOS 端由于实现方式的限制,在页面节点树不稳定的情况下存在一定的失败率

web-view

基础库 1.6.4 开始支持,低版本需做兼容处理。

微信小程序插件:不支持

微信 Windows 版:支持

微信 Mac 版:支持

微信 鸿蒙 OS 版:支持

渲染框架支持情况:WebView

功能描述

承载网页的容器。会自动铺满整个微信小程序页面,个人类型的微信小程序暂不支持使用。

客户端 6.7.2 版本开始,navigationStyle: custom 对 web-view 组件无效

属性说明

属性 类型 默认值 必填 说明 最低版本
src string 否 webview 指向网页的链接。可打开关联的公众号的文章,其它网页需登录微信小程序管理后台配置业务域名。 1.6.4
bindmessage eventhandler 否 网页向微信小程序 postMessage 时,会在以下特定时机触发并收到消息:微信小程序后退、组件销毁、分享、复制链接(2.31.1)。e.detail = { data },data是多次 postMessage 的参数组成的数组。 1.6.4
bindload eventhandler 否 网页加载成功时候触发此事件。e.detail = { src } 1.6.4
binderror eventhandler 否 网页加载失败的时候触发此事件。e.detail = { url, fullUrl },其中 fullUrl 为加载失败时的完整 url 1.6.4

相关接口 1

web-view网页中可使用JSSDK 1.3.2提供的接口返回微信小程序页面。 支持的接口有:

接口名 说明 最低版本
wx.miniProgram.navigateTo 参数与微信小程序接口一致 1.6.4
wx.miniProgram.navigateBack 参数与微信小程序接口一致 1.6.4
wx.miniProgram.switchTab 参数与微信小程序接口一致 1.6.5
wx.miniProgram.reLaunch 参数与微信小程序接口一致 1.6.5
wx.miniProgram.redirectTo 参数与微信小程序接口一致 1.6.5
wx.miniProgram.postMessage 向微信小程序发送消息,会在以下特定时机触发组件的message事件:微信小程序后退、组件销毁、分享、复制链接(2.31.1) 1.7.1
wx.miniProgram.getEnv 获取当前环境 1.7.1

示例代码

在开发者工具中预览效果

// <script type="text/javascript" src="https://res.wx.qq.com/open/js/jweixin-1.3.2.js"></script>

// javascript
wx.miniProgram.navigateTo({url: '/path/to/page'})
wx.miniProgram.postMessage({ data: 'foo' })
wx.miniProgram.postMessage({ data: {foo: 'bar'} })
wx.miniProgram.getEnv(function(res) { console.log(res.miniprogram) })

相关接口 2

web-view网页中仅支持以下JSSDK接口:

接口模块 接口说明 具体接口 鸿蒙 OS 支持情况
判断客户端是否支持js checkJSApi ✓
图像接口 拍照或上传 chooseImage ✓
预览图片 previewImage ✓
上传图片 uploadImage ✓
下载图片 downloadImage ✓
获取本地图片 getLocalImgData ✓
音频接口 开始录音 startRecord
停止录音 stopRecord
监听录音自动停止 onVoiceRecordEnd
播放语音 playVoice
暂停播放 pauseVoice
停止播放 stopVoice
监听语音播放完毕 onVoicePlayEnd
上传接口 uploadVoice
下载接口 downloadVoice
智能接口 识别音频 translateVoice
设备信息 获取网络状态 getNetworkType ✓
地理位置 使用内置地图打开地点 openLocation ✓
获取地理位置 getLocation ✓
摇一摇周边 开启ibeacon startSearchBeacons
关闭ibeacon stopSearchBeacons
监听ibeacon onSearchBeacons
微信扫一扫 调起微信扫一扫 scanQRCode ✓
微信卡券 拉取使用卡券列表 chooseCard
批量添加卡券接口 addCard
查看微信卡包的卡券 openCard
长按识别 微信小程序圆形码 无 ✓

相关接口 3

用户分享时可获取当前web-view的URL,即在onShareAppMessage回调中返回webViewUrl参数。

示例代码

示例代码:

Page({
  onShareAppMessage(options) {
    console.log(options.webViewUrl)
  }
})

相关接口 4

在网页内可通过window.__wxjs_environment变量判断是否在微信小程序环境,建议在WeixinJSBridgeReady回调中使用,也可以使用JSSDK 1.3.2提供的getEnv接口。

示例代码

// web-view下的页面内
function ready() {
  console.log(window.__wxjs_environment === 'miniprogram') // true
}
if (!window.WeixinJSBridge || !WeixinJSBridge.invoke) {
  document.addEventListener('WeixinJSBridgeReady', ready, false)
} else {
  ready()
}

// 或者
wx.miniProgram.getEnv(function(res) {
  console.log(res.miniprogram) // true
})

相关接口 5

从微信7.0.0开始,可以通过判断 userAgent 中包含 miniProgram 字样来判断微信小程序 web-view 环境。

从微信 Android 8.0.16,iOS 8.0.17 开始,web-view 的 userAgent 中会携带微信小程序的 appid。

对于微信鸿蒙 OS 版本,可根据 userAgent 中包含 ArkWeb 和 MicroMessenger 字样来判断。

示例代码

console.log(window.navigator.userAgent);

// "Mozilla/....../arm64 miniProgram/wx14211cb2fd9f805123"    携带了 miniProgram 字样和微信小程序的 appid

相关接口 6

从微信7.0.3开始,webview内可以通过判断下面的方式判断微信小程序是否在前台:

WeixinJSBridge.on('onPageStateChange', function(res) {
  console.log('res is active', res.active)
})

Bug & Tip

  1. tip:网页内 iframe 的域名也需要配置到域名白名单。
  2. tip:在开发者工具上,可以在 web-view 组件上通过右键 – 调试,打开 web-view 组件的调试。
  3. tip:每个页面只能有一个 web-view,web-view 会自动铺满整个页面,并覆盖其他组件。
  4. tip:web-view 网页与微信小程序之间不支持除 JSSDK 提供的接口之外的通信。
  5. tip:在 iOS 中,如果遇到 JSSDK 接口调用无响应的情况,可以在 web-view 的 src 后面加个 #wechat_redirect 来解决。
  6. tip:避免在链接中带有中文字符,在 iOS 中会出现打开白屏的问题,建议加上 encodeURIComponent。

store-product

基础库 3.5.5 开始支持,低版本需做兼容处理。

微信 鸿蒙 OS 版:支持

相关文档: 微信小店指引

渲染框架支持情况:Skyline (使用最新 Nightly 工具调试)、WebView

功能描述

微信小程序内嵌微信小店商品,展示小店商品,并进行跳转交易。支持小店优选联盟带货跟佣功能。

通用属性

属性 类型 默认值 必填 说明 最低版本
appid string 是 小店的appid。获取方式:小店后台 – 店铺管理 – 基础信息 – 账号信息 – 微信小店ID。 3.5.5
product-id string 是 商品id。获取小店商品id,可以通过API获取(参考链接)或通过小店后台 – 商品管理 – 商品列表 – 规格/编码获取。 3.5.5
product-promotion-link string 否 带货商品的跟佣信息。如果需要商品售卖时使用小店优选联盟带货跟佣功能,可以通过API获取带货商品跟佣信息(参考链接)。 3.5.5
media-id string 否 媒体文件id。可以通过API获取(参考链接)。 3.7.1
custom-style object 否 自定义样式。支持自定义的样式请查看custom-style。 3.7.1
custom-content boolean false 否 开启自定义插槽。开启后可以自行控制卡片内容。 3.7.2
open-page string product-detail 否 设置点击打开的页面(同时开启 custom-content 属性后生效)。 3.7.4
合法值 说明 最低版本
product-detail 商品详情页 3.7.4
gift-product-detail 送礼商品详情页 3.7.7
buy 下单页,只能支持「热招品牌且关联小店」商家 3.7.4
gift 送礼下单页,只能支持「热招品牌且关联小店」商家 3.15.1
logo-position string bottom-left 否 设置小店标识的位置,不允许隐藏(同时开启 custom-content 属性后生效)。 3.7.2
合法值 说明
bottom-left 左下方
bottom-right 右下方
bindentersuccess eventhandle 否 跳转小店成功的回调。 3.7.1
bindentererror eventhandle 否 跳转小店失败的回调,event.detail={code,message}。 3.7.1

自定义样式(custom-style)

键名 说明 允许自定义的属性
card 卡片样式 background-color
title 标题样式 color
price 价格样式 color
buy-button 购买按钮样式 width、border-radius、color、background-color
buy-button-disabled 购买按钮禁用态样式 width、border-radius、color、background-color

自定义样式(custom-style)示例代码

<store-product appid="xxx" product-id="xxx" custom-style="{{customStyle}}" />
Page({
  data: {
    customStyle: {
      card: {
        'background-color': '#FAFAFA',
      },
      title: {
        color: 'rgba(0, 0, 0, 0.8)',
      },
      price: {
        color: '#FF6146'
      },
      'buy-button': {
        width: '100px',
        'border-radius': '30px',
        'background-color': 'rgba(0,0,0,0.9)',
        color: '#FFD48D',
      },
      'buy-button-disabled': {
        width: '100px',
        'border-radius': '30px',
        'background-color': 'rgba(0,0,0,0.9)',
        color: '#FFD48D',
      },
    },
  }
})

使用自定义插槽(custom-content)示例代码

<store-product appid="xxx" product-id="xxx" custom-content="{{true}}">
  <view>自定义卡片内容</view>
</store-product>

detail 对象

属性名 类型 说明
code Number 状态码
message String 错误信息
code 有效值
值 说明
-1 系统失败,请重试
0 成功
10001 无效的media-id
10002 无效的media-id
10003 文件正在上传中,请等待
10004 上传的文件存在风险,请重新上传
20001 该商品因违规已下架
60001 正在加载中
60002 正在渲染中
60004 加载异常
60005 加载失败

Bug & Tip

  1. tip:请保持组件的小店标识内容完整展示。
  2. tip:参数 product-promotion-link、media-id 请在组件首次加载时传入,暂不支持在组件加载完成后调整参数
  3. tip:暂不支持在微信 Windows 版和微信 Mac 版的微信小程序上使用本组件。

store-home

基础库 3.5.5 开始支持,低版本需做兼容处理。

微信 鸿蒙 OS 版:支持

相关文档: 微信小店指引

渲染框架支持情况:WebView

功能描述

微信小程序内嵌微信小店首页,展示小店首页,并进行跳转交易。

属性说明

属性 类型 默认值 必填 说明
appid string 是 小店appid。获取方式:小店后台 – 店铺管理 – 基础信息 – 账号信息 – 微信小店ID。

Bug & Tip

  1. tip:平台规则限制,请保持组件内容完整展示且透明度、组件内部样式等未做修改,若不符合要求则会导致组件不可用,并可能导致使用本组件的能力被封禁。
  2. tip:暂不支持在微信 Windows 版和微信 Mac 版的微信小程序上使用本组件。

微信小程序 store-gift

基础库 3.8.10 开始支持,低版本需做兼容处理。

微信 鸿蒙 OS 版:支持

渲染框架支持情况:WebView

功能描述

微信小程序送礼物接口支持微信小程序调用官方组件完成一次微信礼物的赠送,送礼后,用户可通过微信【我】-【订单与卡券】查看礼物订单详情。

属性说明

属性 类型 默认值 必填 说明 最低版本
present-order-id string 是 礼物订单id,调用“创建并发送礼物”或通过“查询礼物订单列表”open api拿到,open api文档链接。 3.8.10
open-id string 是 用户openid。 3.8.10
show-gift-card boolean true 否 控制是否展示礼物卡片,默认展示礼物卡片。 3.8.10
bindsuccess eventhandle 否 打开礼物成功的回调,event.detail={code,message}。【新特性支持】微信iOS / Android版本>=8.0.61、鸿蒙版本>=8.0.15,支持在成功打开礼物并回到微信小程序时,触发成功回调。 3.8.10
binderror eventhandle 否 打开礼物失败的回调,event.detail={code,message}。 3.8.10

组件引用示例代码

<store-gift present-order-id="xxx" open-id="xxx" />

<store-gift present-order-id="xxx" open-id="xxx" show-gift-card="{{false}}" bind:success="xxx" bind:error="xxx" />

detail 对象

属性名 类型 说明
code Number 状态码
message String 错误信息
code 常见错误码
值 含义 备注
-1001 打开礼物失败[参数错误] 代表调用组件的传参有误
-1003 打开礼物失败 调用客户端jsapi失败,是因为客户端是测试包不支持jsapi所致
-1004 正在loading无法打开礼物 正在获取礼物订单信息中,可提醒用户稍后再试
-1005 当前客户端版本不支持礼物领取

注:其他错误码,建议提示“打开失败,请联系微信小程序/小游戏客服”

Bug & Tip

  1. tip:参数 present-order-id、open-id、show-gift-card 请在组件首次加载时传入,暂不支持在组件加载完成后调整参数。
  2. tip:暂不支持在微信 Windows 版和微信 Mac 版的微信小程序上使用本组件。
  3. tip:已于3.14.2版本支持在微信 鸿蒙 OS 版的微信小程序上使用本组件。
  4. tip:礼物卡片展示时限制,最大宽度350px,最小宽度312px。
  5. tip:组件要求微信iOS版本>=8.0.61,微信Android版本>=8.0.61,微信鸿蒙版本>=8.0.15。

store-coupon

基础库 3.8.3 开始支持,低版本需做兼容处理。

微信 鸿蒙 OS 版:支持

相关文档: 微信小店指引

渲染框架支持情况:WebView

功能描述

微信小程序内嵌微信小店优惠券,展示小店优惠券,并进行跳转交易。

属性说明

属性 类型 默认值 必填 说明 最低版本
appid string 是 小店appid。获取方式:小店后台 – 店铺管理 – 基础信息 – 账号信息 – 微信小店ID。
coupon-id string 是 优惠券id。获取小店优惠券id,可以通过小店后台 – 营销中心 – 优惠券。
custom-style object 否 自定义样式。支持自定义的样式请查看custom-style。
promoter-share-link string 否 推客参数。对于「机构推广券」类型优惠券,通过该参数,支持推客染色,可以通过接口获取。 3.8.11
bindentersuccess eventhandle 否 跳转小店成功的回调。
bindentererror eventhandle 否 跳转小店失败的回调,event.detail={code,message}。

自定义样式(custom-style)

键名 说明 允许自定义的属性
card 卡片样式 background-color、width
discount-fee 折扣金额样式(左上角) color
coupon-type 优惠券类型样式(左下角) color
condition-text 优惠使用条件样式(右上角) color
valid-time 优惠有效时间样式(右上角) color
coupon-button 优惠领取按钮样式 border-radius、color、background-color
coupon-text-disabled 优惠已领取状态样式 color
coupon-footer-line 卡片底部分割线样式 background-color
coupon-shop-icon 卡片底部logo icon样式 fill、fill-opacity
coupon-shop-nickname 卡片底部店铺昵称样式 color

自定义样式(custom-style)示例代码

<store-coupon appid="xxx" coupon-id="xxx" custom-style="{{customStyle}}" />
Page({
  data: {
    customStyle: {
      card: {
        'background-color': '#FAFAFA',
        'width': '300px',
      },
      'discount-fee': {
        color: 'rgba(0, 0, 0, 0.8)',
      },
      'coupon-type': {
        color: '#FF6146'
      },
      'condition-text': {
        color: '#FF6146'
      },
      'valid-time': {
        color: '#FF6146'
      },
      'coupon-button': {
        'border-radius': '30px',
        'background-color': 'rgba(0,0,0,0.9)',
        color: '#FFD48D',
      },
      'coupon-text-disabled': {
        color: '#FF6146'
      },
    },
  }
})

detail 对象

属性名 类型 说明
code Number 状态码
message String 错误信息
code 有效值
值 说明
-1 系统失败,请重试
0 成功
109114、268542430 优惠券券不存在
109119 该类型优惠券不支持在微信小程序发放

Bug & Tip

  1. tip:平台规则限制,请保持组件内容完整展示,如需自定义样式请使用 custom-style 。组件元素数量和间距、商品保障内容及售卖数据、组件文字大小、“购买”按钮高度不可进行修改,若不符合要求则会导致组件不可用,并可能导致使用本组件的能力被封禁。
  2. tip:暂不支持在微信 Windows 版和微信 Mac 版的微信小程序上使用本组件。
  3. tip:参数 product-promotion-link、media-id 请在组件首次加载时传入,暂不支持在组件加载完成后调整参数
  4. tip:暂不支持直播专享券、服务号限时活动券在微信小程序内发放