微信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 相关文章推荐
ECMAScript 基础知识
Jun 29 Javascript
jQuery UI AutoComplete 自动完成使用小记
Aug 21 Javascript
JS维吉尼亚密码算法实现代码
Nov 09 Javascript
Function.prototype.bind用法示例
Sep 16 Javascript
js控制分页打印、打印分页示例
Feb 08 Javascript
javascript的日期对象、数组对象、二维数组使用说明
Dec 22 Javascript
javascript中利用柯里化函数实现bind方法【推荐】
Apr 29 Javascript
JS表单验证方法实例小结【电话、身份证号、Email、中文、特殊字符、身份证号等】
Feb 14 Javascript
jQuery选取所有复选框被选中的值并用Ajax异步提交数据的实例
Aug 04 jQuery
Angular实现类似博客评论的递归显示及获取回复评论的数据
Nov 06 Javascript
解决Vue使用mint-ui loadmore实现上拉加载与下拉刷新出现一个页面使用多个上拉加载后冲突问题
Nov 07 Javascript
解决layui弹出层layer的area过大被遮挡的问题
Sep 21 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
php使用post数组的键值创建同名变量并赋值的方法
2015/04/03 PHP
php实现简单的MVC框架实例
2015/09/23 PHP
php防止网站被攻击的应急代码
2015/10/21 PHP
xtree.js 代码
2007/03/13 Javascript
js每次Title显示不同的名言
2008/09/25 Javascript
jquery tools 系列 scrollable学习
2009/09/06 Javascript
JQuery以JSON方式提交数据到服务端示例代码
2014/05/05 Javascript
JS点击链接后慢慢展开隐藏着图片的方法
2015/02/17 Javascript
JavaScript脚本库编写的方法
2015/12/09 Javascript
使用vue.js开发时一些注意事项
2016/04/27 Javascript
快速使用Bootstrap搭建传送带
2016/05/06 Javascript
微信小程序实现图片上传功能实例(前端+PHP后端)
2018/01/10 Javascript
解决betterScroll在vue中存在图片时,出现拉不动的问题
2018/09/27 Javascript
实例讲解vue源码架构
2019/01/24 Javascript
详解vue-cli+element-ui树形表格(多级表格折腾小计)
2019/04/17 Javascript
vue-cli webpack配置文件分析
2019/05/20 Javascript
监控Nodejs的性能实例代码
2019/07/02 NodeJs
weui上传多图片,压缩,base64编码的示例代码
2020/06/22 Javascript
Vue-resource安装过程及使用方法解析
2020/07/21 Javascript
[04:02]DOTA2上海特锦赛小组赛第二日recap精彩回顾
2016/02/28 DOTA
python简单操作excle的方法
2018/09/12 Python
python pcm音频添加头转成Wav格式文件的方法
2019/01/09 Python
Python中类的创建和实例化操作示例
2019/02/27 Python
Pytorch DataLoader 变长数据处理方式
2020/01/08 Python
基于tensorflow指定GPU运行及GPU资源分配的几种方式小结
2020/02/03 Python
详解Html5微信支付爬坑之路
2018/07/24 HTML / CSS
英国女装网上商店:I Saw It First
2018/10/18 全球购物
eBay美国官网:eBay.com
2020/10/24 全球购物
专科毕业生学习生活的自我评价
2013/10/26 职场文书
应届生英语教师求职信
2013/11/05 职场文书
家长评语大全
2014/01/22 职场文书
2014年庆祝国庆65周年演讲稿
2014/09/21 职场文书
暑假社会实践证明格式
2014/10/28 职场文书
2014公司年终工作总结
2014/12/19 职场文书
初中班级口号霸气押韵
2015/12/24 职场文书
《从现在开始》教学反思
2016/02/16 职场文书