微信JS接口大全


Posted in Javascript onAugust 25, 2016

本文为大家分享了js微信接口详细版,供大家参考,具体内容如下

基本说明
使用说明
1.引入JS文件 
在需要调用JS接口的页面引入如下JS文件,(支持https):http://res.wx.qq.com/open/js/jweixin-1.0.0.js 
备注:支持使用 AMD/CMD 标准模块加载方法加载 
2.注入配置config接口 
所有需要使用JSSDK的页面必须先注入配置信息,否则将无法调用(同一个url仅需调用一次,对于变化url的SPA的web app可在每次url变化时进行调用)。

wx.config({
 debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
 appId: '', // 必填,公众号的唯一标识
 timestamp: , // 必填,生成签名的时间戳
 nonceStr: '', // 必填,生成签名的随机串
 signature: '',// 必填,签名,见附录1
 jsApiList: [] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
});

3.验证通过ready接口

wx.ready(function(){

 // config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。
});

4.验证失败error接口

wx.error(function(res){
// config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。
});

接口调用说明
所有接口通过wx对象(也可使用jWeixin对象)来调用,参数是一个对象,除了每个接口本身需要传的参数之外,还有以下通用参数:
1. success:接口调用成功时执行的回调函数。
2. fail:接口调用失败时执行的回调函数。
3. complete:接口调用完成时执行的回调函数,无论成功或失败都会执行。
4. cancel:用户点击取消时的回调函数,仅部分有用户取消操作的api才会用到。
5. trigger: 监听Menu中的按钮点击时触发的方法,该方法仅支持Menu中的相关接口。 

以上几个函数都带有一个参数,类型为对象,其中除了每个接口本身返回的数据之外,还有一个通用属性errMsg,其值格式如下:
1. 调用成功时:"xxx:ok" ,其中xxx为调用的接口名
2. 用户取消时:"xxx:cancel",其中xxx为调用的接口名
3. 调用失败时:其值为具体错误信息 

基础接口
判断当前客户端版本是否支持指定JS接口

