NFC 标签打开微信小程序

安卓微信客户端 8.0.14 开始支持,iOS 现网版本均已覆盖。

基于微信小程序 URL Scheme,在现有短信、邮件、网页等场景外,微信还支持通过 NFC 卡片快捷拉起微信小程序页面的能力。可用于智能设备的快速配网、快捷控制等场景。

该能力不受 URL Scheme 30 天有效期限制,且允许多个用户访问。

NFC 标签格式

要实现直接打开微信小程序,NFC 标签需要按照以下格式写入:

NFC 标签必须是 NFC Data Exchange Format (NDEF) 类型,标签中需要包含两条 Record :

  • URI Record
    • Type Name Format (TNF): 0x01 (Well-Known)
    • Type: U
    • Payload: 微信小程序 URL Scheme
  • Android Application Record, AAR
    • Type Name Format (TNF): 0x04 (NFC Forum external type)
    • Type: android.com:pkg
    • Payload: 微信安卓包名 com.tencent.mm

短信打开微信小程序

开发者可通过以下3种方式实现短信打开微信小程序:

通过URL Scheme实现

通过服务端接口或在微信小程序管理后台生成URL Scheme后,自行开发中转H5页面。

将带有中转H5链接的短信内容通过开发者自有的短信发送能力或服务商的短信服务进行投放,实现短信打开微信小程序。

通过URL Link实现

通过服务端接口生成URL Link。

直接将带有URL Link的短信内容通过开发者自有的短信发送能力或服务商的短信服务进行投放,实现短信打开微信小程序。

通过云开发静态网站实现

可以参考「云开发」-「静态网站」-「短信跳微信小程序」。

获取 Short Link

通过 服务端接口 generateShortLink 可以获取打开微信小程序任意页面的 Short Link。适用于微信内拉起微信小程序的业务场景。通过 Short Link 打开微信小程序的场景值为 1179

生成的 ShortLink 如下所示:

#微信小程序://微信小程序示例/示例页面/9pZvnVw3KMCQpVp

调用上限

Link 将根据是否为到期有效与失效时间参数,分为 短期有效 ShortLink永久有效 ShortLink

  1. 单个微信小程序每日生成 ShortLink 上限为 1000万个(包含短期有效 ShortLink 与长期有效 ShortLink )
  2. 单个微信小程序总共可生成永久有效 ShortLink 上限为 10万个,请谨慎调用。
  3. 短期有效 ShortLink 有效时间为 30天,单个微信小程序生成短期有效 ShortLink 不设上限。

开放范围

目前只开放给电商类目微信小程序,具体包含以下一级类目:电商平台、商家自营、跨境电商。

获取加密 URL Link

每个微信小程序每天 URL Scheme 和 URL Link 总打开次数上限为600万

获取方式

通过服务端接口可以获取打开微信小程序任意页面的 URL Link。适用于从短信、邮件、网页、微信内等场景打开微信小程序。 通过 URL Link 从微信外打开微信小程序的场景值为 1194。当用户在微信内访问 URL Link ,会调整为开放标签打开微信小程序,场景值为1167。
生成的 URL Link 如下所示:

https://wxaurl.cn/*TICKET* 或 https://wxmpurl.cn/*TICKET*

拼接参数

将原有 URL Link 平滑升级为加密 URL Link,支持开发者自行在链接后面拼接参数CUSTOM PARAMETE,拼接参数后的 URL Link 如下所示:

https://wxaurl.cn/*TICKET*?cq=*CUSTOM PARAMETER* 或 https://wxmpurl.cn/*TICKET*?cq=*CUSTOM PARAMETER*

注意:

  1. CUSTOM PARAMETE是一种特殊的query,最大256个字符,只支持数字,大小写英文以及部分特殊字符:!#$&'()*+,/:;=?@-._~%`,需要url_encode;
  2. 在本次规则调整生效前已经生成的 URL Scheme 可继续正常使用,并可直接进行CUSTOM PARAMETE参数拼接;
  3. 拼接参数后的加密 URL Link 打开微信小程序的场景值不变,微信外仍为1194,微信内仍会调整为开放标签打开微信小程序,场景值为1167。

频率限制

生成端:每天生成 URL Scheme(加密+明文) 和 URL Link 的总数量上限为50万;

打开端:每天通过 URL Scheme(加密+明文) 和 URL Link 打开微信小程序的总次数上限为600万。

注意事项

  1. 只能生成已发布的微信小程序的 URL Link。
  2. 在微信内或者安卓手机打开 URL Link 时,默认会先跳转官方 H5 中间页,如果需要定制 H5 内容,可以使用云开发静态网站。

开放范围

针对非个人主体微信小程序开放。

获取 URL Scheme

每个微信小程序每天 URL Scheme 和 URL Link 总打开次数上限为600万

明文 URL Scheme

获取方式

