From 3f26c90482ea31503c1788b965630d4f1b771276 Mon Sep 17 00:00:00 2001 From: yanxi Date: Tue, 17 Oct 2023 22:27:17 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=20typescript=20=E5=AE=9A?= =?UTF-8?q?=E4=B9=89=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 24 ++- index.d.ts | 607 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 625 insertions(+), 6 deletions(-) create mode 100644 index.d.ts diff --git a/README.md b/README.md index 233a2ef..d2e957f 100644 --- a/README.md +++ b/README.md @@ -1,21 +1,33 @@ 微信官方 js-sdk ---- -说明: 仅将官方 js-sdk 发布到 npm,支持 CommonJS,便于 browserify, webpack 等直接使用 +说明: 仅将官方 js-sdk 发布到 npm,支持 CommonJS,便于 browserify, webpack 等直接使用。 + +从 1.6.1 版本开始支持 TypeScript js源码: https://res.wx.qq.com/open/js/jweixin-1.6.0.js 官方使用说明: https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115 安装: - - npm install weixin-js-sdk - +```shell +npm install weixin-js-sdk +``` + 使用: - - var wx = require('weixin-js-sdk'); +```javascript +// commonjs +var wx = require('weixin-js-sdk'); + +// es module +import wx from 'weixin-js-sdk' +``` ### Old versions * [1.0.0](https://github.com/yanxi-me/weixin-js-sdk/tree/1.0.0) * [1.2.0](https://github.com/yanxi-me/weixin-js-sdk/tree/1.2.0) + +### 感谢 + +TypeScript 定义文件来自 [wx-jssdk-ts](https://github.com/zhaoky/wx-jssdk-ts/blob/master/index.d.ts) diff --git a/index.d.ts b/index.d.ts new file mode 100644 index 0000000..a52afcc --- /dev/null +++ b/index.d.ts @@ -0,0 +1,607 @@ +// Type definitions for weixin jssdk 1.6.0 +// Project: https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115 +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped + +declare namespace wx { + type ImageSizeType = "original" | "compressed"; + type ImageSourceType = "album" | "camera"; + type VideoSourceType = "album" | "camera"; + type ApiMethod = + | "onMenuShareTimeline" + | "onMenuShareAppMessage" + | "onMenuShareQQ" + | "onMenuShareWeibo" + | "onMenuShareQZone" + | "updateAppMessageShareData" + | "updateTimelineShareData" + | "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" + | "openProductSpecificView" + | "addCard" + | "chooseCard" + | "openCard"; + // 所有JS接口列表 + type jsApiList = ApiMethod[]; + + // 开放标签列表 + // https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_Open_Tag.html + type openTag = "wx-open-launch-weapp" | "wx-open-launch-app" + type openTagList = openTag[]; + + // 所有菜单项列表 + // 基本类 + type menuBase = + | "menuItem:exposeArticle" // 举报 + | "menuItem:setFont" // 调整字体 + | "menuItem:dayMode" // 日间模式 + | "menuItem:nightMode" // 夜间模式 + | "menuItem:refresh" // 刷新 + | "menuItem:profile" // 查看公众号(已添加) + | "menuItem:addContact"; // 查看公众号(未添加) + // 传播类 + type menuShare = + | "menuItem:share:appMessage" // 发送给朋友 + | "menuItem:share:timeline" // 分享到朋友圈 + | "menuItem:share:qq" // 分享到QQ + | "menuItem:share:weiboApp" // 分享到Weibo + | "menuItem:favorite" // 收藏 + | "menuItem:share:facebook" // 分享到FB + | "menuItem:share:QZone"; // 分享到 QQ 空间 + + // 保护类 + type menuProtected = + | "menuItem:editTag" // 编辑标签 + | "menuItem:delete" // 删除 + | "menuItem:copyUrl" // 复制链接 + | "menuItem:originPage" // 原网页 + | "menuItem:readMode" // 阅读模式 + | "menuItem:openWithQQBrowser" // 在QQ浏览器中打开 + | "menuItem:openWithSafari" // 在Safari中打开 + | "menuItem:share:email" // 邮件 + | "menuItem:share:brand"; // 一些特殊公众号 + + type menuList = Array; + + function config(conf: { + debug?: boolean; // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 + appId: string; // 必填,公众号的唯一标识 + timestamp: number; // 必填,生成签名的时间戳 + nonceStr: string; // 必填,生成签名的随机串 + signature: string; // 必填,签名,见附录1 + jsApiList?: jsApiList; // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 + openTagList?: openTagList; + }): void; + + interface Resouce { + localId: string; + } + interface BaseParams { + success?(...args: any[]): void; + /** 接口调用失败的回调函数 */ + fail?(...args: any[]): void; + /** 接口取消调用的回调函数 */ + cancel?(...args: any[]): void; + /** 接口调用结束的回调函数(调用成功、失败都会执行) */ + complete?(...args: any[]): void; + } + function ready(fn: () => void): void; + function error(fn: (err: { errMsg: string }) => void): void; + + interface IcheckJsApi extends BaseParams { + jsApiList: jsApiList; // 需要检测的JS接口列表,所有JS接口列表见附录2, + // 以键值对的形式返回,可用的api值true,不可用为false + // 如:{"checkResult":{"chooseImage":true},"errMsg":"checkJsApi:ok"} + success(res: { + checkResult: { [api: string]: boolean }; + errMsg: string; + }): void; + } + /** + * 判断当前客户端版本是否支持指定JS接口 + * 备注:checkJsApi接口是客户端6.0.2新引入的一个预留接口,第一期开放的接口均可不使用checkJsApi来检测。 + */ + function checkJsApi(params: IcheckJsApi): void; + + interface IonMenuShareTimeline extends BaseParams { + title: string; // 分享标题 + link: string; // 分享链接 + imgUrl: string; // 分享图标 + // 用户确认分享后执行的回调函数 + success(): void; + // 用户取消分享后执行的回调函数 + cancel(): void; + } + /*=============================基础接口================================*/ + /** + * 获取“分享到朋友圈”按钮点击状态及自定义分享内容接口 + */ + function onMenuShareTimeline(params: IonMenuShareTimeline): void; + + interface IonMenuShareAppMessage extends BaseParams { + title: string; // 分享标题 + desc: string; // 分享描述 + link: string; // 分享链接 + imgUrl: string; // 分享图标 + type?: "music" | "video或link" | "link"; // 分享类型,music、video或link,不填默认为link + dataUrl?: string; // 如果type是music或video,则要提供数据链接,默认为空 + // 用户确认分享后执行的回调函数 + success(): void; + // 用户取消分享后执行的回调函数 + cancel(): void; + } + /** + * 获取“分享给朋友”按钮点击状态及自定义分享内容接口 + */ + function onMenuShareAppMessage(params: IonMenuShareAppMessage): void; + + interface IonMenuShareQQ extends BaseParams { + title: string; // 分享标题 + desc: string; // 分享描述 + link: string; // 分享链接 + imgUrl: string; // 分享图标 + // 用户确认分享后执行的回调函数 + success(): void; + // 用户取消分享后执行的回调函数 + cancel(): void; + } + /** + * 获取“分享到QQ”按钮点击状态及自定义分享内容接口 + */ + function onMenuShareQQ(params: IonMenuShareQQ): void; + + interface IonMenuShareWeibo extends BaseParams { + title: string; // 分享标题 + desc: string; // 分享描述 + link: string; // 分享链接 + imgUrl: string; // 分享图标 + // 用户确认分享后执行的回调函数 + success(): void; + // 用户取消分享后执行的回调函数 + cancel(): void; + } + /** + * 获取“分享到腾讯微博”按钮点击状态及自定义分享内容接口 + */ + function onMenuShareWeibo(params: IonMenuShareWeibo): void; + + interface IonMenuShareQZone extends BaseParams { + title: string; // 分享标题 + desc: string; // 分享描述 + link: string; // 分享链接 + imgUrl: string; // 分享图标 + // 用户确认分享后执行的回调函数 + success(): void; + // 用户取消分享后执行的回调函数 + cancel(): void; + } + /** + * 获取“分享到QQ空间”按钮点击状态及自定义分享内容接口 + */ + function onMenuShareQZone(params: IonMenuShareQZone): void; + + interface IupdateAppMessageShareData extends BaseParams { + title: string; // 分享标题 + desc: string; // 分享描述 + link: string; // 分享链接 + imgUrl: string; // 分享图标 + // 用户确认分享后执行的回调函数 + success(): void; + } + /** + * 获取“分享给朋友”及“分享到QQ”按钮点击状态及自定义分享内容接口(新) + */ + function updateAppMessageShareData(params: IupdateAppMessageShareData): void; + + interface IupdateTimelineShareData extends BaseParams { + title: string; // 分享标题 + link: string; // 分享链接 + imgUrl: string; // 分享图标 + // 用户确认分享后执行的回调函数 + success(): void; + } + /** + * 获取“分享到朋友圈”及“分享到QQ空间”按钮点击状态及自定义分享内容接口 + */ + function updateTimelineShareData(params: IupdateTimelineShareData): void; + /*=============================基础接口================================*/ + + /*=============================图像接口================================*/ + interface IchooseImage extends BaseParams { + /** 最多可以选择的图片张数,默认9 */ + count?: number; + /** original 原图,compressed 压缩图,默认二者都有 */ + sizeType?: ImageSizeType[]; + /** album 从相册选图,camera 使用相机,默认二者都有 */ + sourceType?: ImageSourceType[]; + /** 成功则返回图片的本地文件路径列表 tempFilePaths */ + success(res: { + sourceType: string; // weixin album camera + localIds: string[]; + errMsg: string; + }): void; + cancel(): void; + } + /** + * 从本地相册选择图片或使用相机拍照。 + */ + function chooseImage(params: IchooseImage): void; + + interface IpreviewImage extends BaseParams { + current: string; // 当前显示图片的http链接 + urls: string[]; // 需要预览的图片http链接列表 + } + /** + * 预览图片接口 + */ + function previewImage(params: IpreviewImage): void; + + interface IuploadImage extends BaseParams { + localId: string; // 需要上传的图片的本地ID,由chooseImage接口获得 + isShowProgressTips: number; // 默认为1,显示进度提示 + // 返回图片的服务器端ID + success(res: { serverId: string }): void; + } + /** + * 上传图片接口 + */ + function uploadImage(params: IuploadImage): void; + + interface IdownloadImage extends BaseParams { + serverId: string; // 需要下载的图片的服务器端ID,由uploadImage接口获得 + isShowProgressTips: number; // 默认为1,显示进度提示 + // 返回图片下载后的本地ID + success(res: Resouce): void; + } + /** + * 下载图片接口 + */ + function downloadImage(params: IdownloadImage): void; + + interface IgetLocalImgData extends BaseParams { + localId: string; // 图片的localID + // localData是图片的base64数据,可以用img标签显示 + success(res: { localData: string }): void; + } + + /** + * 获取本地图片接口 + */ + function getLocalImgData(params: IgetLocalImgData): void; + /*=============================图像接口================================*/ + /*=============================音频接口================================*/ + /** + * 开始录音接口 + */ + function startRecord(): void; + + interface IstopRecord extends BaseParams { + success(res: Resouce): void; + } + /** + * 停止录音接口 + */ + function stopRecord(params: IstopRecord): void; + + interface IonVoiceRecordEnd extends BaseParams { + // 录音时间超过一分钟没有停止的时候会执行 complete 回调 + complete(res: Resouce): void; + } + /** + * 监听录音自动停止接口 + */ + function onVoiceRecordEnd(params: IonVoiceRecordEnd): void; + + interface IplaypausestopVoice extends BaseParams { + localId: string; // 需要播放的音频的本地ID,由stopRecord接口获得 + } + /** + * 播放语音接口 + */ + function playVoice(params: IplaypausestopVoice): void; + + /** + * 暂停播放接口 + */ + function pauseVoice(params: IplaypausestopVoice): void; + /** + * 停止播放接口 + */ + function stopVoice(params: IplaypausestopVoice): void; + + interface IonVoicePlayEnd extends BaseParams { + success(res: Resouce): void; + } + /** + * 监听语音播放完毕接口 + */ + function onVoicePlayEnd(params: IonVoicePlayEnd): void; + + interface IupdownloadVoice extends BaseParams { + localId: string; // 需要上传的音频的本地ID,由stopRecord接口获得 + isShowProgressTips: number; // 默认为1,显示进度提示 + success(res: Resouce): void; + } + /** + * 上传语音接口 + * 备注:上传语音有效期3天,可用微信多媒体接口下载语音到自己的服务器 + * ,此处获得的 serverId 即 media_id,参考文档 + * ../12 / 58bfcfabbd501c7cd77c19bd9cfa8354.html + * 目前多媒体文件下载接口的频率限制为10000次/ 天, + * 如需要调高频率,请邮件weixin - open@qq.com, + * 邮件主题为【申请多媒体接口调用量】,请对你的项目进行简单描述, + * 附上产品体验链接,并对用户量和使用量进行说明。 + */ + function uploadVoice(params: IupdownloadVoice): void; + /** + * 下载语音接口 + */ + function downloadVoice(params: IupdownloadVoice): void; + /*=============================音频接口================================*/ + /*=============================智能接口================================*/ + + interface ItranslateVoice extends BaseParams { + localId: string; // 需要识别的音频的本地Id,由录音相关接口获得 + isShowProgressTips: number; // 默认为1,显示进度提示 + success(res: { translateResult: string }): void; + } + /** + * 识别音频并返回识别结果接口 + */ + function translateVoice(params: ItranslateVoice): void; + + /*=============================智能接口================================*/ + + /*=============================设备信息================================*/ + type networkType = "2g" | "3g" | "4g" | "wifi"; + interface IgetNetworkType extends BaseParams { + success(res: { networkType: networkType }): void; + } + /** + * 获取网络状态接口 + */ + function getNetworkType(params: IgetNetworkType): void; + /*=============================设备信息================================*/ + + /*=============================地理位置================================*/ + interface IopenLocation extends BaseParams { + latitude: number; // 纬度,浮点数,范围为90 ~ -90 + longitude: number; // 经度,浮点数,范围为180 ~ -180。 + name: string; // 位置名 + address: string; // 地址详情说明 + scale: number; // 地图缩放级别,整形值,范围从1~28。默认为最大 + infoUrl: string; // 在查看位置界面底部显示的超链接,可点击跳转 + } + /** + * 使用微信内置地图查看位置接口 + */ + function openLocation(params: IopenLocation): void; + + interface IgetLocation extends BaseParams { + type: "wgs84" | "gcj02"; // 默认为wgs84的gps坐标,如果要返回直接给openLocation用的火星坐标,可传入'gcj02' + success(res: { + latitude: number; // 纬度,浮点数,范围为90 ~ -90 + longitude: number; // 经度,浮点数,范围为180 ~ -180。 + speed: number; // 速度,以米/每秒计 + accuracy: number; // 位置精度 + }): void; + } + /** + * 获取地理位置接口 + */ + function getLocation(params: IgetLocation): void; + /*=============================地理位置================================*/ + /*=============================摇一摇周边================================*/ + interface IstartSearchBeacons extends BaseParams { + ticket: string; // 摇周边的业务ticket, 系统自动添加在摇出来的页面链接后面 + // 开启查找完成后的回调函数 + complete(argv: any): void; + } + /** + * 开启查找周边ibeacon设备接口 + * 备注:如需接入摇一摇周边功能,请参考:申请开通摇一摇周边 + */ + function startSearchBeacons(params: IstartSearchBeacons): void; + + interface IstopSearchBeacons extends BaseParams { + // 关闭查找完成后的回调函数 + complete(res: any): void; + } + + /** + * 关闭查找周边ibeacon设备接口 + */ + function stopSearchBeacons(params: IstopSearchBeacons): void; + + interface IonSearchBeacons extends BaseParams { + // 回调函数,可以数组形式取得该商家注册的在周边的相关设备列表 + complete(argv: any): void; + } + /** + * 监听周边ibeacon设备接口 + */ + function onSearchBeacons(params: IonSearchBeacons): void; + /*=============================摇一摇周边================================*/ + /*=============================界面操作================================*/ + + /** + * 隐藏右上角菜单接口 + */ + function hideOptionMenu(): void; + + /** + * 显示右上角菜单接口 + */ + function showOptionMenu(): void; + + /** + * 关闭当前网页窗口接口 + */ + function closeWindow(): void; + + interface IhideMenuItems extends BaseParams { + menuList: Array; // 要隐藏的菜单项,只能隐藏“传播类”和“保护类”按钮,所有menu项见附录3 + } + /** + * 批量隐藏功能按钮接口 + */ + function hideMenuItems(params: IhideMenuItems): void; + + interface IshowMenuItems extends BaseParams { + menuList: menuList; // 要显示的菜单项,所有menu项见附录3 + } + /** + * 批量显示功能按钮接口 + */ + function showMenuItems(params: IshowMenuItems): void; + + /** + * 隐藏所有非基础按钮接口 + * “基本类”按钮详见附录3 + */ + function hideAllNonBaseMenuItem(): void; + + /** + * 显示所有功能按钮接口 + */ + function showAllNonBaseMenuItem(): void; + /*=============================界面操作================================*/ + /*=============================微信扫一扫================================*/ + + type scanType = "qrCode" | "barCode"; + + interface IscanQRCode extends BaseParams { + needResult: 0 | 1; // 默认为0,扫描结果由微信处理,1则直接返回扫描结果, + scanType: scanType[]; // 可以指定扫二维码还是一维码,默认二者都有 + // 当needResult 为 1 时,扫码返回的结果 + success(res: { resultStr: string }): void; + } + /** + * 调起微信扫一扫接口 + */ + function scanQRCode(params: IscanQRCode): void; + /*=============================微信扫一扫================================*/ + /*=============================微信小店================================*/ + + interface IopenProductSpecificView extends BaseParams { + productId: string; // 商品id + viewType: "0" | "1" | "2"; // 0.默认值,普通商品详情页1.扫一扫商品详情页2.小店商品详情页 + } + /** + * 跳转微信商品页接口 + */ + function openProductSpecificView(params: IopenProductSpecificView): void; + /*=============================微信卡券================================*/ + + interface IchooseCard extends BaseParams { + shopId: string; // 门店Id + cardType: string; // 卡券类型 + cardId: string; // 卡券Id + timestamp: number; // 卡券签名时间戳 + nonceStr: string; // 卡券签名随机串 + signType: string; // 签名方式,默认'SHA1' + cardSign: string; // 卡券签名 + success(res: { cardList: string[] }): void; + } + /** + * 拉取适用卡券列表并获取用户选择信息 + */ + function chooseCard(params: IchooseCard): void; + + interface IaddCard extends BaseParams { + cardList: Array<{ + cardId: string; + cardExt: string; + }>; // 需要添加的卡券列表 + success(res: { cardList: string[] }): void; + } + /** + * 批量添加卡券接口 + */ + function addCard(): void; + + interface IopenCard extends BaseParams { + cardList: Array<{ + cardId: string; + code: string; + }>; // 需要打开的卡券列表 + } + /** + * 查看微信卡包中的卡券接口 + */ + function openCard(params: IopenCard): void; + + interface IconsumeAndShareCard extends BaseParams { + cardId: string; + code: string; + } + /** + * 核销后再次赠送卡券接口 + */ + function consumeAndShareCard(params: IconsumeAndShareCard): void; + /*=============================微信卡券================================*/ + /*=============================微信支付================================*/ + + interface IchooseWXPay extends BaseParams { + timestamp: number; // 支付签名时间戳,注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符 + nonceStr: string; // 支付签名随机串,不长于 32 位 + package: string; // 统一支付接口返回的prepay_id参数值,提交格式如:prepay_id=***) + signType: string; // 签名方式,默认为'SHA1',使用新版支付需传入'MD5' + paySign: string; // 支付签名 + // 支付成功后的回调函数 + success(res: any): void; + } + /** + * 发起一个微信支付请求 + */ + function chooseWXPay(params: IchooseWXPay): void; + /*=============================微信支付================================*/ + /*=============================微信小程序==============================*/ + interface miniProgramMethodsParams extends BaseParams { + url: string; + } + interface miniProgramMethods { + navigateTo(params: miniProgramMethodsParams): void; + navigateBack(params: miniProgramMethodsParams): void; + switchTab(params: miniProgramMethodsParams): void; + reLaunch(params: miniProgramMethodsParams): void; + redirectTo(params: miniProgramMethodsParams): void; + postMessage(params: { data: any }): void; + getEnv(fn: (res: any) => void): void; + } + const miniProgram: miniProgramMethods; + /*=============================微信小程序==============================*/ +} +declare function wx(): void; +/*=============================微信内全局变量==============================*/ +declare global { + interface Window { + WeixinJSBridge: any; + __wxjs_environment: any; + } + const WeixinJSBridge: any; +} +export default wx;