wx.checkJsApi({
jsApiList: ['chooseImage'] // 需要检测的JS接口列表,所有JS接口列表见附录2,
success: function(res) {
// 以键值对的形式返回,可用的api值true,不可用为false
// 如:{"checkResult":{"chooseImage":true},"errMsg":"checkJsApi:ok"}

});

分享接口 
获取“分享到朋友圈”按钮点击状态及自定义分享内容接口

wx.onMenuShareTimeline({
 title: '', // 分享标题
 link: '', // 分享链接
imgUrl: '', // 分享图标
success: function () { 
// 用户确认分享后执行的回调函数
},
cancel: function () { 
// 用户取消分享后执行的回调函数
}
});

获取“分享给朋友”按钮点击状态及自定义分享内容接口

wx.onMenuShareAppMessage({
 title: '', // 分享标题
 desc: '', // 分享描述
 link: '', // 分享链接
 imgUrl: '', // 分享图标
 type: '', // 分享类型,music、video或link,不填默认为link
dataUrl: '', // 如果type是music或video,则要提供数据链接,默认为空
success: function () { 
// 用户确认分享后执行的回调函数
},
cancel: function () { 
// 用户取消分享后执行的回调函数
}
});

获取“分享到QQ”按钮点击状态及自定义分享内容接口

wx.onMenuShareQQ({
 title: '', // 分享标题
 desc: '', // 分享描述
 link: '', // 分享链接
 imgUrl: '' // 分享图标
success: function () { 
// 用户确认分享后执行的回调函数
},
cancel: function () { 
// 用户取消分享后执行的回调函数
}
});

获取“分享到腾讯微博”按钮点击状态及自定义分享内容接口

wx.onMenuShareWeibo({
 title: '', // 分享标题
 desc: '', // 分享描述
 link: '', // 分享链接
 imgUrl: '' // 分享图标
success: function () { 
// 用户确认分享后执行的回调函数
},
cancel: function () { 
// 用户取消分享后执行的回调函数
}
});

图像接口 
拍照或从手机相册中选图接口

wx.chooseImage({
 success: function (res) {
  var localIds = res.localIds; // 返回选定照片的本地ID列表,localId可以作为img标签的src属性显示图片
 }
});

预览图片接口

wx.previewImage({
 current: '', // 当前显示的图片链接
 urls: [] // 需要预览的图片链接列表
});

上传图片接口

wx.uploadImage({
localId: '', // 需要上传的图片的本地ID,由chooseImage接口获得
isShowProgressTips: 1// 默认为1,显示进度提示
 success: function (res) {
  var serverId = res.serverId; // 返回图片的服务器端ID
 }
});

备注:可用微信下载多媒体文件接口下载上传的图片,此处获得的 serverId 即 media_id,参考文档../12/58bfcfabbd501c7cd77c19bd9cfa8354.html 

下载图片接口

wx.downloadImage({
serverId: '', // 需要下载的图片的服务器端ID,由uploadImage接口获得
isShowProgressTips: 1// 默认为1,显示进度提示
 success: function (res) {
  var localId = res.localId; // 返回图片下载后的本地ID
 }
});

音频接口
开始录音接口
 wx.startRecord(); 
停止录音接口

wx.stopRecord({
 success: function (res) {
  var localId = res.localId;
 }
});

监听录音自动停止接口

wx.onVoiceRecordEnd({
 // 录音时间超过一分钟没有停止的时候会执行 complete 回调
complete: function (res) {
var localId = res.localId; 
}
});

播放语音接口

wx.playVoice({
 localId: '' // 需要播放的音频的本地ID,由stopRecord接口获得
});

暂停播放接口

wx.pauseVoice({
 localId: '' // 需要暂停的音频的本地ID,由stopRecord接口获得
});

停止播放接口

wx.stopVoice({
 localId: '' // 需要停止的音频的本地ID,由stopRecord接口获得
});

监听语音播放完毕接口

wx.onVoicePlayEnd({
 serverId: '', // 需要下载的音频的服务器端ID,由uploadVoice接口获得
 success: function (res) {
  var localId = res.localId; // 返回音频的本地ID
 }
});

上传语音接口

wx.uploadVoice({
localId: '', // 需要上传的音频的本地ID,由stopRecord接口获得
isShowProgressTips: 1// 默认为1,显示进度提示
 success: function (res) {
  var serverId = res.serverId; // 返回音频的服务器端ID
 }
});

备注:可用微信下载多媒体文件接口下载上传的语音,此处获得的 serverId 即 media_id,参考文档../12/58bfcfabbd501c7cd77c19bd9cfa8354.html
下载语音接口

wx.downloadVoice({
serverId: '', // 需要下载的音频的服务器端ID,由uploadVoice接口获得
isShowProgressTips: 1// 默认为1,显示进度提示
 success: function (res) {
  var localId = res.localId; // 返回音频的本地ID
 }
});

智能接口
识别音频并返回识别结果接口 

wx.translateVoice({
localId: '', // 需要识别的音频的本地Id,由录音相关接口获得
isShowProgressTips: 1, // 默认为1,显示进度提示
success: function (res) {
alert(res.translateResult); // 语音识别的结果
}
});

设备信息 
获取网络状态接口

wx.getNetworkType({
 success: function (res) {
  var networkType = res.networkType; // 返回网络类型2g,3g,4g,wifi
 }
});

地理位置 
使用微信内置地图查看位置接口

wx.openLocation({
 latitude: 0, // 纬度,浮点数,范围为90 ~ -90
 longitude: 0, // 经度,浮点数,范围为180 ~ -180。
 name: '', // 位置名
 address: '', // 地址详情说明
 scale: 1, // 地图缩放级别,整形值,范围从1~28。默认为最大
infoUrl: '' // 在查看位置界面底部显示的超链接,可点击跳转
});

获取地理位置接口

wx.getLocation({
 timestamp: 0, // 位置签名时间戳,仅当需要兼容6.0.2版本之前时提供
 nonceStr: '', // 位置签名随机串,仅当需要兼容6.0.2版本之前时提供
 addrSign: '', // 位置签名,仅当需要兼容6.0.2版本之前时提供,详见附录4
 success: function (res) {
  var longitude = res.longitude; // 纬度,浮点数,范围为90 ~ -90
  var latitude = res.latitude; // 经度,浮点数,范围为180 ~ -180。
  var speed = res.speed; // 速度,以米/每秒计
  var accuracy = res.accuracy; // 位置精度
 }
});

界面操作
 隐藏右上角菜单接口wx.hideOptionMenu();
 显示右上角菜单接口wx.showOptionMenu();
 关闭当前网页窗口接口wx.closeWindow();
 批量隐藏功能按钮接口

wx.hideMenuItems({
 menuList: [] // 要隐藏的菜单项,所有menu项见附录3
});

批量显示功能按钮接口

wx.showMenuItems({
 menuList: [] // 要显示的菜单项,所有menu项见附录3
});

隐藏所有非基础按钮接口 wx.hideAllNonBaseMenuItem();
显示所有功能按钮接口 wx.showAllNonBaseMenuItem();

微信扫一扫 
调起微信扫一扫接口

wx.scanQRCode({
desc: 'scanQRCode desc',
needResult: 0, // 默认为0,扫描结果由微信处理,1则直接返回扫描结果,
scanType: ["qrCode","barCode"], // 可以指定扫二维码还是一维码,默认二者都有
success: function () {
var result = res.resultStr; // 当needResult 为 1 时,扫码返回的结果
}
});

收获地址 
编辑收货地址接口

wx.editAddress(
 timestamp: 0, // 位置签名时间戳,仅当需要兼容6.0.2版本之前时提供
 nonceStr: '', // 位置签名随机串,仅当需要兼容6.0.2版本之前时提供
 addrSign: '', // 位置签名,仅当需要兼容6.0.2版本之前时提供,详见附录4
 success: function (res) {
  var userName = res.userName; // 收货人姓名
  var telNumber = res.telNumber; // 收货人电话
  var postalCode = res.postalCode; // 邮编
  var provinceName = res.provinceName; // 国标收货地址第一级地址
  var cityName = res.cityName; // 国标收货地址第二级地址
  var countryName = res.countryName; // 国标收货地址第三级地址
  var address = res.address; // 详细收货地址信息
  var nationalCode = res.nationalCode; // 收货地址国家码
 }
});

