微信小程序开发文档 第47页
onShareAppMessage(options) 在 Page 中定义 onShareAppMessage 函数,设置该页面的转发信息。 只有定义了此事件处理函数,右上角菜单才会显示“转发”按钮 用户点击转发按钮的时候会调用 此事件需要 return 一个 Object,用于自定义转发内容 options 参数说明 参数 类型 说明 最低版本 from String 转发事件来源。button:页面内转发按钮;menu:右上角转发菜单 1.2.4 target Object 如果 from 值是 button,则 target 是触发这次转发事件的 button,否则为 undefined 1.2.4 自定义转发字段 字段 说明 默认值 最低版本 title 转发标题 当前小程序名称 path 转发路径 当前页面 path ,必须是以 / 开头的完整路径 success 转发成功的回调函数 1.1.0 fail 转发失败的回调函数 1.1.0 complete 转发结束的回调函数(转发成功、失败都会执行 1.1.0 回调结果: 回调类型 errMsg 说明 success shareAppMessage:ok 转发成功 fail shareAppMessage:fail cancel 用户取消转发 fail shareAppMessage:fail (detail message) 转发失败,其中 detail message 为详细失败信息 success回调参数说明: 参数 类型 说明 最低版本 shareTickets StringArray shareTicket 数组,每一项是一个 shareTicket ,对应一个转发对象 1.1.0 示例代码: Page({ onShareAppMessage: function (res) { if (res.from === 'button') { // 来自页面内转发按钮 console.log(res.target) } return { title: '自定义转发标题', path: '/page/user?id=123', success: function(res) { // 转发成功 },...
接入概述 接入微信小程序消息服务,开发者需要按照如下步骤完成: 1、填写服务器配置 2、验证服务器地址的有效性 3、依据接口文档实现业务逻辑 下面详细介绍这3个步骤。 第一步:填写服务器配置 登录微信小程序官网后,在小程序官网的“设置-消息服务器”页面,管理员扫码启用消息服务,填写服务器地址(URL)、Token 和 EncodingAESKey。 URL是开发者用来接收微信消息和事件的接口URL。Token可由开发者可以任意填写,用作生成签名(该Token会和接口URL中包含的Token进行比对,从而验证安全性)。EncodingAESKey由开发者手动填写或随机生成,将用作消息体加解密密钥。 同时,开发者可选择消息加解密方式:明文模式、兼容模式和安全模式。可以选择消息数据格式:XML格式或JSON格式。加密方式的默认状态是明文格式,而数据格式的默认状态是XML格式。 模式的选择与服务器配置在提交后都会立即生效,请开发者谨慎填写及选择。切换加密方式和数据格式需要提前配置好相关代码,详情请参考消息加解密说明。 第二步:验证消息的确来自微信服务器 开发者提交信息后,微信服务器将发送GET请求到填写的服务器地址URL上,GET请求携带参数如下表所示: 参数 描述 signature 微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。 timestamp 时间戳 nonce 随机数 echostr 随机字符串 开发者通过检验signature对请求进行校验(下面有校验方式)。若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败。加密/校验流程如下:1、将token、timestamp、nonce三个参数进行字典序排序;2、将三个参数字符串拼接成一个字符串进行sha1加密;3、开发者获得加密后的字符串可与signature对比,标识该请求来源于微信 检验signature的PHP示例代码: private function checkSignature() { $signature = $_GET["signature"]; $timestamp = $_GET["timestamp"]; $nonce = $_GET["nonce"]; $token = TOKEN; $tmpArr = array($token, $timestamp, $nonce); sort($tmpArr, SORT_STRING); $tmpStr = implode( $tmpArr ); $tmpStr = sha1( $tmpStr ); if( $tmpStr == $signature ){ return true; }else{ return false; } } PHP示例代码下载:下载 第三步:依据接口文档实现业务逻辑 验证URL有效性成功后即接入生效,成为开发者。至此用户向小程序客服发送消息、或者进入会话等情况时,开发者填写的服务器配置URL将得到微信服务器推送过来的消息和事件,开发者可以依据自身业务逻辑进行响应。 另请注意,开发者所填写的URL必须以 http:// 或 https:// 开头,分别支持80端口和443端口。
转发消息 如果小程序设置了消息推送,普通微信用户向小程序客服发消息时,微信服务器会先将消息 POST 到开发者填写的 url 上,如果希望将消息转发到网页版客服工具,则需要开发者在响应包中返回 MsgType 为 transfer_customer_service 的消息,微信服务器收到响应后会把当次发送的消息转发至客服系统。 用户被客服接入以后,客服关闭会话以前,处于会话过程中时,用户发送的消息均会被直接转发至客服系统。当会话超过 30 分钟客服没有关闭时,微信服务器会自动停止转发至客服,而将消息恢复发送至开发者填写的 url 上。 用户在等待队列中时,用户发送的消息仍然会被推送至开发者填写的 url 上。 这里特别要注意,只针对微信用户发来的消息才进行转发,而对于其他事件(比如用户从小程序唤起客服会话)都不应该转接,否则客服在客服系统上就会看到一些无意义的消息了。 消息转发到网页版客服工具 开发者只在响应包中返回 MsgType 为 transfer_customer_service 的消息,微信服务器收到响应后就会把当次发送的消息转发至客服系统。 <xml> <ToUserName><![CDATA[touser]]></ToUserName> <FromUserName><![CDATA[fromuser]]></FromUserName> <CreateTime>1399197672</CreateTime> <MsgType><![CDATA[transfer_customer_service]]></MsgType> </xml> 参数说明 参数 是否必须 描述 ToUserName 是 接收方帐号(收到的OpenID) FromUserName 是 开发者微信号 CreateTime 是 消息创建时间 (整型) MsgType 是 transfer_customer_service
发送客服消息 当用户和小程序客服产生特定动作的交互时(具体动作列表请见下方说明),微信将会把消息数据推送给开发者,开发者可以在一段时间内(目前修改为48小时)调用客服接口,通过POST一个JSON数据包来发送消息给普通用户。此接口主要用于客服等有人工消息处理环节的功能,方便开发者为用户提供更加优质的服务。 目前允许的动作列表如下,不同动作触发后,允许的客服接口下发消息条数和下发时限不同。下发条数达到上限后,会收到错误返回码,具体请见返回码说明页: 用户动作 允许下发条数限制 下发时限 用户通过客服消息按钮进入会话 1条 1分钟 用户发送信息 5条 48小时 客服接口-发消息 接口调用请求说明 http请求方式: POST https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=ACCESS_TOKEN 各消息类型所需的JSON数据包如下: 发送文本消息 { "touser":"OPENID", "msgtype":"text", "text": { "content":"Hello World" } } 发送图片消息 { "touser":"OPENID", "msgtype":"image", "image": { "media_id":"MEDIA_ID" } 发送图文链接 每次可以发送一个图文链接 { "touser": "OPENID", "msgtype": "link", "link": { "title": "Happy Day", "description": "Is Really A Happy Day", "url": "URL", "thumb_url": "THUMB_URL" } } 参数说明 参数 是否必须 说明 access_token 是 调用接口凭证 touser 是 普通用户(openid) msgtype 是 消息类型,文本为text,图文链接为link content 是 文本消息内容 media_id 是 发送的图片的媒体ID,通过新增素材接口上传图片文件获得。 title 是 图文链接消息标题 description 是 图文链接消息 url 是 图文链接消息被点击后跳转的链接 picurl 是 图文链接消息的图片链接,支持 JPG、PNG 格式,较好的效果为大图 640 X 320,小图 80 X 80 返回码说明 参数 说明 -1 系统繁忙,此时请开发者稍候再试 0 请求成功 40001 获取access_token时AppSecret错误,或者access_token无效。请开发者认真比对AppSecret的正确性,或查看是否正在为恰当的小程序调用接口 40002 不合法的凭证类型 40003 不合法的OpenID,请开发者确认OpenID否是其他小程序的OpenID 45015 回复时间超过限制 45047 客服接口下行条数超过上限 48001 api功能未授权,请确认小程序已获得该接口
基于微信的通知渠道,我们为开发者提供了可以高效触达用户的模板消息能力,以便实现服务的闭环并提供更佳的体验。 模板推送位置:服务通知 模板下发条件:用户本人在微信体系内与页面有交互行为后触发,详见下发条件说明 模板跳转能力:点击查看详情仅能跳转下发模板的该帐号的各个页面 使用说明 步骤一:获取模板ID 有两个方法可以获取模版ID 通过模版消息管理接口获取模版ID(详见模版消息管理) 在微信公众平台手动配置获取模版ID 登录https://mp.weixin.qq.com获取模板,如果没有合适的模板,可以申请添加新模板,审核通过后可使用,详见模板审核说明 步骤二:页面的 <form/> 组件,属性 report-submit 为 true 时,可以声明为需发模板消息,此时点击按钮提交表单可以获取 formId ,用于发送模板消息。或者当用户完成支付行为 ,可以获取 prepay_id 用于发送模板消息。 步骤三:调用接口下发模板消息(详见发送模板消息) 模版消息管理 1.获取小程序模板库标题列表 接口地址 https://api.weixin.qq.com/cgi-bin/wxopen/template/library/list?access_token=ACCESS_TOKEN HTTP请求方式: POST POST参数说明: 参数 必填 说明 access_token 是 接口调用凭证 offset 是 offset和count用于分页,表示从offset开始,拉取count条记录,offset从0开始,count最大为20。 count 是 offset和count用于分页,表示从offset开始,拉取count条记录,offset从0开始,count最大为20。 示例: { "offset":0, "count":5 } 返回码说明: 在调用模板消息接口后,会返回JSON数据包。 正常时的返回JSON数据包示例: { "errcode":0, "errmsg":"ok", "list":[ {"id":"AT0002","title":"购买成功通知"}, {"id":"AT0003","title":"购买失败通知"}, {"id":"AT0004","title":"交易提醒"}, {"id":"AT0005","title":"付款成功通知"}, {"id":"AT0006","title":"付款失败通知"} ], "total_count":599 } 返回参数说明: 参数 说明 id 模板标题id(获取模板标题下的关键词库时需要) title 模板标题内容 total_count 模板库标题总数 2.获取模板库某个模板标题下关键词库 接口地址 https://api.weixin.qq.com/cgi-bin/wxopen/template/library/get?access_token=ACCESS_TOKEN HTTP请求方式: POST POST参数说明: 参数 必填 说明 access_token 是 接口调用凭证 id 是 模板标题id,可通过接口获取,也可登录小程序后台查看获取 示例: { "id":"AT0002" } 返回码说明: 在调用模板消息接口后,会返回JSON数据包。 正常时的返回JSON数据包示例: { "errcode": 0, "errmsg": "ok", "id": "AT0002", "title": "购买成功通知", "keyword_list": [ { "keyword_id": 3, "name": "购买地点", "example": "TIT造舰厂" }, { "keyword_id": 4, "name": "购买时间", "example": "2016年6月6日" },...
wx.addCard(OBJECT) 基础库版本 1.1.0 开始支持,低版本需做兼容处理 批量添加卡券。 Object参数说明: 参数 类型 必填 说明 cardList ObjectArray 是 需要添加的卡券列表,列表内对象说明请参见请求对象说明 success Function 否 接口调用成功的回调函数 fail Function 否 接口调用失败的回调函数 complete Function 否 接口调用结束的回调函数(调用成功、失败都会执行) 请求对象说明 参数 类型 说明 cardId String 卡券 Id cardExt String 卡券的扩展参数 cardExt 说明 参数 类型 必填 是否参与签名 说明 code String 否 是 用户领取的 code,仅自定义 code 模式的卡券须填写,非自定义 code 模式卡券不可填写,详情 openid String 否 是 指定领取者的openid,只有该用户能领取。 bind_openid 字段为 true 的卡券必须填写,bind_openid 字段为 false 不可填写。 timestamp Number 是 是 时间戳,东八区时间,UTC+8,单位为秒 nonce_str String 否 是 随机字符串,由开发者设置传入,加强安全性(若不填写可能被重放请求)。随机字符串,不长于 32 位。推荐使用大小写字母和数字,不同添加请求的 nonce_str 须动态生成,若重复将会导致领取失败。 fixed_begintimestamp Number 否 否 卡券在第三方系统的实际领取时间,为东八区时间戳(UTC+8,精确到秒)。当卡券的有效期类为 DATE_TYPE_FIX_TERM 时专用,标识卡券的实际生效时间,用于解决商户系统内起始时间和领取微信卡券时间不同步的问题。 outer_str String 否 否 领取渠道参数,用于标识本次领取的渠道值。 signature String 是 – 签名,商户将接口列表中的参数按照指定方式进行签名,签名方式使用 SHA1,具体签名方案参见:卡券签名 注:cardExt 需进行 JSON 序列化为字符串传入 回调结果: 回调类型 errMsg 说明 success addCard:ok 添加卡券成功 fail addCard:fail cancel 用户取消添加卡券 fail addCard:fail (detail message) 添加卡券失败,其中 detail message...
wx.chooseAddress(OBJECT) 基础库版本 1.1.0 开始支持,低版本需做兼容处理 调起用户编辑收货地址原生界面,并在编辑完成后返回用户选择的地址。 OBJECT参数说明: 参数 类型 必填 返回 success Function 否 返回用户选择的收货地址信息 fail Function 否 接口调用失败的回调函数 complete Function 否 接口调用结束的回调函数(调用成功、失败都会执行) success返回参数说明: 参数 类型 说明 errMsg String 调用结果 userName String 收货人姓名 postalCode String 邮编 provinceName String 国标收货地址第一级地址 cityName String 国标收货地址第二级地址 countyName String 国标收货地址第三级地址 detailInfo String 详细收货地址信息 nationalCode String 收货地址国家码 telNumber String 收货人手机号码 示例代码: wx.chooseAddress({ success: function (res) { console.log(res.userName) console.log(res.postalCode) console.log(res.provinceName) console.log(res.cityName) console.log(res.countyName) console.log(res.detailInfo) console.log(res.nationalCode) console.log(res.telNumber) } }) Bug & Tip tip:wx.chooseAddress接口需要用户授权,请兼容用户拒绝授权的场景。
wx.openSetting(OBJECT) 基础库版本 1.1.0 开始支持,低版本需做兼容处理 调起客户端小程序设置界面,返回用户设置的操作结果 Object 参数说明: 参数 类型 必填 说明 success Function 否 接口调用成功的回调函数,返回内容详见返回参数说明。 fail Function 否 接口调用失败的回调函数 complete Function 否 接口调用结束的回调函数(调用成功、失败都会执行) success返回参数说明: 参数 类型 说明 authSetting Object 用户授权结果,其中 key 为 scope 值,value 为 Bool 值,表示用户是否允许授权,详见 scope 列表 示例代码: wx.openSetting({ success: (res) => { /* * res.authSetting = { * "scope.userInfo": true, * "scope.userLocation": true * } */ } }) OpenSettingButton wx.createOpenSettingButton(string type, string text, string image, Object style) 支持版本 >= 2.0.7 创建打开设置页面的按钮。 参数 string type 按钮的类型 type 的合法值: 值 说明 text 可以设置背景色和文本的按钮 image 只能设置背景贴图的按钮,背景贴图会直接拉伸到按钮的宽高 string text 按钮上的文本,仅当 type 为 text 时有效 string image 按钮的背景图片,仅当 type 为 image 时有效 Object style 按钮的样式 属性 类型 默认值 是否必填 说明 支持版本 left number 是 左上角横坐标 top number 是 左上角纵坐标 width number 是 宽度 height number 是...
wx.authorize(OBJECT) 基础库 1.2.0 开始支持,低版本需做兼容处理 部分接口需要获得同意后才能调用。此类接口调用时,如果用户未授权过,会弹窗询问用户,用户点击同意后方可调用接口。如果用户点了拒绝,则短期内调用不会出现弹窗,而是直接进入 fail 回调。用户可以在小程序设置界面中修改对该小程序的授权信息。本接口用于提前向用户发起授权,调用后会立刻弹窗询问用户是否同意小程序使用某项功能或获取用户的某些数据,但不会实际调用接口。如果用户之前已经同意,则不会出现弹窗,直接返回成功。 OBJECT参数说明: 参数名 类型 必填 说明 scope String 是 需要获取权限的scope,详见 scope 列表 success Function 否 接口调用成功的回调函数 fail Function 否 接口调用失败的回调函数 complete Function 否 接口调用结束的回调函数(调用成功、失败都会执行) success返回参数说明: 参数名 类型 说明 errMsg String 调用结果 示例代码: // 可以通过 wx.getSetting 先查询一下用户是否授权了 "scope.record" 这个 scope wx.getSetting({ success(res) { if (!res.authSetting['scope.record']) { wx.authorize({ scope: 'scope.record', success() { // 用户已经同意小程序使用录音功能,后续调用 wx.startRecord 接口不会弹窗询问 wx.startRecord() } }) } } }) scope 列表 scope 对应接口 描述 scope.userInfo wx.getUserInfo 用户信息 scope.userLocation wx.getLocation, wx.chooseLocation 地理位置 scope.address wx.chooseAddress 通讯地址 scope.record wx.startRecord 录音功能 scope.writePhotosAlbum wx.saveImageToPhotosAlbum, wx.saveVideoToPhotosAlbum 保存到相册
wx.requestPayment(OBJECT) 发起微信支付。 Object参数说明: 参数 类型 必填 说明 timeStamp String 是 时间戳从1970年1月1日00:00:00至今的秒数,即当前的时间 nonceStr String 是 随机字符串,长度为32个字符以下。 package String 是 统一下单接口返回的 prepay_id 参数值,提交格式如:prepay_id=* signType String 是 签名算法,暂支持 MD5 paySign String 是 签名,具体签名方案参见小程序支付接口文档; success Function 否 接口调用成功的回调函数 fail Function 否 接口调用失败的回调函数 complete Function 否 接口调用结束的回调函数(调用成功、失败都会执行) 了解更多信息,请查看微信支付接口文档 回调结果: 回调类型 errMsg 说明 success requestPayment:ok 调用支付成功 fail requestPayment:fail cancel 用户取消支付 fail requestPayment:fail (detail message) 调用支付失败,其中 detail message 为后台返回的详细失败原因 示例代码: wx.requestPayment({ "timeStamp": "", "nonceStr": "", "package": "", "signType": "MD5", "paySign": "", "success":function(res){ }, "fail":function(res){ } }) Bug & Tip bug: 6.5.2 及之前版本中,用户取消支付不会触发 fail 回调,只会触发 complete 回调,回调 errMsg 为 ‘requestPayment:cancel’