微信小程序开发文档 第38页
快递接口(商家必看) 1. 产品介绍 快递接口是微信官方为小程序提供的免费物流接口。接入后,你可使用本接口在多家快递公司获取电子面单单号等信息,再通过热敏打印机完成电子面单打印,即可将快件交给快递公司上门揽收。 2. 接入快递接口有什么好处 可批量生成电子面单本接口已对接多家快递公司下单接口,使用本接口可在各快递公司批量生成电子面单; 可回传物流轨迹给你经由快递接口下的单,微信会将物流轨迹返回给你,便于你实时掌握快件运输路径; 用户可收到物流通知经由快递接口下的单,微信官方会通过服务通知推送快件状态给用户,提升用户体验; 完全免费的官方接口快递接口为微信官方接口,统一对接多家物流公司,服务稳定,免费开放。 增加用户回流小程序入口接入快递接口后,用户可通过两个方式回访你的小程序: 3.目前支持的快递公司 4. 如何使用物流助手 前往微信公众平台→【物流助手】→【去接入】查看接入流程指引 步骤1:绑定签约的快递网点账号 在微信公众平台-小程序管理后台,点击【物流助手】→【去接入】→【去绑定】,选择和你签约过的物流公司,输入和网点签约时分配给你的账号密码,提交绑定; 绑定说明 (1) 若当前无账号密码,请先线下联系物流公司网点完成签约获得账号和密码,再进行绑定;(2) 上述绑定账号即为调用快递接口Api下单时,选择物流公司后需填写的Bizid;(3) 若事先没有和物流公司签约,准备发散单,则无需在该页面绑定物流公司,调用物流接口下单时填写现付的Bizid即可,下单成功后系统会通知快递员上门取件,运费现结。目前两家物流公司支持下散单,对应Bizid如下: 快递公司名称 快递公司ID 现付的BizID 顺丰速运 SF SF_CASH 德邦快递 DB DB_CASH 步骤2:对接快递接口(商家必看)Api (1)查看接口文档 (2)开发接口文档:你可自行开发或授权服务商开发,遇到问题可前往微信开放社区提问; (3)测试下单:自行填写测试的收发货人信息和商品信息,看是否可成功调用本接口下单、成功生成电子面单、获取面单数据、打印面单和接收服务通知,全流程走通则说明接口已调通。 步骤3:打印电子面单 用快递接口Api下单后,可选择以下任一方式打印电子面单 使用微信物流助手对接的第三方打单软件打印面单,当前已支持的第三方打单软件为: 快递管家 点击获取对接指引更多第三方持续对接中,请期待 使用物流公司接口或收件员上门打印电子面单; 使用 getOrder 拉取电子面单 html,使用热敏打印机打印(可能存在格式兼容问题,需调试); 使用 getOrder 拉取电子面单的waybill_data,自行构造面单并打印(可能存在格式兼容问题,需调试); 安装使用微信打单PC软件:目前支持 Windows XP 及以上版本。点此下载 步骤4:快递员上门揽件 快递员上门揽件后,商家即可通过物流助手Api接收物流轨迹,微信会给用户推送已揽件、派件中、已签收/签收异常的服务通知,便于用户了解运单轨迹。 附录:快递接口流程图
卡券 说明 小程序卡券接口支持在小程序中领取/查看/使用公众号 AppId 创建的会员卡、票、券(含通用卡)。更多使用方法可参考 小程序&卡券打通 使用条件 目前只有认证小程序才能使用卡券接口,可参考 指引 进行认证。 接口 小程序内可以通过 wx.addCard 接口给用户添加卡券。通过 wx.openCard 让用户选择已有卡券。 会员卡组件 开发者可以在小程序内调用该接口拉起会员开卡组件,方便用户快速填写会员注册信息并领卡。该接口拉起开卡组件无须提前将开卡组件和发起小程序绑定至同一个公众号,开发者直接调用即可。 调用前开发者须完成以下步骤: 创建一张微信会员卡并设置为一键激活模式; 设置开卡字段; 获取开卡组件参数; 详情查看会员开卡组件介绍:会员开卡组件 参数说明 参数名 类型 是否必填 参数说明 appId String 是 填写 wxeb490c6f9b154ef9,固定为此appid extraData Object 是 开卡组件参数,由第3步获取,包含以下三个参数 encrypt_card_id String 是 加密 card_id,传入前须 urldecode outer_str String 是 会员卡领取渠道值,会在卡券领取事件回传给商户 biz String 是 商户公众号标识参数,传入前须 urldecode success Function 否 接口调用成功的回调函数 fail Function 否 接口调用失败的回调函数 complete Function 否 接口调用结束的回调函数(调用成功、失败都会执行) 返回参数 参数名 类型 参数说明 errMsg String 调用结果 示例代码 wx.navigateToMiniProgram({ appId: 'wxeb490c6f9b154ef9', //固定为此 appid,不可改动 extraData: data, // 包括 encrypt_card_id, outer_str, biz三个字段,须从 step3 中获得的链接中获取参数 success: function() { }, fail: function() { }, complete: function() { } }) navigateToMiniProgram接口即将废弃,新版本中请使用navigator组件来使用此功能 <navigator target="miniProgram" app-id="wxeb490c6f9b154ef9" extra-data="{{data}}">会员卡开卡</navigator> 返回说明 在 App.onShow 里判断从会员开卡小程序返回的数据data 判断 data.referrerInfo.appId 是否为开卡小程序 appId wxeb490c6f9b154ef9,如果不是则中止判断 判断是否有 data.referrerInfo.extraData 是否有数据,如果没有,表示用户未激活直接左滑/点返回键返回,或者用户已经激活 若用户激活成功,可以从 data.referrerInfo.extraData 中获取 activate_ticket,card_id,code 参数用于下一步操作 提示: 在开发者工具上调用此 API 并不会真实的跳转到另外的小程序,但是开发者工具会校验本次调用跳转是否成功详情 开发者工具上支持被跳转的小程序处理接收参数的调试详情 开卡组件是使用wx.navigateToMiniProgram开发的官方组件,跳转时无须绑定同一个公众号,直接调用即可
位置消息 微信客户端 7.0.9 及以上版本支持,iOS 暂不支持 为了让用户更便 捷地使用小程序的打车服务,我们在位置消息详情页的菜单中,新增了打车小程序入口。 打开聊天中的位置消息,点击详情页右下角绿色按钮,菜单中会展示符合条件的打车小程序,用户可以直接发起目的地为该位置的打车服务。 小程序的注册类目为“打车(网约车)”,且有用户最近使用的记录,才可以出现在该菜单中。 在此处点击打开小程序后,需要直接进入到发起打车页面。 1. 位置消息入口声明 开发者需要在全局配置app.json声明支持从位置消息入口进入小程序。 配置示例: "entranceDeclare": { "locationMessage": { "path": "pages/index/index", "query": "foo=bar" } } 配置项 属性 类型 必填 描述 最低版本 entranceDeclare Object 否 入口声明信息 7.0.9 entranceDeclare参数列表 属性 类型 必填 描述 最低版本 locationMessage Object 否 声明“位置消息”场景进入小程序的启动页面 7.0.9 locationMessage参数列表 属性 类型 必填 描述 最低版本 path string 否 启动页路径,必须是在pages中已经定义 7.0.9 query string 否 启动页参数 7.0.9 2. 从启动参数获取位置信息 示例代码: //app.js App({ onLaunch: function (options){ console.log(options) var scene = options.scene if (scene == 1146) { // 位置消息场景值 var location = options.locationInfo var x = location.latitude var y = location.longitude var name = location.name } }, }) Object 启动参数 属性 类型 描述 scene number 启动小程序的场景值,“位置消息”的启动场景值为1146 locationInfo Object 特殊场景的启动信息 locationInfo 的结构 属性 类型 描述 latitude number 纬度,范围为 -90~90,负数表示南纬 longtitude...
客服消息 在页面使用客服消息 需要将 button 组件 open-type 的值设置为 contact,当用户点击后就会进入客服会话,如果用户在会话中点击了小程序消息,则会返回到小程序,开发者可以通过 bindcontact 事件回调获取到用户所点消息的页面路径 path 和对应的参数 query。 代码示例 <button open-type="contact" bindcontact="handleContact"></button> Page({ handleContact (e) { console.log(e.detail.path) console.log(e.detail.query) } }) 返回参数说明 参数 类型 说明 path String 小程序消息指定的路径 query Object 小程序消息指定的查询参数 后台接入消息服务 用户向小程序客服发送消息、或者进入会话等情况时,开发者填写的服务器配置 URL (如果使用的是云开发,则是配置的云函数)将得到微信服务器推送过来的消息和事件,开发者可以依据自身业务逻辑进行响应。接入和使用方式请参考消息推送。 接收消息和事件 在页面中使用 <button open-type=”contact” /> 可以显示进入客服会话按钮。 当用户在客服会话发送消息、或由某些特定的用户操作引发事件推送时,微信服务器会将消息或事件的数据包发送到开发者填写的 URL,如果使用的是云开发,则可以推送到指定的云函数(详情请参考消息推送)。开发者收到请求后可以使用 发送客服消息 接口进行异步回复。 各消息类型的推送JSON、XML数据包结构如下。 文本消息 用户在客服会话中发送文本消息时将产生如下数据包: XML 格式 <xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[fromUser]]></FromUserName> <CreateTime>1482048670</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[this is a test]]></Content> <MsgId>1234567890123456</MsgId> </xml> JSON 格式 { "ToUserName": "toUser", "FromUserName": "fromUser", "CreateTime": 1482048670, "MsgType": "text", "Content": "this is a test", "MsgId": 1234567890123456 } 参数说明 参数 说明 ToUserName 小程序的原始ID FromUserName 发送者的openid CreateTime 消息创建时间(整型) MsgType text Content 文本消息内容 MsgId 消息id,64位整型 图片消息 用户在客服会话中发送图片消息时将产生如下数据包: XML 格式 <xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[fromUser]]></FromUserName> <CreateTime>1482048670</CreateTime> <MsgType><![CDATA[image]]></MsgType> <PicUrl><![CDATA[this is a url]]></PicUrl> <MediaId><![CDATA[media_id]]></MediaId> <MsgId>1234567890123456</MsgId> </xml> JSON 格式 { "ToUserName": "toUser", "FromUserName": "fromUser", "CreateTime": 1482048670, "MsgType": "image", "PicUrl": "this is a url", "MediaId": "media_id", "MsgId":...
打开 App 此功能需要用户主动触发才能打开 APP,所以不由 API 来调用,需要用 open-type 的值设置为 launchApp 的 button 组件的点击来触发。 当小程序从 APP 分享消息卡片的场景打开(场景值 1036,APP 分享小程序文档 iOS / Android) 或从 APP 打开的场景打开时(场景值 1069),小程序会获得打开 APP 的能力,此时用户点击按钮可以打开分享该小程序卡片/拉起该小程序的 APP。即小程序不能打开任意 APP,只能 跳回 APP。 在一个小程序的生命周期内,只有在特定条件下,才具有打开 APP 的能力。 在基础库 < 2.5.1 的版本,这个能力的规则如下: 当小程序从 1069 场景打开时,可以打开 APP。 当小程序从非 1069 的打开时,会在小程序框架内部会管理的一个状态,为 true 则可以打开 APP,为 false 则不可以打开 APP。这个状态的维护遵循以下规则: 当小程序从 App 分享消息卡片(场景值1036)打开时,该状态置为 true。 当小程序从以下场景打开时,保持上一次打开小程序时打开 App 能力的状态:从其他小程序返回小程序(场景值1038)时(基础库 2.2.4 及以上版本支持)小程序从聊天顶部场景(场景值1089)中的「最近使用」内打开时长按小程序右上角菜单唤出最近使用历史(场景值1090)打开时 当小程序从非以上场景打开时,不具有打开 APP 的能力,该状态置为 false。 在基础库 >= 2.5.1 时,这个能力的规则如下: 当小程序从任意场景打开时,会在小程序框架内部会管理的一个状态,为 true 则可以打开 APP,为 false 则不可以打开 APP。这个状态的维护遵循以下规则: 当小程序从 App 分享消息卡片(场景值1036)或从 APP 打开的场景打开时(场景值 1069)打开时,该状态置为 true。 当小程序从以下场景打开时,保持上一次打开小程序时打开 App 能力的状态:从其他小程序返回小程序(场景值1038)时(基础库 2.2.4 及以上版本支持)小程序从聊天顶部场景(场景值1089)中的「最近使用」内打开时长按小程序右上角菜单唤出最近使用历史(场景值1090)打开时 当小程序从非以上场景打开时,不具有打开 APP 的能力,该状态置为 false。 使用方法 小程序端 需要将 button 组件 open-type 的值设置为 launchApp。如果需要在打开 APP 时向 APP 传递参数,可以设置 app-parameter 为要传递的参数。通过 binderror 可以监听打开 APP 的错误事件。 app 端 APP 需要接入 OpenSDK。 文档请参考 iOS / Android Android 第三方 app 需要处理 ShowMessageFromWX.req 的微信回调,iOS 则需要将 appId 添加到第三方 app 工程所属的 plist 文件 URL types 字段。 app-parameter 的获取方法,参数解析请参考 Android SDKSample 中 WXEntryActivity 中的 onResp 方法以及 iOS SDKSample 中 WXApiDelegate 中的 onResp 方法。 代码示例...
多人音视频对话 用于实现小程序内多人音视频对话的功能。 申请开通 小程序管理后台,「开发」-「接口设置」中自助开通该组件权限。相关接口 wx.joinVoIPChat 和组件 voip-room。 调用流程 开发者仅需提供房间唯一标识,即可加入到指定的房间。传入相同唯一标识的用户,会进到相同的房间。为了保证前端传入的 groupId 可信,wx.joinVoIPChat 接口要求传入签名。详见下文 签名算法。当加入视频房间时,可结合 voip-room 组件显示成员画面。 前端接口 创建/加入房间:wx.joinVoIPChat 离开房间:wx.exitVoIPChat 更新房间麦克风/耳机静音设置:wx.updateVoIPChatMuteConfig 监听房间成员变化:wx.onVoIPChatMembersChanged 监听房间成员通话状态变化:wx.onVoIPChatSpeakersChanged 监听通话中断:wx.onVoIPChatInterrupted 监听实时语音通话成员视频状态变化:wx.onOnVoIPVideoMembersChanged 签名算法 生成签名需要传入四个参数: 参数名 说明 appId 小游戏的 appId groupId 游戏房间的唯一标识,由游戏自己保证唯一 nonceStr 随机字符串,长度应小于 128 timeStamp 生成这个随机字符串的 UNIX 时间戳(精确到秒) 签名算法为: signature = hmac_sha256([appId, groupId, nonceStr, timeStamp].sort().join(''), sessionKey) 具体来说,这个算法分为几个步骤: 对 appId groupId nonceStr timeStamp 四个值表示成字符串形式,按照字典序排序; 将排好序的四个字符串拼接在一起; 使用 session_key 作为 key,使用 hmac_sha256 算法对 2 中的结果字符串做计算,所得结果即为 signature 示例: appId = 'wx20afc706a711eefc' groupId = '1559129713_672975982' nonceStr = '8AP6DT9ybtniUJfb' timeStamp = '1559129714' session_key = 'gDyVgzwa0mFz9uUP7M6GQQ==' str = [appId, groupId, nonceStr, timeStamp].sort().join('') = '1559129713_67297598215591297148AP6DT9ybtniUJfbwx20afc706a711eefc' signature = hmac_sha256('1559129713_67297598215591297148AP6DT9ybtniUJfbwx20afc706a711eefc', sessionKey) = 'b002b824688dd8593a6079e11d8c5e8734fbcb39a6d5906eb347bfbcad79c617' 使用云开发完成签名 在云开发中,无法获取 session_key,但提供了单独的函数 cloud.getVoIPSign 来计算签名。 const cloud = require('wx-server-sdk') cloud.init() exports.main = async (event, context) => { const signature = cloud.getVoIPSign({ groupId: 'xxx', timestamp: 123, nonce: 'yyy' }) return signature } 人数限制 每个房间最多同时加入 10 个人。 频率限制 对于每个小程序,每天最多允许创建 100000 个房间。当所有人退出房间时,房间即被销毁。此时如果传入之前用过的 groupId 重新加入房间,会被计算为新开一个房间。
转发 获取更多转发信息 通常开发者希望转发出去的小程序被二次打开的时候能够获取到一些信息,例如群的标识。现在通过调用 wx.showShareMenu 并且设置 withShareTicket 为 true ,当用户将小程序转发到任一群聊之后,此转发卡片在群聊中被其他用户打开时,可以在 App.onLaunch 或 App.onShow 获取到一个 shareTicket。通过调用 wx.getShareInfo 接口传入此 shareTicket 可以获取到转发信息。 页面内发起转发 基础库 1.2.0 开始支持,低版本需做兼容处理。 通过给 button 组件设置属性 open-type=”share”,可以在用户点击按钮后触发 Page.onShareAppMessage 事件,相关组件:button。 使用指引 转发按钮,旨在帮助用户更流畅地与好友分享内容和服务。转发,应是用户自发的行为,且在需要时触手可及。开发者在使用时若遵从以下指引,会得到更佳的用户体验。 含义清晰:明确、一目了然的图形按钮,将为用户减少理解的时间。在我们的资源下载中心,你可以找到这样的按钮素材并直接使用。或者你可以根据自己业务的设计风格,灵活设计含义清晰的按钮的样式。当然,你也可以直接使用带文案的按钮,“转发给好友”,它也足够明确。 方便点击:按钮点击热区不宜过小,亦不宜过大。同时,转发按钮与其他按钮一样,热区也不宜过密,以免用户误操作。 按需出现:并非所有页面都适合放置转发按钮,涉及用户隐私的非公开内容,或可能打断用户完成当前操作体验的场景,该功能并不推荐使用。同时,由于转发过程中,我们将截取用户屏幕图像作为配图,因此,需要注意帮助用户屏蔽个人信息。 尊重意愿:理所当然,并非所有的用户,都喜欢与朋友分享你的小程序。因此,它不应该成为一个诱导或强制行为,如转发后才能解锁某项功能等。请注意,这类做法不仅不被推荐,还可能违反我们的《运营规范》,我们强烈建议你在使用前阅读这部分内容。 以上,我们陈列了最重要的几点,如果你有时间,可以完整浏览《设计指南》,相信会有更多的收获。 提示: 不自定义转发图片的情况下,默认会取当前页面,从顶部开始,高度为 80% 屏幕宽度的图像作为转发图片。 转发的调试支持请查看 普通转发的调试支持 和 带 shareTicket 的转发 只有转发到群聊中打开才可以获取到 shareTickets 返回值,单聊没有 shareTickets shareTicket 仅在当前小程序生命周期内有效 由于策略变动,小程序群相关能力进行调整,开发者可先使用 wx.getShareInfo 接口中的群 ID 进行功能开发。 微信7.0.12开始,支持群主转发小程序时同时把消息设为该群的群待办消息,群待办消息会以气泡形式出现在聊天窗口底部。默认每次转发一个群待办消息,都会生成一个待办消息气泡。通过 wx.updateShareMenu 接口修改toDoActivityId属性可以把多个待办消息聚合为同一个,即转发相同toDoActivityId的群待办消息,只会出现一个待办消息气泡。toDoActivityId需要在转发前通过 updatableMessage.createActivityId 接口创建。 动态消息 从基础库 2.4.0 开始,支持转发动态消息。动态消息对比普通消息,有以下特点: 消息发出去之后,开发者可以通过后台接口修改部分消息内容。 消息有对应的提醒按钮,用户点击提醒按钮可以订阅提醒,开发者可以通过后台修改消息状态并推送一次提醒消息给订阅了提醒的用户 消息属性 动态消息有状态、文字内容、文字颜色。 状态 消息有两个状态,分别有其对应的文字内容和颜色。其中状态 0 可以转移到状态 0 和 1,状态 1 无法再转移。 状态 文字内容 颜色 允许转移的状态 0 “成员正在加入,当前 {member_count}/{room_limit} 人” #FA9D39 0, 1 1 “已开始” #CCCCCC 无 状态参数 每个状态转移的时候可以携带参数,具体参数说明如下。 参数 类型 说明 member_count string 状态 0 时有效,文字内容模板中 member_count 的值 room_limit string 状态 0 时有效,文字内容模板中 room_limit 的值 path string 状态 1 时有效,点击「进入」启动小程序时使用的路径。对于小游戏,没有页面的概念,可以用于传递查询字符串(query),如 "?foo=bar" version_type string 状态 1 时有效,点击「进入」启动小程序时使用的版本。有效参数值为:develop(开发版),trial(体验版),release(正式版) 使用方法 一、创建 activity_id 每条动态消息可以理解为一个活动,活动发起前需要通过 updatableMessage.createActivityId 接口创建 activity_id。后续转发动态消息以及更新动态消息都需要传入这个 activity_id。 活动的默认有效期是 24 小时。活动结束后,消息内容会变成统一的样式: 文字内容:“已结束” 文字颜色:#00ff00 二、在转发之前声明消息类型为动态消息 通过调用 wx.updateShareMenu 接口,传入 isUpdatableMessage: true,以及 templateInfo、activityId 参数。其中 activityId 从步骤一中获得。 wx.updateShareMenu({ withShareTicket: true, isUpdatableMessage: true, activityId: '', // 活动 ID templateInfo: { parameterList: [{ name: 'member_count', value: '1' }, { name: 'room_limit', value: '3' }]...
分享到朋友圈(Beta) 从基础库 2.11.3 开始支持 此功能为beta版,暂仅在Android平台支持 可将小程序页面分享到朋友圈。适用于内容型页面的分享,不适用于有较多交互的页面分享。 设置分享状态 小程序页面默认不可被分享到朋友圈,开发者需主动设置“分享到朋友圈”。页面允许被分享到朋友圈,需满足两个条件: 首先,页面需设置允许“发送给朋友”。具体参考 Page.onShareAppMessage 接口文档 满足条件 1 后,页面需设置允许“分享到朋友圈”,同时可自定义标题、分享图等。具体参考 Page.onShareTimeline 接口文档 满足上述两个条件的页面,可被分享到朋友圈。 单页模式 用户在朋友圈打开分享的小程序页面,并不会真正打开小程序,而是进入一个“小程序单页模式”的页面,“单页模式”有以下特点: “单页模式”下,页面顶部固定有导航栏,标题显示为当前页面 JSON 配置的标题。底部固定有操作栏,点击操作栏的“前往小程序”可打开小程序的当前页面。顶部导航栏与底部操作栏均不支持自定义样式。 “单页模式”默认运行的是小程序页面内容,但由于页面固定有顶部导航栏与底部操作栏,很可能会影响小程序页面的布局。因此,请开发者特别注意适配“单页模式”的页面交互,以实现流畅完整的交互体验。 “单页模式”下,一些组件或接口存在一定限制,详情见下文单页模式下的限制章节 页面适配 可通过判断场景值等于 1154 的方法来进行页面适配。另外,在单页模式下,可设置顶部导航栏与页面的相交状态,具体参考 navigationBarFit 配置。 还需留意的是,在单页模式下,wx.getSystemInfo 接口返回的 safeArea 为整个屏幕空间。 单页模式下的限制 小程序“单页模式”适用于纯内容展示场景,可实现的交互与接口能力有限,因此存在如下限制: 页面无登录态,与登录相关的接口,如 wx.login 均不可用;云开发资源需开启未登录访问方可在单页模式下使用,详见未登录模式。 不允许跳转到其它页面,包括任何跳小程序页面、跳其它小程序、跳微信原生页面 不允许横屏使用 若页面包含 tabBar,tabBar 不会渲染,包括自定义 tabBar 本地存储与小程序普通模式不共用 对于一些会产生交互的组件或接口,在点击后调用时,会弹 toast 提示“请前往小程序使用完整服务”。为达到良好的用户体验,请注意适配单页模式的接口能力,请勿大量使用被禁用的接口或组件。 禁用能力列表: 分类 功能点 组件 button open-type 、 camera 、 editor 、 form 、 functional-page-navigator 、 live-pusher 、 navigator 、 navigation-bar 、 official-account 、 open-data 、 web-view 路由 wx.redirectTo 、 wx.reLaunch 、 wx.navigateTo 、 wx.switchTab 、 wx.navigateBack 界面 导航栏 、 Tab Bar 网络 mDNS 、 UDP 通信 数据缓存 周期性更新 媒体 VoIP 、 wx.chooseMedia 、 wx.chooseImage 、 wx.saveImageToPhotosAlbum 、 wx.chooseVideo 、 wx.saveVideoToPhotosAlbum 、 wx.getVideoInfo 、 wx.compressVideo 位置 wx.openLocation 、 wx.chooseLocation 、 wx.startLocationUpdateBackground 、 wx.startLocationUpdate 转发 wx.getShareInfo 、 wx.showShareMenu 、 wx.hideShareMenu 、 wx.updateShareMenu 文件 wx.openDocument 开放接口 登录 、 小程序跳转 、 用户信息 、 支付 、 授权 、 设置 、 收货地址 、 卡券 、 发票 、 生物认证 、 微信运动 、 微信红包 设备 蓝牙 、 iBeacon 、 Wi-Fi 、 NFC 、 联系人 、 剪贴板 、 电话 、 扫码 广告 ad 、 wx.createRewardedVideoAd 、 wx.createInterstitialAd 运营须知 分享朋友圈能力是为了满足纯内容场景的分享诉求,滥用于营销、诱导等行为将会被打击。 小程序提供的服务中,不得存在滥用分享违规行为。如强制用户分享行为;分享立即获得利益的诱导行为;以及通过明示或暗示的样式来达到诱导分享目的的行为等。详见《微信小程序平台运营规范》 在“单页模式”下,不得诱导或强制用户点击“打开小程序”,应在“单页模式”中尽可能呈现完整的内容 提示: 低版本微信客户端打开时,会进入一个升级提示页面 不支持在小程序页面内直接发起分享 自定义分享内容时不支持自定义页面路径 存在 web-view 组件的页面不支持发起分享 支持打开开发版、体验版,无权限人员进入时页面会提示无权限
获取手机号 获取微信用户绑定的手机号,需先调用wx.login接口。 因为需要用户主动触发才能发起获取手机号接口,所以该功能不由 API 来调用,需用 button 组件的点击来触发。 注意:目前该接口针对非个人开发者,且完成了认证的小程序开放(不包含海外主体)。需谨慎使用,若用户举报较多或被发现在不必要场景下使用,微信有权永久回收该小程序的该接口权限。 使用方法 需要将 button 组件 open-type 的值设置为 getPhoneNumber,当用户点击并同意之后,可以通过 bindgetphonenumber 事件回调获取到微信服务器返回的加密数据, 然后在第三方服务端结合 session_key 以及 app_id 进行解密获取手机号。 注意 在回调中调用 wx.login 登录,可能会刷新登录态。此时服务器使用 code 换取的 sessionKey 不是加密时使用的 sessionKey,导致解密失败。建议开发者提前进行 login;或者在回调中先使用 checkSession 进行登录态检查,避免 login 刷新登录态。 代码示例 <button open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber"></button> Page({ getPhoneNumber (e) { console.log(e.detail.errMsg) console.log(e.detail.iv) console.log(e.detail.encryptedData) } }) 返回参数说明 参数 类型 说明 最低版本 encryptedData String 包括敏感数据在内的完整用户信息的加密数据,详细见加密数据解密算法 iv String 加密算法的初始向量,详细见加密数据解密算法 cloudID string 敏感数据对应的云 ID,开通云开发的小程序才会返回,可通过云调用直接获取开放数据,详细见云调用直接获取开放数据 基础库 2.8.0 获取得到的开放数据为以下 json 结构: { "phoneNumber": "13580006666", "purePhoneNumber": "13580006666", "countryCode": "86", "watermark": { "appid":"APPID", "timestamp": TIMESTAMP } } 参数 类型 说明 phoneNumber String 用户绑定的手机号(国外手机号会有区号) purePhoneNumber String 没有区号的手机号 countryCode String 区号
服务端获取开放数据 小程序可以通过各种前端接口获取微信提供的开放数据。考虑到开发者服务端也需要获取这些开放数据,微信提供了两种获取方式: 方式一:开发者后台校验与解密开放数据 方式二:云调用直接获取开放数据(云开发) 方式一:开发者后台校验与解密开放数据 微信会对这些开放数据做签名和加密处理。开发者后台拿到开放数据后可以对数据进行校验签名和解密,来保证数据不被篡改。 签名校验以及数据加解密涉及用户的会话密钥 session_key。 开发者应该事先通过 wx.login 登录流程获取会话密钥 session_key 并保存在服务器。为了数据不被篡改,开发者不应该把 session_key 传到小程序客户端等服务器外的环境。 数据签名校验 为了确保开放接口返回用户数据的安全性,微信会对明文数据进行签名。开发者可以根据业务需要对数据包进行签名校验,确保数据的完整性。 通过调用接口(如 wx.getUserInfo)获取数据时,接口会同时返回 rawData、signature,其中 signature = sha1( rawData + session_key ) 开发者将 signature、rawData 发送到开发者服务器进行校验。服务器利用用户对应的 session_key 使用相同的算法计算出签名 signature2 ,比对 signature 与 signature2 即可校验数据的完整性。 如 wx.getUserInfo的数据校验: 接口返回的rawData: { "nickName": "Band", "gender": 1, "language": "zh_CN", "city": "Guangzhou", "province": "Guangdong", "country": "CN", "avatarUrl": "http://wx.qlogo.cn/mmopen/vi_32/1vZvI39NWFQ9XM4LtQpFrQJ1xlgZxx3w7bQxKARol6503Iuswjjn6nIGBiaycAjAtpujxyzYsrztuuICqIM5ibXQ/0" } 用户的 session-key: HyVFkGl5F5OQWJZZaNzBBg== 用于签名的字符串为: {"nickName":"Band","gender":1,"language":"zh_CN","city":"Guangzhou","province":"Guangdong","country":"CN","avatarUrl":"http://wx.qlogo.cn/mmopen/vi_32/1vZvI39NWFQ9XM4LtQpFrQJ1xlgZxx3w7bQxKARol6503Iuswjjn6nIGBiaycAjAtpujxyzYsrztuuICqIM5ibXQ/0"}HyVFkGl5F5OQWJZZaNzBBg== 使用sha1得到的结果为 75e81ceda165f4ffa64f4068af58c64b8f54b88c 加密数据解密算法 接口如果涉及敏感数据(如wx.getUserInfo当中的 openId 和 unionId),接口的明文内容将不包含这些敏感数据。开发者如需要获取敏感数据,需要对接口返回的加密数据(encryptedData) 进行对称解密。 解密算法如下: 对称解密使用的算法为 AES-128-CBC,数据采用PKCS#7填充。 对称解密的目标密文为 Base64_Decode(encryptedData)。 对称解密秘钥 aeskey = Base64_Decode(session_key), aeskey 是16字节。 对称解密算法初始向量 为Base64_Decode(iv),其中iv由数据接口返回。 微信官方提供了多种编程语言的示例代码((点击下载)。每种语言类型的接口名字均一致。调用方式可以参照示例。 另外,为了应用能校验数据的有效性,会在敏感数据加上数据水印( watermark ) watermark参数说明: 参数 类型 说明 appid String 敏感数据归属 appId,开发者可校验此参数与自身 appId 是否一致 timestamp Int 敏感数据获取的时间戳, 开发者可以用于数据时效性校验 如接口 wx.getUserInfo 敏感数据当中的 watermark: { "openId": "OPENID", "nickName": "NICKNAME", "gender": GENDER, "city": "CITY", "province": "PROVINCE", "country": "COUNTRY", "avatarUrl": "AVATARURL", "unionId": "UNIONID", "watermark": { "appid":"APPID", "timestamp":TIMESTAMP...