获取最近的收货地址接口

wx.getLatestAddress({
 timestamp: 0, // 位置签名时间戳,仅当需要兼容6.0.2版本之前时提供
 nonceStr: '', // 位置签名随机串,仅当需要兼容6.0.2版本之前时提供
 addrSign: '', // 位置签名,仅当需要兼容6.0.2版本之前时提供,详见附录4
 success: function (res) {
  var userName = res.userName; // 收货人姓名
  var telNumber = res.telNumber; // 收货人电话
  var postalCode = res.postalCode; // 邮编
  var provinceName = res.provinceName; // 国标收货地址第一级地址
  var cityName = res.cityName; // 国标收货地址第二级地址
  var countryName = res.countryName; // 国标收货地址第三级地址
  var address = res.address; // 详细收货地址信息
  var nationalCode = res.nationalCode; // 收货地址国家码
 }
});

微信小店
跳转微信商品页接口

wx.openProductSpecificView({
productId: '', // 商品id
viewType: '' // 0.默认值,普通商品详情页1.扫一扫商品详情页2.小店商品详情页
});

微信卡券 
调起适用于门店的卡券列表并获取用户选择列表

wx.chooseCard({
 shopId: '', // 门店Id
 cardType: '', // 卡券类型
 cardId: '', // 卡券Id
 timeStamp: 0, // 卡券签名时间戳
 nonceStr: '', // 卡券签名随机串
 cardSign: '', // 卡券签名,详见附录6
 success: function (res) {
  var cardList= res.cardList; // 用户选中的卡券列表信息
 }
});

 批量添加卡券接口

wx.addCard({
cardList: [{
cardId: '',
cardExt: ''
}], // 需要添加的卡券列表
 success: function (res) {
  var cardList = res.cardList; // 添加的卡券列表信息
 }
});

 查看微信卡包中的卡券接口

wx.openCard({
cardList: [{
cardId: '',
code: ''
}]// 需要打开的卡券列表
});

微信支付 
发起一个微信支付请求

wx.chooseWXPay({
timestamp: 0, // 支付签名时间戳
noncestr: '', // 支付签名随机串
package: '', // 订单详情扩展字符串,详见附录5
paySign: '', // 支付签名,详见附录5
});

附录1-JSSDK使用权限签名算法
 jsapi_ticket
生成签名之前必须先了解一下jsapi_ticket,jsapi_ticket是公众号用于调用微信JS接口的临时票据。正常情况下,jsapi_ticket的有效期为7200秒,通过access_token来获取。由于获取jsapi_ticket的api调用次数非常有限,频繁刷新jsapi_ticket会导致api调用受限,影响自身业务,开发者必须在自己的服务全局缓存jsapi_ticket 。
 1. 参考以下文档获取access_token(有效期7200秒,开发者必须在自己的服务全局缓存access_token):../12/4b08382e91217687730a2dfc71e9218c.html
2. 用第一步拿到的access_token 采用http GET方式请求获得jsapi_ticket(有效期7200秒,开发者必须在自己的服务全局缓存jsapi_ticket):https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=jsapi
成功返回如下JSON:

{
"errcode":0,
"errmsg":"ok",
"ticket":"bxLdikRXVbTPdHSM05e5u5sUoXNKd8-41ZO3MhKoyN5OfkWITDGgnr2fwJ0m9E8NYzWKVZvdVtaUgWvsdshFKA",
"expires_in":7200
}