开发者无需调用平台接口,在「MP平台 – 左下角账号 – 账号设置 – 基本设置 – 隐私与安全 – 明文Scheme拉起此微信小程序」声明后,可自行根据如下格式拼接appid和path等参数,作为明文 URL Scheme 链接。

weixin://dl/business/?appid=*APPID*&path=*PATH*&query=*QUERY*&env_version=*ENV_VERSION*

其中,各个参数的定义如下:

  1. 【必填】APPID:通过明文 URL Scheme 打开微信小程序的 appid ;
  2. 【必填】PATH:通过明文 URL Scheme 打开微信小程序的页面 path ,必须是已经发布的微信小程序存在的页面,不可携带 query;
  3. 【选填】QUERY:通过明文 URL Scheme 打开微信小程序的 query ,最大512个字符,只支持数字,大小写英文以及部分特殊字符:!#$&'()*+,/:;=?@-._~%`,需要url_encode;
  4. 【选填】ENV_VERSION:要打开的微信小程序版本,正式版为release,体验版为trial,开发版为develop,仅在微信外打开时生效。注意:若不填写,则默认打开正式版微信小程序。

通过明文 URL Scheme 打开微信小程序的场景值为 1286。

加密 URL Scheme

获取方式

通过服务端接口可以获取打开微信小程序任意页面的加密 URL Scheme。适用于从短信、邮件、微信外网页等场景打开微信小程序。 通过 URL Scheme 打开微信小程序的场景值为 1065。
生成的 URL Scheme 如下所示:

weixin://dl/business/?t= *TICKET*

iOS系统支持识别 URL Scheme,可在短信等应用场景中直接通过Scheme跳转微信小程序。
Android系统不支持直接识别 URL Scheme,用户无法通过 Scheme 正常打开微信小程序,开发者需要使用 H5 页面中转,再跳转到 Scheme 实现打开微信小程序,跳转代码示例如下:

location.href = 'weixin://dl/business/?t= *TICKET*'

该跳转方法可以在用户打开 H5 时立即调用,也可以在用户触发事件后调用。

拼接参数

将原有 URL Scheme 平滑升级为加密 URL Scheme,支持开发者自行在链接后面拼接参数CUSTOM PARAMETE,拼接参数后的 URL Scheme 如下所示:

weixin://dl/business/?t= *TICKET*&cq=*CUSTOM PARAMETER*

注意:

  1. CUSTOM PARAMETE是一种特殊的query,最大256个字符,只支持数字,大小写英文以及部分特殊字符:!#$&'()*+,/:;=?@-._~%`,需要url_encode;
  2. 在本次规则调整生效前已经生成的 URL Scheme 可继续正常使用,并可直接进行CUSTOM PARAMETE参数拼接;
  3. 拼接参数后的加密 URL Scheme 打开微信小程序的场景值不变,仍为 1065。

频率限制

生成端:每天生成 加密URL Scheme 和 URL Link 的总数量上限为50万;

打开端:每天通过 URL Scheme(加密+明文) 和 URL Link 打开微信小程序的总次数上限为600万。

注意事项

  1. 微信内的网页如需打开微信小程序请使用微信开放标签-微信小程序跳转按钮,无公众号也可以直接使用微信小程序身份开发网页并免鉴权跳转微信小程序,见云开发静态网站跳转微信小程序。符合开放范围的微信小程序可以下发支持打开微信小程序的短信
  2. 该功能基本覆盖当前用户正在使用的微信版本,开发者无需进行低版本兼容
  3. 只能生成已发布的微信小程序的 URL Scheme
  4. 通过 URL Scheme 跳转到微信时,可能会触发系统弹框询问,若用户选择不跳转,则无法打开微信小程序。请开发者妥善处理用户选择不跳转的场景
  5. 部分浏览器会限制打开网页直接跳转,可参考示例网页设置跳转按钮
  6. 平台有安全策略防止开发者的链接被黑灰产批量打开,导致的达到访问上限无法正常打开微信小程序的问题

开放范围

针对非个人主体微信小程序开放。

示例代码

示例使用了云开发静态网站托管搭建网页,无需公众号,只需准备好微信小程序和开通云开发。网页会判断所在的环境来决定采用哪种跳转方式,如检测到微信客户端内,则免鉴权使用开放标签跳转,如检测到在外部浏览器或 App,则使用 URL Scheme 跳转微信小程序。

示例网页地址:https://postpay-2g5hm2oxbbb721a4-1258211818.tcloudbaseapp.com/jump-mp.html

详细代码示例和说明:云开发静态网站跳转微信小程序

获取微信小程序码

通过后台接口可以获取微信小程序任意页面的微信小程序码,扫描该微信小程序码可以直接进入微信小程序对应的页面,所有生成的微信小程序码永久有效,可放心使用。 我们推荐生成并使用微信小程序码,它具有更好的辨识度,且拥有展示“公众号关注组件”等高级能力。 生成的微信小程序码如下所示:

可以使用开发者工具 1.02.1803130 及以后版本通过 工具栏-自定义编译条件-通过二维码编译 功能来调试所获得的微信小程序

通过二维码编译

为满足不同需求和场景,这里提供了两个接口,开发者可挑选适合自己的接口。

  • 接口 A: 适用于需要的码数量较少的业务场景
    • 生成微信小程序码,可接受 path 参数较长,生成个数受限,数量限制见 注意事项,请谨慎使用。
  • 接口 B:适用于需要的码数量极多的业务场景
    • 生成微信小程序码,可接受页面参数较短,生成个数不受限。

获取微信小程序二维码(不推荐使用)

通过后台接口可以获取微信小程序任意页面的微信小程序二维码,生成的微信小程序二维码如下所示:

  • 接口 C:适用于需要的码数量较少的业务场景
    • 生成二维码,可接受 path 参数较长,生成个数受限,数量限制见 注意事项。

获取微信小程序码(一物一码)

微信一物一码 支持生成微信小程序码。微信通过“一物一码”接口发放的二维码相比较普通链接二维码更安全、支持更小的印刷面积,支持跳转到指定微信小程序页面,且无数量限制。

  • 接口 D:适用于“一物一码”的业务场景

注意事项

  1. 接口只能生成已发布的微信小程序的二维码
  2. 接口 A 加上接口 C,总共生成的码数量限制为 100,000,请谨慎调用。
  3. 接口 B 调用分钟频率受限(5000次/分钟),如需大量微信小程序码,建议预生成。

位置消息打开

微信客户端 8.0.32 及以上版本支持

为了让用户更便捷地使用微信小程序的打车服务,我们在位置消息详情页的菜单中,新增了用微信小程序打车的入口,接入说明详见:接入文档

产品示意图

在客服消息中使用临时素材

开发者可在接收和发送客服消息的过程中获取或上传临时素材。

获取客服消息内的临时素材

接收到用户消息之后,可通过 获取临时素材接口 获取消息中的临时素材

新增图片素材

通过 新增素材接口 可以上传临时素材,并在 发送消息接口 中使用。

客服输入状态

开发者可通过调用 客服输入状态接口,返回客服当前输入状态给用户。

  1. 此接口需要客服消息接口权限。
  2. 如果不满足发送客服消息的触发条件,则无法下发输入状态。
  3. 下发输入状态,需要客服之前 30 秒内跟用户有过消息交互。
  4. 在输入状态中(持续 15 秒),不可重复下发输入态。
  5. 在输入状态中,如果向用户下发消息,会同时取消输入状态。

转发客服消息

如果微信小程序设置了消息推送,普通微信用户向微信小程序客服发消息时,微信服务器会先将消息 POST 到开发者填写的 URL 上。如果希望将消息转发到网页版客服工具,则需要开发者在响应包中返回 MsgType 为 transfer_customer_service 的消息,微信服务器收到响应后会把当次发送的消息转发至客服系统。

用户被客服接入以后,客服关闭会话以前,处于会话过程中时,用户发送的消息均会被直接转发至客服系统。当会话超过 30 分钟客服没有关闭时,微信服务器会自动停止转发至客服,而将消息恢复发送至开发者填写的 URL 上。

用户在等待队列中时,用户发送的消息仍然会被推送至开发者填写的 URL 上。

这里特别要注意,只针对微信用户发来的消息才进行转发,而对于其他事件(比如用户从微信小程序唤起客服会话)都不应该转发,否则客服在客服系统上就会看到一些无意义的消息了。

消息转发到网页版客服工具

开发者只要在响应包中返回 MsgType 为 transfer_customer_service 的消息,微信服务器收到响应后就会把当次发送的消息转发至客服系统。

如果是使用自有服务器接收的消息推送,则需返回如下格式的 XML 数据:

<xml>
    <ToUserName><![CDATA[touser]]></ToUserName>
    <FromUserName><![CDATA[fromuser]]></FromUserName>
    <CreateTime>1399197672</CreateTime>
    <MsgType><![CDATA[transfer_customer_service]]></MsgType>
</xml>

参数说明

参数 是否必须 描述
ToUserName 接收方账号(收到的OpenID)
FromUserName 微信小程序原始id
CreateTime 消息创建时间 (整型)
MsgType transfer_customer_service

如果是使用云函数接收的消息推送,则需在云函数被客服消息触发后返回同样格式的 JSON 数据:

// ...
exports.main = async (event, context) => {
  // 判断处理客服消息 ...
  // 最后返回 JSON
  return {
    MsgType: 'transfer_customer_service',
    ToUserName: 'touser',
    FromUserName: 'fromuser',
    CreateTime: parseInt(+new Date / 1000),
  }
}