获得jsapi_ticket之后,就可以生成JSSDK权限验证的签名了。

签名算法 
签名生成规则如下:参与签名的字段包括noncestr(随机字符串), 有效的jsapi_ticket, timestamp(时间戳), url(当前网页的URL,不包含#及其后面部分) 。对所有待签名参数按照字段名的ASCII 码从小到大排序(字典序)后,使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串string1。这里需要注意的是所有参数名均为小写字符。对string1作sha1加密,字段名和字段值都采用原始值,不进行URL 转义。 

即signature=sha1(string1)。 示例:
 • noncestr=Wm3WZYTPz0wzccnW
• jsapi_ticket=sM4AOVdWfPE4DxkXGEs8VMCPGGVi4C3VM0P37wVUCFvkVAy_90u5h9nbSlYy3-Sl-HhTdfl2fzFy1AOcHKP7qg
• timestamp=1414587457
• url=http://mp.weixin.qq.com 

步骤1. 对所有待签名参数按照字段名的ASCII 码从小到大排序(字典序)后,使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串string1:
 jsapi_ticket=sM4AOVdWfPE4DxkXGEs8VMCPGGVi4C3VM0P37wVUCFvkVAy_90u5h9nbSlYy3-Sl-HhTdfl2fzFy1AOcHKP7qg&noncestr=Wm3WZYTPz0wzccnW×tamp=1414587457&url=http://mp.weixin.qq.com 

步骤2. 对string1进行sha1签名,得到signature:
 f4d90daf4b3bca3078ab155816175ba34c443a7b 

注意事项
1. 签名用的noncestr和timestamp必须与wx.config中的nonceStr和timestamp相同。
2. 签名用的url必须是调用JS接口页面的完整URL。
3. 出于安全考虑,开发者必须在服务器端实现签名的逻辑。

附录2-所有JS接口列表
 • onMenuShareTimeline
• onMenuShareAppMessage
• onMenuShareQQ
• onMenuShareWeibo
• startRecord
• stopRecord
• onVoiceRecordEnd
• playVoice
• pauseVoice
• stopVoice
• onVoicePlayEnd
• uploadVoice
• downloadVoice
• chooseImage
• previewImage
• uploadImage
• downloadImage
• translateVoice
• getNetworkType
• openLocation
• getLocation
• hideOptionMenu
• showOptionMenu
• hideMenuItems
• showMenuItems
• hideAllNonBaseMenuItem
• showAllNonBaseMenuItem
• closeWindow
• scanQRCode
• chooseWXPay
• getLatestAddress
• editAddress
• openProductSpecificView
• addCard
• chooseCard
• openCard

附录3-所有按钮列表 
基本类
 • 举报: "menuItem:exposeArticle"
• 调整字体: "menuItem:setFont"
• 日间模式: "menuItem:dayMode"
• 夜间模式: "menuItem:nightMode"
• 刷新: "menuItem:refresh"
• 查看公众号(已添加): "menuItem:profile"
• 查看公众号(未添加): "menuItem:addContact" 
传播类
 • 发送给朋友: "menuItem:share:appMessage"
• 分享到朋友圈: "menuItem:share:timeline"
• 分享到QQ: "menuItem:share:qq"
• 分享到Weibo: "menuItem:share:weiboApp"
• 收藏: "menuItem:favorite"
• 分享到FB: "menuItem:share:facebook" 
保护类
 • 调试: "menuItem:jsDebug"
• 编辑标签: "menuItem:editTag"
• 删除: "menuItem:delete"
• 复制链接: "menuItem:copyUrl"
• 原网页: "menuItem:originPage"
• 阅读模式: "menuItem:readMode"
• 在QQ浏览器中打开: "menuItem:openWithQQBrowser"
• 在Safari中打开: "menuItem:openWithSafari"
• 邮件: "menuItem:share:email"
• 一些特殊公众号: "menuItem:share:brand"

附录4-位置与地址签名生成算法 
addrSign的生成规则与JSSDK权限验证的签名生成规则相同(参考附录1),只是参与签名参数有所不同。参与addrSign的签名参数有:appId、url(当前网页url)、timestamp、noncestr、accesstoken(用户授权凭证,请参照oauth2.0 协议获取)。

附录5-支付扩展字段及签名生成算法 
订单详情(package)扩展字符串定义 
在商户调起JS API 时,商户需要此时确定该笔订单详情,并将该订单详情通过一定的方式进行组合放入package。JS API 调用后,微信将通过package 的内容生成预支付单。下 面将定义package 的所需字段列表以及签名方法。 接口需要注意:所有传入参数都是字符串类型!

本文已被整理到了《JavaScript微信开发技巧汇总》,欢迎大家学习阅读。

为大家推荐现在关注度比较高的微信小程序教程一篇:《微信小程序开发教程》小编为大家精心整理的,希望喜欢。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Jquery Ajax学习实例6 向WebService发出请求,返回DataSet(XML) 异步调用
Mar 18 Javascript
JavaScript传递变量: 值传递?引用传递?
Feb 22 Javascript
滚动图片效果 jquery实现回旋滚动效果
Jan 08 Javascript
基于jquery的has()方法以及与find()方法以及filter()方法的区别详解
Apr 26 Javascript
jQuery实现拖动调整表格单元格大小的代码实例
Jan 13 Javascript
微信和qq时间格式模板实例详解
Oct 21 Javascript
JS中parseInt()和map()用法分析
Dec 16 Javascript
JavaScript调试的多个必备小Tips
Jan 15 Javascript
微信小程序  TLS 版本必须大于等于1.2问题解决
Feb 22 Javascript
JavaScript基本语法_动力节点Java学院整理
Jun 26 Javascript
JavaScript算法学习之冒泡排序和选择排序
Nov 02 Javascript
微信小程序开发摇一摇功能
Nov 22 Javascript
JS解决iframe之间通信和自适应高度的问题
Aug 24 #Javascript
浅析Javascript ES6新增值比较函数Object.is
Aug 24 #Javascript
js图片上传前预览功能(兼容所有浏览器)
Aug 24 #Javascript
聊一聊jQuery插件uploadify使用方法
Aug 24 #Javascript
前端程序员必须知道的高性能Javascript知识
Aug 24 #Javascript
关于JavaScript数组你所不知道的3件事
Aug 24 #Javascript
详解Javascript ES6中的箭头函数(Arrow Functions)
Aug 24 #Javascript
You might like
基于mysql的论坛(6)
2006/10/09 PHP
PHP编程开发怎么提高编程效率 提高PHP编程技术
2015/11/09 PHP
基于jQuery的日期选择控件
2009/10/27 Javascript
IE6 弹出Iframe层中的文本框“经常”无法获得输入焦点
2009/12/27 Javascript
js获取元素在浏览器中的绝对位置
2010/07/24 Javascript
基于jquery的使ListNav兼容中文首字拼音排序的实现代码
2011/07/10 Javascript
JS window对象的top、parent、opener含义介绍
2013/12/03 Javascript
中止javascript执行的方法
2014/02/14 Javascript
AngularJS语法详解(续)
2015/01/23 Javascript
Bootstrap入门书籍之(三)栅格系统
2016/02/17 Javascript
快速获取/设置iframe内对象元素的几种js实现方法
2016/05/20 Javascript
JS产生随机数的几个用法详解
2016/06/22 Javascript
JavaScript日期对象(Date)基本用法示例
2017/01/18 Javascript
jQuery使用DataTable实现删除数据后重新加载功能
2017/02/27 Javascript
vue+vuex+axio从后台获取数据存入vuex实现组件之间共享数据
2017/04/22 Javascript
vue.js评论发布信息可插入QQ表情功能
2017/08/08 Javascript
ES10 特性的完整指南小结
2019/03/04 Javascript
对layui中的onevent 和event的使用详解
2019/09/06 Javascript
JavaScript设计模式--简单工厂模式定义与应用案例详解
2020/05/23 Javascript
Vue实现鼠标经过文字显示悬浮框效果的示例代码
2020/10/14 Javascript
[03:33]TI9战队采访 - Infamous
2019/08/20 DOTA
Python contextlib模块使用示例
2015/02/18 Python
numpy实现合并多维矩阵、list的扩展方法
2018/05/08 Python
python与caffe改变通道顺序的方法
2018/08/04 Python
Python3.6.2调用ffmpeg的方法
2019/01/10 Python
python将视频转换为全字符视频
2019/04/26 Python
python 字典操作提取key,value的方法
2019/06/26 Python
Python 异常处理Ⅳ过程图解
2019/10/18 Python
使用HTML5 Canvas绘制直线或折线等线条的方法讲解
2016/03/14 HTML / CSS
使用HTML5的Notification API制作web通知的教程
2015/05/08 HTML / CSS
美国著名的家居用品购物网站:Bed Bath & Beyond
2018/01/05 全球购物
SIDESTEP荷兰:在线购买鞋子
2019/11/18 全球购物
室内设计专业自荐信
2014/05/31 职场文书
党员自我剖析材料(群众路线)
2014/10/06 职场文书
关于长城的导游词
2015/01/30 职场文书
element多个表单校验的实现
2021/05/27 Javascript