├── .gitignore ├── .npmignore ├── LICENSE ├── README.md ├── index.d.ts ├── index.js ├── index.original.js └── package.json /.gitignore: -------------------------------------------------------------------------------- 1 | .idea 2 | .vscode -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | index.original.js 2 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 Yanxi 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 微信官方 js-sdk 2 | ---- 3 | 4 | 说明: 仅将官方 js-sdk 发布到 npm,支持 CommonJS,便于 browserify, webpack 等直接使用,支持 TypeScript。 5 | 6 | 7 | 官方 JS 源码: https://res.wx.qq.com/open/js/jweixin-1.6.0.js 8 | 9 | 官方使用说明: https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html 10 | 11 | 安装: 12 | ```shell 13 | npm install weixin-js-sdk 14 | ``` 15 | 16 | 使用: 17 | ```javascript 18 | // commonjs 19 | var wx = require('weixin-js-sdk'); 20 | 21 | // es module 22 | import wx from 'weixin-js-sdk' 23 | ``` 24 | 25 | ### Old versions 26 | 27 | * [1.0.0](https://github.com/yanxi123-com/weixin-js-sdk/tree/1.0.0) 28 | * [1.2.0](https://github.com/yanxi123-com/weixin-js-sdk/tree/1.2.0) 29 | 30 | ### 个人主页 31 | 32 | * [https://yanxi123.com/](https://yanxi123.com/) 33 | 34 | ### 感谢 35 | 36 | TypeScript 定义文件来自 [wx-jssdk-ts](https://github.com/zhaoky/wx-jssdk-ts/blob/master/index.d.ts) 37 | -------------------------------------------------------------------------------- /index.d.ts: -------------------------------------------------------------------------------- 1 | // Type definitions for weixin jssdk 1.6.0 2 | // Project: https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115 3 | // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped 4 | 5 | declare namespace wx { 6 | type ImageSizeType = "original" | "compressed"; 7 | type ImageSourceType = "album" | "camera"; 8 | type VideoSourceType = "album" | "camera"; 9 | type ApiMethod = 10 | | "onMenuShareTimeline" 11 | | "onMenuShareAppMessage" 12 | | "onMenuShareQQ" 13 | | "onMenuShareWeibo" 14 | | "onMenuShareQZone" 15 | | "updateAppMessageShareData" 16 | | "updateTimelineShareData" 17 | | "startRecord" 18 | | "stopRecord" 19 | | "onVoiceRecordEnd" 20 | | "playVoice" 21 | | "pauseVoice" 22 | | "stopVoice" 23 | | "onVoicePlayEnd" 24 | | "uploadVoice" 25 | | "downloadVoice" 26 | | "chooseImage" 27 | | "previewImage" 28 | | "uploadImage" 29 | | "downloadImage" 30 | | "translateVoice" 31 | | "getNetworkType" 32 | | "openLocation" 33 | | "getLocation" 34 | | "hideOptionMenu" 35 | | "showOptionMenu" 36 | | "hideMenuItems" 37 | | "showMenuItems" 38 | | "hideAllNonBaseMenuItem" 39 | | "showAllNonBaseMenuItem" 40 | | "closeWindow" 41 | | "scanQRCode" 42 | | "chooseWXPay" 43 | | "openProductSpecificView" 44 | | "addCard" 45 | | "chooseCard" 46 | | "openCard"; 47 | // 所有JS接口列表 48 | type jsApiList = ApiMethod[]; 49 | 50 | // 开放标签列表 51 | // https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_Open_Tag.html 52 | type openTag = "wx-open-launch-weapp" | "wx-open-launch-app" | "wx-open-subscribe" | "wx-open-audio" 53 | type openTagList = openTag[]; 54 | 55 | // 所有菜单项列表 56 | // 基本类 57 | type menuBase = 58 | | "menuItem:exposeArticle" // 举报 59 | | "menuItem:setFont" // 调整字体 60 | | "menuItem:dayMode" // 日间模式 61 | | "menuItem:nightMode" // 夜间模式 62 | | "menuItem:refresh" // 刷新 63 | | "menuItem:profile" // 查看公众号(已添加) 64 | | "menuItem:addContact"; // 查看公众号(未添加) 65 | // 传播类 66 | type menuShare = 67 | | "menuItem:share:appMessage" // 发送给朋友 68 | | "menuItem:share:timeline" // 分享到朋友圈 69 | | "menuItem:share:qq" // 分享到QQ 70 | | "menuItem:share:weiboApp" // 分享到Weibo 71 | | "menuItem:favorite" // 收藏 72 | | "menuItem:share:facebook" // 分享到FB 73 | | "menuItem:share:QZone"; // 分享到 QQ 空间 74 | 75 | // 保护类 76 | type menuProtected = 77 | | "menuItem:editTag" // 编辑标签 78 | | "menuItem:delete" // 删除 79 | | "menuItem:copyUrl" // 复制链接 80 | | "menuItem:originPage" // 原网页 81 | | "menuItem:readMode" // 阅读模式 82 | | "menuItem:openWithQQBrowser" // 在QQ浏览器中打开 83 | | "menuItem:openWithSafari" // 在Safari中打开 84 | | "menuItem:share:email" // 邮件 85 | | "menuItem:share:brand"; // 一些特殊公众号 86 | 87 | type menuList = Array; 88 | 89 | function config(conf: { 90 | debug?: boolean; // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 91 | appId: string; // 必填,公众号的唯一标识 92 | timestamp: number; // 必填,生成签名的时间戳 93 | nonceStr: string; // 必填,生成签名的随机串 94 | signature: string; // 必填,签名,见附录1 95 | jsApiList?: jsApiList; // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 96 | openTagList?: openTagList; 97 | }): void; 98 | 99 | interface Resouce { 100 | localId: string; 101 | } 102 | interface BaseParams { 103 | success?(...args: any[]): void; 104 | /** 接口调用失败的回调函数 */ 105 | fail?(...args: any[]): void; 106 | /** 接口取消调用的回调函数 */ 107 | cancel?(...args: any[]): void; 108 | /** 接口调用结束的回调函数(调用成功、失败都会执行) */ 109 | complete?(...args: any[]): void; 110 | } 111 | function ready(fn: () => void): void; 112 | function error(fn: (err: { errMsg: string }) => void): void; 113 | 114 | interface IcheckJsApi extends BaseParams { 115 | jsApiList: jsApiList; // 需要检测的JS接口列表,所有JS接口列表见附录2, 116 | // 以键值对的形式返回,可用的api值true,不可用为false 117 | // 如:{"checkResult":{"chooseImage":true},"errMsg":"checkJsApi:ok"} 118 | success(res: { 119 | checkResult: { [api: string]: boolean }; 120 | errMsg: string; 121 | }): void; 122 | } 123 | /** 124 | * 判断当前客户端版本是否支持指定JS接口 125 | * 备注:checkJsApi接口是客户端6.0.2新引入的一个预留接口,第一期开放的接口均可不使用checkJsApi来检测。 126 | */ 127 | function checkJsApi(params: IcheckJsApi): void; 128 | 129 | interface IonMenuShareTimeline extends BaseParams { 130 | title: string; // 分享标题 131 | link: string; // 分享链接 132 | imgUrl: string; // 分享图标 133 | // 用户确认分享后执行的回调函数 134 | success(): void; 135 | // 用户取消分享后执行的回调函数 136 | cancel(): void; 137 | } 138 | /*=============================基础接口================================*/ 139 | /** 140 | * 获取“分享到朋友圈”按钮点击状态及自定义分享内容接口 141 | */ 142 | function onMenuShareTimeline(params: IonMenuShareTimeline): void; 143 | 144 | interface IonMenuShareAppMessage extends BaseParams { 145 | title: string; // 分享标题 146 | desc: string; // 分享描述 147 | link: string; // 分享链接 148 | imgUrl: string; // 分享图标 149 | type?: "music" | "video或link" | "link"; // 分享类型,music、video或link,不填默认为link 150 | dataUrl?: string; // 如果type是music或video,则要提供数据链接,默认为空 151 | // 用户确认分享后执行的回调函数 152 | success(): void; 153 | // 用户取消分享后执行的回调函数 154 | cancel(): void; 155 | } 156 | /** 157 | * 获取“分享给朋友”按钮点击状态及自定义分享内容接口 158 | */ 159 | function onMenuShareAppMessage(params: IonMenuShareAppMessage): void; 160 | 161 | interface IonMenuShareQQ extends BaseParams { 162 | title: string; // 分享标题 163 | desc: string; // 分享描述 164 | link: string; // 分享链接 165 | imgUrl: string; // 分享图标 166 | // 用户确认分享后执行的回调函数 167 | success(): void; 168 | // 用户取消分享后执行的回调函数 169 | cancel(): void; 170 | } 171 | /** 172 | * 获取“分享到QQ”按钮点击状态及自定义分享内容接口 173 | */ 174 | function onMenuShareQQ(params: IonMenuShareQQ): void; 175 | 176 | interface IonMenuShareWeibo extends BaseParams { 177 | title: string; // 分享标题 178 | desc: string; // 分享描述 179 | link: string; // 分享链接 180 | imgUrl: string; // 分享图标 181 | // 用户确认分享后执行的回调函数 182 | success(): void; 183 | // 用户取消分享后执行的回调函数 184 | cancel(): void; 185 | } 186 | /** 187 | * 获取“分享到腾讯微博”按钮点击状态及自定义分享内容接口 188 | */ 189 | function onMenuShareWeibo(params: IonMenuShareWeibo): void; 190 | 191 | interface IonMenuShareQZone extends BaseParams { 192 | title: string; // 分享标题 193 | desc: string; // 分享描述 194 | link: string; // 分享链接 195 | imgUrl: string; // 分享图标 196 | // 用户确认分享后执行的回调函数 197 | success(): void; 198 | // 用户取消分享后执行的回调函数 199 | cancel(): void; 200 | } 201 | /** 202 | * 获取“分享到QQ空间”按钮点击状态及自定义分享内容接口 203 | */ 204 | function onMenuShareQZone(params: IonMenuShareQZone): void; 205 | 206 | interface IupdateAppMessageShareData extends BaseParams { 207 | title: string; // 分享标题 208 | desc: string; // 分享描述 209 | link: string; // 分享链接 210 | imgUrl: string; // 分享图标 211 | // 用户确认分享后执行的回调函数 212 | success(): void; 213 | } 214 | /** 215 | * 获取“分享给朋友”及“分享到QQ”按钮点击状态及自定义分享内容接口(新) 216 | */ 217 | function updateAppMessageShareData(params: IupdateAppMessageShareData): void; 218 | 219 | interface IupdateTimelineShareData extends BaseParams { 220 | title: string; // 分享标题 221 | link: string; // 分享链接 222 | imgUrl: string; // 分享图标 223 | // 用户确认分享后执行的回调函数 224 | success(): void; 225 | } 226 | /** 227 | * 获取“分享到朋友圈”及“分享到QQ空间”按钮点击状态及自定义分享内容接口 228 | */ 229 | function updateTimelineShareData(params: IupdateTimelineShareData): void; 230 | /*=============================基础接口================================*/ 231 | 232 | /*=============================图像接口================================*/ 233 | interface IchooseImage extends BaseParams { 234 | /** 最多可以选择的图片张数,默认9 */ 235 | count?: number; 236 | /** original 原图,compressed 压缩图,默认二者都有 */ 237 | sizeType?: ImageSizeType[]; 238 | /** album 从相册选图,camera 使用相机,默认二者都有 */ 239 | sourceType?: ImageSourceType[]; 240 | /** 成功则返回图片的本地文件路径列表 tempFilePaths */ 241 | success(res: { 242 | sourceType: string; // weixin album camera 243 | localIds: string[]; 244 | errMsg: string; 245 | }): void; 246 | cancel(): void; 247 | } 248 | /** 249 | * 从本地相册选择图片或使用相机拍照。 250 | */ 251 | function chooseImage(params: IchooseImage): void; 252 | 253 | interface IpreviewImage extends BaseParams { 254 | current: string; // 当前显示图片的http链接 255 | urls: string[]; // 需要预览的图片http链接列表 256 | } 257 | /** 258 | * 预览图片接口 259 | */ 260 | function previewImage(params: IpreviewImage): void; 261 | 262 | interface IuploadResource extends BaseParams { 263 | localId: string; // 需要上传的图片的本地ID,由chooseImage接口获得 264 | isShowProgressTips: number; // 默认为1,显示进度提示 265 | // 返回图片的服务器端ID 266 | success(res: { serverId: string }): void; 267 | } 268 | /** 269 | * 上传图片接口 270 | */ 271 | function uploadImage(params: IuploadResource): void; 272 | 273 | interface IdownloadResource extends BaseParams { 274 | serverId: string; // 需要下载的图片的服务器端ID,由uploadImage接口获得 275 | isShowProgressTips: number; // 默认为1,显示进度提示 276 | // 返回图片下载后的本地ID 277 | success(res: Resouce): void; 278 | } 279 | /** 280 | * 下载图片接口 281 | */ 282 | function downloadImage(params: IdownloadResource): void; 283 | 284 | interface IgetLocalImgData extends BaseParams { 285 | localId: string; // 图片的localID 286 | // localData是图片的base64数据,可以用img标签显示 287 | success(res: { localData: string }): void; 288 | } 289 | 290 | /** 291 | * 获取本地图片接口 292 | */ 293 | function getLocalImgData(params: IgetLocalImgData): void; 294 | /*=============================图像接口================================*/ 295 | /*=============================音频接口================================*/ 296 | /** 297 | * 开始录音接口 298 | */ 299 | function startRecord(): void; 300 | 301 | interface IstopRecord extends BaseParams { 302 | success(res: Resouce): void; 303 | } 304 | /** 305 | * 停止录音接口 306 | */ 307 | function stopRecord(params: IstopRecord): void; 308 | 309 | interface IonVoiceRecordEnd extends BaseParams { 310 | // 录音时间超过一分钟没有停止的时候会执行 complete 回调 311 | complete(res: Resouce): void; 312 | } 313 | /** 314 | * 监听录音自动停止接口 315 | */ 316 | function onVoiceRecordEnd(params: IonVoiceRecordEnd): void; 317 | 318 | interface IplaypausestopVoice extends BaseParams { 319 | localId: string; // 需要播放的音频的本地ID,由stopRecord接口获得 320 | } 321 | /** 322 | * 播放语音接口 323 | */ 324 | function playVoice(params: IplaypausestopVoice): void; 325 | 326 | /** 327 | * 暂停播放接口 328 | */ 329 | function pauseVoice(params: IplaypausestopVoice): void; 330 | /** 331 | * 停止播放接口 332 | */ 333 | function stopVoice(params: IplaypausestopVoice): void; 334 | 335 | interface IonVoicePlayEnd extends BaseParams { 336 | success(res: Resouce): void; 337 | } 338 | /** 339 | * 监听语音播放完毕接口 340 | */ 341 | function onVoicePlayEnd(params: IonVoicePlayEnd): void; 342 | /** 343 | * 上传语音接口 344 | * 备注:上传语音有效期3天,可用微信多媒体接口下载语音到自己的服务器 345 | * ,此处获得的 serverId 即 media_id,参考文档 346 | * ../12 / 58bfcfabbd501c7cd77c19bd9cfa8354.html 347 | * 目前多媒体文件下载接口的频率限制为10000次/ 天, 348 | * 如需要调高频率,请邮件weixin - open@qq.com, 349 | * 邮件主题为【申请多媒体接口调用量】,请对你的项目进行简单描述, 350 | * 附上产品体验链接,并对用户量和使用量进行说明。 351 | */ 352 | function uploadVoice(params: IuploadResource): void; 353 | /** 354 | * 下载语音接口 355 | */ 356 | function downloadVoice(params: IdownloadResource): void; 357 | /*=============================音频接口================================*/ 358 | /*=============================智能接口================================*/ 359 | 360 | interface ItranslateVoice extends BaseParams { 361 | localId: string; // 需要识别的音频的本地Id,由录音相关接口获得 362 | isShowProgressTips: number; // 默认为1,显示进度提示 363 | success(res: { translateResult: string }): void; 364 | } 365 | /** 366 | * 识别音频并返回识别结果接口 367 | */ 368 | function translateVoice(params: ItranslateVoice): void; 369 | 370 | /*=============================智能接口================================*/ 371 | 372 | /*=============================设备信息================================*/ 373 | type networkType = "2g" | "3g" | "4g" | "wifi"; 374 | interface IgetNetworkType extends BaseParams { 375 | success(res: { networkType: networkType }): void; 376 | } 377 | /** 378 | * 获取网络状态接口 379 | */ 380 | function getNetworkType(params: IgetNetworkType): void; 381 | /*=============================设备信息================================*/ 382 | 383 | /*=============================地理位置================================*/ 384 | interface IopenLocation extends BaseParams { 385 | latitude: number; // 纬度,浮点数,范围为90 ~ -90 386 | longitude: number; // 经度,浮点数,范围为180 ~ -180。 387 | name: string; // 位置名 388 | address: string; // 地址详情说明 389 | scale: number; // 地图缩放级别,整形值,范围从1~28。默认为最大 390 | infoUrl: string; // 在查看位置界面底部显示的超链接,可点击跳转 391 | } 392 | /** 393 | * 使用微信内置地图查看位置接口 394 | */ 395 | function openLocation(params: IopenLocation): void; 396 | 397 | interface IgetLocation extends BaseParams { 398 | type: "wgs84" | "gcj02"; // 默认为wgs84的gps坐标,如果要返回直接给openLocation用的火星坐标,可传入'gcj02' 399 | success(res: { 400 | latitude: number; // 纬度,浮点数,范围为90 ~ -90 401 | longitude: number; // 经度,浮点数,范围为180 ~ -180。 402 | speed: number; // 速度,以米/每秒计 403 | accuracy: number; // 位置精度 404 | }): void; 405 | } 406 | /** 407 | * 获取地理位置接口 408 | */ 409 | function getLocation(params: IgetLocation): void; 410 | /*=============================地理位置================================*/ 411 | /*=============================摇一摇周边================================*/ 412 | interface IstartSearchBeacons extends BaseParams { 413 | ticket: string; // 摇周边的业务ticket, 系统自动添加在摇出来的页面链接后面 414 | // 开启查找完成后的回调函数 415 | complete(argv: any): void; 416 | } 417 | /** 418 | * 开启查找周边ibeacon设备接口 419 | * 备注:如需接入摇一摇周边功能,请参考:申请开通摇一摇周边 420 | */ 421 | function startSearchBeacons(params: IstartSearchBeacons): void; 422 | 423 | interface IstopSearchBeacons extends BaseParams { 424 | // 关闭查找完成后的回调函数 425 | complete(res: any): void; 426 | } 427 | 428 | /** 429 | * 关闭查找周边ibeacon设备接口 430 | */ 431 | function stopSearchBeacons(params: IstopSearchBeacons): void; 432 | 433 | interface IonSearchBeacons extends BaseParams { 434 | // 回调函数,可以数组形式取得该商家注册的在周边的相关设备列表 435 | complete(argv: any): void; 436 | } 437 | /** 438 | * 监听周边ibeacon设备接口 439 | */ 440 | function onSearchBeacons(params: IonSearchBeacons): void; 441 | /*=============================摇一摇周边================================*/ 442 | /*=============================界面操作================================*/ 443 | 444 | /** 445 | * 隐藏右上角菜单接口 446 | */ 447 | function hideOptionMenu(): void; 448 | 449 | /** 450 | * 显示右上角菜单接口 451 | */ 452 | function showOptionMenu(): void; 453 | 454 | /** 455 | * 关闭当前网页窗口接口 456 | */ 457 | function closeWindow(): void; 458 | 459 | interface IhideMenuItems extends BaseParams { 460 | menuList: Array; // 要隐藏的菜单项,只能隐藏“传播类”和“保护类”按钮,所有menu项见附录3 461 | } 462 | /** 463 | * 批量隐藏功能按钮接口 464 | */ 465 | function hideMenuItems(params: IhideMenuItems): void; 466 | 467 | interface IshowMenuItems extends BaseParams { 468 | menuList: menuList; // 要显示的菜单项,所有menu项见附录3 469 | } 470 | /** 471 | * 批量显示功能按钮接口 472 | */ 473 | function showMenuItems(params: IshowMenuItems): void; 474 | 475 | /** 476 | * 隐藏所有非基础按钮接口 477 | * “基本类”按钮详见附录3 478 | */ 479 | function hideAllNonBaseMenuItem(): void; 480 | 481 | /** 482 | * 显示所有功能按钮接口 483 | */ 484 | function showAllNonBaseMenuItem(): void; 485 | /*=============================界面操作================================*/ 486 | /*=============================微信扫一扫================================*/ 487 | 488 | type scanType = "qrCode" | "barCode"; 489 | 490 | interface IscanQRCode extends BaseParams { 491 | needResult: 0 | 1; // 默认为0,扫描结果由微信处理,1则直接返回扫描结果, 492 | scanType: scanType[]; // 可以指定扫二维码还是一维码,默认二者都有 493 | // 当needResult 为 1 时,扫码返回的结果 494 | success(res: { resultStr: string }): void; 495 | } 496 | /** 497 | * 调起微信扫一扫接口 498 | */ 499 | function scanQRCode(params: IscanQRCode): void; 500 | /*=============================微信扫一扫================================*/ 501 | /*=============================微信小店================================*/ 502 | 503 | interface IopenProductSpecificView extends BaseParams { 504 | productId: string; // 商品id 505 | viewType: "0" | "1" | "2"; // 0.默认值,普通商品详情页1.扫一扫商品详情页2.小店商品详情页 506 | } 507 | /** 508 | * 跳转微信商品页接口 509 | */ 510 | function openProductSpecificView(params: IopenProductSpecificView): void; 511 | /*=============================微信卡券================================*/ 512 | 513 | interface IchooseCard extends BaseParams { 514 | shopId: string; // 门店Id 515 | cardType: string; // 卡券类型 516 | cardId: string; // 卡券Id 517 | timestamp: number; // 卡券签名时间戳 518 | nonceStr: string; // 卡券签名随机串 519 | signType: string; // 签名方式,默认'SHA1' 520 | cardSign: string; // 卡券签名 521 | success(res: { cardList: string[] }): void; 522 | } 523 | /** 524 | * 拉取适用卡券列表并获取用户选择信息 525 | */ 526 | function chooseCard(params: IchooseCard): void; 527 | 528 | interface IaddCard extends BaseParams { 529 | cardList: Array<{ 530 | cardId: string; 531 | cardExt: string; 532 | }>; // 需要添加的卡券列表 533 | success(res: { cardList: string[] }): void; 534 | } 535 | /** 536 | * 批量添加卡券接口 537 | */ 538 | function addCard(): void; 539 | 540 | interface IopenCard extends BaseParams { 541 | cardList: Array<{ 542 | cardId: string; 543 | code: string; 544 | }>; // 需要打开的卡券列表 545 | } 546 | /** 547 | * 查看微信卡包中的卡券接口 548 | */ 549 | function openCard(params: IopenCard): void; 550 | 551 | interface IconsumeAndShareCard extends BaseParams { 552 | cardId: string; 553 | code: string; 554 | } 555 | /** 556 | * 核销后再次赠送卡券接口 557 | */ 558 | function consumeAndShareCard(params: IconsumeAndShareCard): void; 559 | /*=============================微信卡券================================*/ 560 | /*=============================微信支付================================*/ 561 | 562 | interface IchooseWXPay extends BaseParams { 563 | timestamp: number; // 支付签名时间戳,注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符 564 | nonceStr: string; // 支付签名随机串,不长于 32 位 565 | package: string; // 统一支付接口返回的prepay_id参数值,提交格式如:prepay_id=***) 566 | signType: string; // 签名方式,默认为'SHA1',使用新版支付需传入'MD5' 567 | paySign: string; // 支付签名 568 | // 支付成功后的回调函数 569 | success(res: any): void; 570 | } 571 | /** 572 | * 发起一个微信支付请求 573 | */ 574 | function chooseWXPay(params: IchooseWXPay): void; 575 | /*=============================微信支付================================*/ 576 | /*=============================微信小程序==============================*/ 577 | interface miniProgramMethodsParams extends BaseParams { 578 | url: string; 579 | } 580 | interface miniProgramMethods { 581 | navigateTo(params: miniProgramMethodsParams): void; 582 | navigateBack(params: miniProgramMethodsParams): void; 583 | switchTab(params: miniProgramMethodsParams): void; 584 | reLaunch(params: miniProgramMethodsParams): void; 585 | redirectTo(params: miniProgramMethodsParams): void; 586 | postMessage(params: { data: any }): void; 587 | getEnv(fn: (res: any) => void): void; 588 | } 589 | const miniProgram: miniProgramMethods; 590 | /*=============================微信小程序==============================*/ 591 | } 592 | declare function wx(): void; 593 | /*=============================微信内全局变量==============================*/ 594 | declare global { 595 | interface Window { 596 | WeixinJSBridge: any; 597 | __wxjs_environment: any; 598 | } 599 | const WeixinJSBridge: any; 600 | } 601 | export default wx; 602 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | !(function (e, n) { 2 | module.exports = n(e); 3 | })(typeof window === "object" && window, function (r, e) { 4 | if (!r) { 5 | console.warn("can't use weixin-js-sdk in server side"); 6 | return; 7 | } 8 | var a, c, n, i, t, o, s, d, l, u, p, f, m, g, h, S, y, I, v, _, w, T; 9 | if (!r.jWeixin) 10 | return ( 11 | (a = { 12 | config: "preVerifyJSAPI", 13 | onMenuShareTimeline: "menu:share:timeline", 14 | onMenuShareAppMessage: "menu:share:appmessage", 15 | onMenuShareQQ: "menu:share:qq", 16 | onMenuShareWeibo: "menu:share:weiboApp", 17 | onMenuShareQZone: "menu:share:QZone", 18 | previewImage: "imagePreview", 19 | getLocation: "geoLocation", 20 | openProductSpecificView: "openProductViewWithPid", 21 | addCard: "batchAddCard", 22 | openCard: "batchViewCard", 23 | chooseWXPay: "getBrandWCPayRequest", 24 | openEnterpriseRedPacket: "getRecevieBizHongBaoRequest", 25 | startSearchBeacons: "startMonitoringBeacons", 26 | stopSearchBeacons: "stopMonitoringBeacons", 27 | onSearchBeacons: "onBeaconsInRange", 28 | consumeAndShareCard: "consumedShareCard", 29 | openAddress: "editAddress", 30 | }), 31 | (c = (function () { 32 | var e, 33 | n = {}; 34 | for (e in a) n[a[e]] = e; 35 | return n; 36 | })()), 37 | (n = r.document), 38 | (i = n.title), 39 | (t = navigator.userAgent.toLowerCase()), 40 | (f = navigator.platform.toLowerCase()), 41 | (o = !(!f.match("mac") && !f.match("win"))), 42 | (s = -1 != t.indexOf("wxdebugger")), 43 | (d = -1 != t.indexOf("micromessenger")), 44 | (l = -1 != t.indexOf("android")), 45 | (u = -1 != t.indexOf("iphone") || -1 != t.indexOf("ipad")), 46 | (p = (f = 47 | t.match(/micromessenger\/(\d+\.\d+\.\d+)/) || 48 | t.match(/micromessenger\/(\d+\.\d+)/)) 49 | ? f[1] 50 | : ""), 51 | (m = { 52 | initStartTime: L(), 53 | initEndTime: 0, 54 | preVerifyStartTime: 0, 55 | preVerifyEndTime: 0, 56 | }), 57 | (g = { 58 | version: 1, 59 | appId: "", 60 | initTime: 0, 61 | preVerifyTime: 0, 62 | networkType: "", 63 | isPreVerifyOk: 1, 64 | systemType: u ? 1 : l ? 2 : -1, 65 | clientVersion: p, 66 | url: encodeURIComponent(location.href), 67 | }), 68 | (h = {}), 69 | (S = { _completes: [] }), 70 | (y = { state: 0, data: {} }), 71 | O(function () { 72 | m.initEndTime = L(); 73 | }), 74 | (I = !1), 75 | (v = []), 76 | (_ = { 77 | config: function (e) { 78 | C("config", (h = e)); 79 | var o = !1 !== h.check; 80 | O(function () { 81 | if (o) 82 | k( 83 | a.config, 84 | { 85 | verifyJsApiList: A(h.jsApiList), 86 | verifyOpenTagList: A(h.openTagList), 87 | }, 88 | ((S._complete = function (e) { 89 | (m.preVerifyEndTime = L()), (y.state = 1), (y.data = e); 90 | }), 91 | (S.success = function (e) { 92 | g.isPreVerifyOk = 0; 93 | }), 94 | (S.fail = function (e) { 95 | S._fail ? S._fail(e) : (y.state = -1); 96 | }), 97 | (t = S._completes).push(function () { 98 | B(); 99 | }), 100 | (S.complete = function (e) { 101 | for (var n = 0, i = t.length; n < i; ++n) t[n](); 102 | S._completes = []; 103 | }), 104 | S) 105 | ), 106 | (m.preVerifyStartTime = L()); 107 | else { 108 | y.state = 1; 109 | for (var e = S._completes, n = 0, i = e.length; n < i; ++n) 110 | e[n](); 111 | S._completes = []; 112 | } 113 | var t; 114 | }), 115 | _.invoke || 116 | ((_.invoke = function (e, n, i) { 117 | r.WeixinJSBridge && WeixinJSBridge.invoke(e, P(n), i); 118 | }), 119 | (_.on = function (e, n) { 120 | r.WeixinJSBridge && WeixinJSBridge.on(e, n); 121 | })); 122 | }, 123 | ready: function (e) { 124 | (0 != y.state || (S._completes.push(e), !d && h.debug)) && e(); 125 | }, 126 | error: function (e) { 127 | p < "6.0.2" || (-1 == y.state ? e(y.data) : (S._fail = e)); 128 | }, 129 | checkJsApi: function (e) { 130 | k( 131 | "checkJsApi", 132 | { jsApiList: A(e.jsApiList) }, 133 | ((e._complete = function (e) { 134 | l && (i = e.checkResult) && (e.checkResult = JSON.parse(i)); 135 | var n, 136 | i = e, 137 | t = i.checkResult; 138 | for (n in t) { 139 | var o = c[n]; 140 | o && ((t[o] = t[n]), delete t[n]); 141 | } 142 | }), 143 | e) 144 | ); 145 | }, 146 | onMenuShareTimeline: function (e) { 147 | M( 148 | a.onMenuShareTimeline, 149 | { 150 | complete: function () { 151 | k( 152 | "shareTimeline", 153 | { 154 | title: e.title || i, 155 | desc: e.title || i, 156 | img_url: e.imgUrl || "", 157 | link: e.link || location.href, 158 | type: e.type || "link", 159 | data_url: e.dataUrl || "", 160 | }, 161 | e 162 | ); 163 | }, 164 | }, 165 | e 166 | ); 167 | }, 168 | onMenuShareAppMessage: function (n) { 169 | M( 170 | a.onMenuShareAppMessage, 171 | { 172 | complete: function (e) { 173 | "favorite" === e.scene 174 | ? k("sendAppMessage", { 175 | title: n.title || i, 176 | desc: n.desc || "", 177 | link: n.link || location.href, 178 | img_url: n.imgUrl || "", 179 | type: n.type || "link", 180 | data_url: n.dataUrl || "", 181 | }) 182 | : k( 183 | "sendAppMessage", 184 | { 185 | title: n.title || i, 186 | desc: n.desc || "", 187 | link: n.link || location.href, 188 | img_url: n.imgUrl || "", 189 | type: n.type || "link", 190 | data_url: n.dataUrl || "", 191 | }, 192 | n 193 | ); 194 | }, 195 | }, 196 | n 197 | ); 198 | }, 199 | onMenuShareQQ: function (e) { 200 | M( 201 | a.onMenuShareQQ, 202 | { 203 | complete: function () { 204 | k( 205 | "shareQQ", 206 | { 207 | title: e.title || i, 208 | desc: e.desc || "", 209 | img_url: e.imgUrl || "", 210 | link: e.link || location.href, 211 | }, 212 | e 213 | ); 214 | }, 215 | }, 216 | e 217 | ); 218 | }, 219 | onMenuShareWeibo: function (e) { 220 | M( 221 | a.onMenuShareWeibo, 222 | { 223 | complete: function () { 224 | k( 225 | "shareWeiboApp", 226 | { 227 | title: e.title || i, 228 | desc: e.desc || "", 229 | img_url: e.imgUrl || "", 230 | link: e.link || location.href, 231 | }, 232 | e 233 | ); 234 | }, 235 | }, 236 | e 237 | ); 238 | }, 239 | onMenuShareQZone: function (e) { 240 | M( 241 | a.onMenuShareQZone, 242 | { 243 | complete: function () { 244 | k( 245 | "shareQZone", 246 | { 247 | title: e.title || i, 248 | desc: e.desc || "", 249 | img_url: e.imgUrl || "", 250 | link: e.link || location.href, 251 | }, 252 | e 253 | ); 254 | }, 255 | }, 256 | e 257 | ); 258 | }, 259 | updateTimelineShareData: function (e) { 260 | k( 261 | "updateTimelineShareData", 262 | { title: e.title, link: e.link, imgUrl: e.imgUrl }, 263 | e 264 | ); 265 | }, 266 | updateAppMessageShareData: function (e) { 267 | k( 268 | "updateAppMessageShareData", 269 | { title: e.title, desc: e.desc, link: e.link, imgUrl: e.imgUrl }, 270 | e 271 | ); 272 | }, 273 | startRecord: function (e) { 274 | k("startRecord", {}, e); 275 | }, 276 | stopRecord: function (e) { 277 | k("stopRecord", {}, e); 278 | }, 279 | onVoiceRecordEnd: function (e) { 280 | M("onVoiceRecordEnd", e); 281 | }, 282 | playVoice: function (e) { 283 | k("playVoice", { localId: e.localId }, e); 284 | }, 285 | pauseVoice: function (e) { 286 | k("pauseVoice", { localId: e.localId }, e); 287 | }, 288 | stopVoice: function (e) { 289 | k("stopVoice", { localId: e.localId }, e); 290 | }, 291 | onVoicePlayEnd: function (e) { 292 | M("onVoicePlayEnd", e); 293 | }, 294 | uploadVoice: function (e) { 295 | k( 296 | "uploadVoice", 297 | { 298 | localId: e.localId, 299 | isShowProgressTips: 0 == e.isShowProgressTips ? 0 : 1, 300 | }, 301 | e 302 | ); 303 | }, 304 | downloadVoice: function (e) { 305 | k( 306 | "downloadVoice", 307 | { 308 | serverId: e.serverId, 309 | isShowProgressTips: 0 == e.isShowProgressTips ? 0 : 1, 310 | }, 311 | e 312 | ); 313 | }, 314 | translateVoice: function (e) { 315 | k( 316 | "translateVoice", 317 | { 318 | localId: e.localId, 319 | isShowProgressTips: 0 == e.isShowProgressTips ? 0 : 1, 320 | }, 321 | e 322 | ); 323 | }, 324 | chooseImage: function (e) { 325 | k( 326 | "chooseImage", 327 | { 328 | scene: "1|2", 329 | count: e.count || 9, 330 | sizeType: e.sizeType || ["original", "compressed"], 331 | sourceType: e.sourceType || ["album", "camera"], 332 | }, 333 | ((e._complete = function (e) { 334 | if (l) { 335 | var n = e.localIds; 336 | try { 337 | n && (e.localIds = JSON.parse(n)); 338 | } catch (e) {} 339 | } 340 | }), 341 | e) 342 | ); 343 | }, 344 | getLocation: function (e) { 345 | (e = e || {}), 346 | k( 347 | a.getLocation, 348 | { type: e.type || "wgs84" }, 349 | ((e._complete = function (e) { 350 | delete e.type; 351 | }), 352 | e) 353 | ); 354 | }, 355 | previewImage: function (e) { 356 | k(a.previewImage, { current: e.current, urls: e.urls }, e); 357 | }, 358 | uploadImage: function (e) { 359 | k( 360 | "uploadImage", 361 | { 362 | localId: e.localId, 363 | isShowProgressTips: 0 == e.isShowProgressTips ? 0 : 1, 364 | }, 365 | e 366 | ); 367 | }, 368 | downloadImage: function (e) { 369 | k( 370 | "downloadImage", 371 | { 372 | serverId: e.serverId, 373 | isShowProgressTips: 0 == e.isShowProgressTips ? 0 : 1, 374 | }, 375 | e 376 | ); 377 | }, 378 | getLocalImgData: function (e) { 379 | !1 === I 380 | ? ((I = !0), 381 | k( 382 | "getLocalImgData", 383 | { localId: e.localId }, 384 | ((e._complete = function (e) { 385 | var n; 386 | (I = !1), 387 | 0 < v.length && ((n = v.shift()), wx.getLocalImgData(n)); 388 | }), 389 | e) 390 | )) 391 | : v.push(e); 392 | }, 393 | getNetworkType: function (e) { 394 | k( 395 | "getNetworkType", 396 | {}, 397 | ((e._complete = function (e) { 398 | var n = e, 399 | e = n.errMsg, 400 | i = ((n.errMsg = "getNetworkType:ok"), n.subtype); 401 | if ((delete n.subtype, i)) n.networkType = i; 402 | else { 403 | var i = e.indexOf(":"), 404 | t = e.substring(i + 1); 405 | switch (t) { 406 | case "wifi": 407 | case "edge": 408 | case "wwan": 409 | n.networkType = t; 410 | break; 411 | default: 412 | n.errMsg = "getNetworkType:fail"; 413 | } 414 | } 415 | }), 416 | e) 417 | ); 418 | }, 419 | openLocation: function (e) { 420 | k( 421 | "openLocation", 422 | { 423 | latitude: e.latitude, 424 | longitude: e.longitude, 425 | name: e.name || "", 426 | address: e.address || "", 427 | scale: e.scale || 28, 428 | infoUrl: e.infoUrl || "", 429 | }, 430 | e 431 | ); 432 | }, 433 | hideOptionMenu: function (e) { 434 | k("hideOptionMenu", {}, e); 435 | }, 436 | showOptionMenu: function (e) { 437 | k("showOptionMenu", {}, e); 438 | }, 439 | closeWindow: function (e) { 440 | k("closeWindow", {}, (e = e || {})); 441 | }, 442 | hideMenuItems: function (e) { 443 | k("hideMenuItems", { menuList: e.menuList }, e); 444 | }, 445 | showMenuItems: function (e) { 446 | k("showMenuItems", { menuList: e.menuList }, e); 447 | }, 448 | hideAllNonBaseMenuItem: function (e) { 449 | k("hideAllNonBaseMenuItem", {}, e); 450 | }, 451 | showAllNonBaseMenuItem: function (e) { 452 | k("showAllNonBaseMenuItem", {}, e); 453 | }, 454 | scanQRCode: function (e) { 455 | k( 456 | "scanQRCode", 457 | { 458 | needResult: (e = e || {}).needResult || 0, 459 | scanType: e.scanType || ["qrCode", "barCode"], 460 | }, 461 | ((e._complete = function (e) { 462 | var n; 463 | u && 464 | (n = e.resultStr) && 465 | ((n = JSON.parse(n)), 466 | (e.resultStr = n && n.scan_code && n.scan_code.scan_result)); 467 | }), 468 | e) 469 | ); 470 | }, 471 | openAddress: function (e) { 472 | k( 473 | a.openAddress, 474 | {}, 475 | ((e._complete = function (e) { 476 | ((e = e).postalCode = e.addressPostalCode), 477 | delete e.addressPostalCode, 478 | (e.provinceName = e.proviceFirstStageName), 479 | delete e.proviceFirstStageName, 480 | (e.cityName = e.addressCitySecondStageName), 481 | delete e.addressCitySecondStageName, 482 | (e.countryName = e.addressCountiesThirdStageName), 483 | delete e.addressCountiesThirdStageName, 484 | (e.detailInfo = e.addressDetailInfo), 485 | delete e.addressDetailInfo; 486 | }), 487 | e) 488 | ); 489 | }, 490 | openProductSpecificView: function (e) { 491 | k( 492 | a.openProductSpecificView, 493 | { 494 | pid: e.productId, 495 | view_type: e.viewType || 0, 496 | ext_info: e.extInfo, 497 | }, 498 | e 499 | ); 500 | }, 501 | addCard: function (e) { 502 | for (var n = e.cardList, i = [], t = 0, o = n.length; t < o; ++t) { 503 | var r = n[t], 504 | r = { card_id: r.cardId, card_ext: r.cardExt }; 505 | i.push(r); 506 | } 507 | k( 508 | a.addCard, 509 | { card_list: i }, 510 | ((e._complete = function (e) { 511 | if ((n = e.card_list)) { 512 | for (var n, i = 0, t = (n = JSON.parse(n)).length; i < t; ++i) { 513 | var o = n[i]; 514 | (o.cardId = o.card_id), 515 | (o.cardExt = o.card_ext), 516 | (o.isSuccess = !!o.is_succ), 517 | delete o.card_id, 518 | delete o.card_ext, 519 | delete o.is_succ; 520 | } 521 | (e.cardList = n), delete e.card_list; 522 | } 523 | }), 524 | e) 525 | ); 526 | }, 527 | chooseCard: function (e) { 528 | k( 529 | "chooseCard", 530 | { 531 | app_id: h.appId, 532 | location_id: e.shopId || "", 533 | sign_type: e.signType || "SHA1", 534 | card_id: e.cardId || "", 535 | card_type: e.cardType || "", 536 | card_sign: e.cardSign, 537 | time_stamp: e.timestamp + "", 538 | nonce_str: e.nonceStr, 539 | }, 540 | ((e._complete = function (e) { 541 | (e.cardList = e.choose_card_info), delete e.choose_card_info; 542 | }), 543 | e) 544 | ); 545 | }, 546 | openCard: function (e) { 547 | for (var n = e.cardList, i = [], t = 0, o = n.length; t < o; ++t) { 548 | var r = n[t], 549 | r = { card_id: r.cardId, code: r.code }; 550 | i.push(r); 551 | } 552 | k(a.openCard, { card_list: i }, e); 553 | }, 554 | consumeAndShareCard: function (e) { 555 | k( 556 | a.consumeAndShareCard, 557 | { consumedCardId: e.cardId, consumedCode: e.code }, 558 | e 559 | ); 560 | }, 561 | chooseWXPay: function (e) { 562 | k(a.chooseWXPay, x(e), e), B({ jsApiName: "chooseWXPay" }); 563 | }, 564 | openEnterpriseRedPacket: function (e) { 565 | k(a.openEnterpriseRedPacket, x(e), e); 566 | }, 567 | startSearchBeacons: function (e) { 568 | k(a.startSearchBeacons, { ticket: e.ticket }, e); 569 | }, 570 | stopSearchBeacons: function (e) { 571 | k(a.stopSearchBeacons, {}, e); 572 | }, 573 | onSearchBeacons: function (e) { 574 | M(a.onSearchBeacons, e); 575 | }, 576 | openEnterpriseChat: function (e) { 577 | k( 578 | "openEnterpriseChat", 579 | { useridlist: e.userIds, chatname: e.groupName }, 580 | e 581 | ); 582 | }, 583 | launchMiniProgram: function (e) { 584 | k( 585 | "launchMiniProgram", 586 | { 587 | targetAppId: e.targetAppId, 588 | path: (function (e) { 589 | var n; 590 | if ("string" == typeof e && 0 < e.length) 591 | return ( 592 | (n = e.split("?")[0]), 593 | (n += ".html"), 594 | void 0 !== (e = e.split("?")[1]) ? n + "?" + e : n 595 | ); 596 | })(e.path), 597 | envVersion: e.envVersion, 598 | }, 599 | e 600 | ); 601 | }, 602 | openBusinessView: function (e) { 603 | k( 604 | "openBusinessView", 605 | { 606 | businessType: e.businessType, 607 | queryString: e.queryString || "", 608 | envVersion: e.envVersion, 609 | }, 610 | ((e._complete = function (n) { 611 | if (l) { 612 | var e = n.extraData; 613 | if (e) 614 | try { 615 | n.extraData = JSON.parse(e); 616 | } catch (e) { 617 | n.extraData = {}; 618 | } 619 | } 620 | }), 621 | e) 622 | ); 623 | }, 624 | miniProgram: { 625 | navigateBack: function (e) { 626 | (e = e || {}), 627 | O(function () { 628 | k( 629 | "invokeMiniProgramAPI", 630 | { name: "navigateBack", arg: { delta: e.delta || 1 } }, 631 | e 632 | ); 633 | }); 634 | }, 635 | navigateTo: function (e) { 636 | O(function () { 637 | k( 638 | "invokeMiniProgramAPI", 639 | { name: "navigateTo", arg: { url: e.url } }, 640 | e 641 | ); 642 | }); 643 | }, 644 | redirectTo: function (e) { 645 | O(function () { 646 | k( 647 | "invokeMiniProgramAPI", 648 | { name: "redirectTo", arg: { url: e.url } }, 649 | e 650 | ); 651 | }); 652 | }, 653 | switchTab: function (e) { 654 | O(function () { 655 | k( 656 | "invokeMiniProgramAPI", 657 | { name: "switchTab", arg: { url: e.url } }, 658 | e 659 | ); 660 | }); 661 | }, 662 | reLaunch: function (e) { 663 | O(function () { 664 | k( 665 | "invokeMiniProgramAPI", 666 | { name: "reLaunch", arg: { url: e.url } }, 667 | e 668 | ); 669 | }); 670 | }, 671 | postMessage: function (e) { 672 | O(function () { 673 | k( 674 | "invokeMiniProgramAPI", 675 | { name: "postMessage", arg: e.data || {} }, 676 | e 677 | ); 678 | }); 679 | }, 680 | getEnv: function (e) { 681 | O(function () { 682 | e({ miniprogram: "miniprogram" === r.__wxjs_environment }); 683 | }); 684 | }, 685 | }, 686 | }), 687 | (w = 1), 688 | (T = {}), 689 | n.addEventListener( 690 | "error", 691 | function (e) { 692 | var n, i, t; 693 | l || 694 | ((t = (n = e.target).tagName), 695 | (i = n.src), 696 | "IMG" != t && "VIDEO" != t && "AUDIO" != t && "SOURCE" != t) || 697 | (-1 != i.indexOf("wxlocalresource://") && 698 | (e.preventDefault(), 699 | e.stopPropagation(), 700 | (t = n["wx-id"]) || ((t = w++), (n["wx-id"] = t)), 701 | T[t] || 702 | ((T[t] = !0), 703 | wx.ready(function () { 704 | wx.getLocalImgData({ 705 | localId: i, 706 | success: function (e) { 707 | n.src = e.localData; 708 | }, 709 | }); 710 | })))); 711 | }, 712 | !0 713 | ), 714 | n.addEventListener( 715 | "load", 716 | function (e) { 717 | var n; 718 | l || 719 | ((n = (e = e.target).tagName), 720 | e.src, 721 | "IMG" != n && "VIDEO" != n && "AUDIO" != n && "SOURCE" != n) || 722 | ((n = e["wx-id"]) && (T[n] = !1)); 723 | }, 724 | !0 725 | ), 726 | e && (r.wx = r.jWeixin = _), 727 | _ 728 | ); 729 | else return r.jWeixin; 730 | function k(n, e, i) { 731 | r.WeixinJSBridge 732 | ? WeixinJSBridge.invoke(n, P(e), function (e) { 733 | V(n, e, i); 734 | }) 735 | : C(n, i); 736 | } 737 | function M(n, i, t) { 738 | r.WeixinJSBridge 739 | ? WeixinJSBridge.on(n, function (e) { 740 | t && t.trigger && t.trigger(e), V(n, e, i); 741 | }) 742 | : C(n, t || i); 743 | } 744 | function P(e) { 745 | return ( 746 | ((e = e || {}).appId = h.appId), 747 | (e.verifyAppId = h.appId), 748 | (e.verifySignType = "sha1"), 749 | (e.verifyTimestamp = h.timestamp + ""), 750 | (e.verifyNonceStr = h.nonceStr), 751 | (e.verifySignature = h.signature), 752 | e 753 | ); 754 | } 755 | function x(e) { 756 | return { 757 | timeStamp: e.timestamp + "", 758 | nonceStr: e.nonceStr, 759 | package: e.package, 760 | paySign: e.paySign, 761 | signType: e.signType || "SHA1", 762 | }; 763 | } 764 | function V(e, n, i) { 765 | ("openEnterpriseChat" != e && "openBusinessView" !== e) || 766 | (n.errCode = n.err_code), 767 | delete n.err_code, 768 | delete n.err_desc, 769 | delete n.err_detail; 770 | var t = n.errMsg, 771 | e = 772 | (t || 773 | ((t = n.err_msg), 774 | delete n.err_msg, 775 | (t = (function (e, n) { 776 | var i = c[e]; 777 | i && (e = i); 778 | i = "ok"; 779 | { 780 | var t; 781 | n && 782 | ((t = n.indexOf(":")), 783 | ("access denied" != 784 | (i = (i = (i = 785 | -1 != 786 | (i = 787 | -1 != 788 | (i = 789 | "failed" == 790 | (i = "confirm" == (i = n.substring(t + 1)) ? "ok" : i) 791 | ? "fail" 792 | : i).indexOf("failed_") 793 | ? i.substring(7) 794 | : i).indexOf("fail_") 795 | ? i.substring(5) 796 | : i).replace(/_/g, " ")).toLowerCase()) && 797 | "no permission to execute" != i) || 798 | (i = "permission denied"), 799 | "" == 800 | (i = 801 | "config" == e && "function not exist" == i ? "ok" : i)) && 802 | (i = "fail"); 803 | } 804 | return (n = e + ":" + i); 805 | })(e, t)), 806 | (n.errMsg = t)), 807 | (i = i || {})._complete && (i._complete(n), delete i._complete), 808 | (t = n.errMsg || ""), 809 | h.debug && !i.isInnerInvoke && alert(JSON.stringify(n)), 810 | t.indexOf(":")); 811 | switch (t.substring(e + 1)) { 812 | case "ok": 813 | i.success && i.success(n); 814 | break; 815 | case "cancel": 816 | i.cancel && i.cancel(n); 817 | break; 818 | default: 819 | i.fail && i.fail(n); 820 | } 821 | i.complete && i.complete(n); 822 | } 823 | function A(e) { 824 | if (e) { 825 | for (var n = 0, i = e.length; n < i; ++n) { 826 | var t = e[n], 827 | t = a[t]; 828 | t && (e[n] = t); 829 | } 830 | return e; 831 | } 832 | } 833 | function C(e, n) { 834 | var i; 835 | !h.debug || 836 | (n && n.isInnerInvoke) || 837 | ((i = c[e]) && (e = i), 838 | n && n._complete && delete n._complete, 839 | console.log('"' + e + '",', n || "")); 840 | } 841 | function B(n) { 842 | var i; 843 | o || 844 | s || 845 | h.debug || 846 | p < "6.0.2" || 847 | g.systemType < 0 || 848 | ((i = new Image()), 849 | (g.appId = h.appId), 850 | (g.initTime = m.initEndTime - m.initStartTime), 851 | (g.preVerifyTime = m.preVerifyEndTime - m.preVerifyStartTime), 852 | _.getNetworkType({ 853 | isInnerInvoke: !0, 854 | success: function (e) { 855 | g.networkType = e.networkType; 856 | e = 857 | "https://open.weixin.qq.com/sdk/report?v=" + 858 | g.version + 859 | "&o=" + 860 | g.isPreVerifyOk + 861 | "&s=" + 862 | g.systemType + 863 | "&c=" + 864 | g.clientVersion + 865 | "&a=" + 866 | g.appId + 867 | "&n=" + 868 | g.networkType + 869 | "&i=" + 870 | g.initTime + 871 | "&p=" + 872 | g.preVerifyTime + 873 | "&u=" + 874 | g.url + 875 | "&jsapi_name=" + 876 | (n ? n.jsApiName : ""); 877 | i.src = e; 878 | }, 879 | })); 880 | } 881 | function L() { 882 | return new Date().getTime(); 883 | } 884 | function O(e) { 885 | d && 886 | (r.WeixinJSBridge 887 | ? e() 888 | : n.addEventListener && 889 | n.addEventListener("WeixinJSBridgeReady", e, !1)); 890 | } 891 | }); 892 | -------------------------------------------------------------------------------- /index.original.js: -------------------------------------------------------------------------------- 1 | // from http://res.wx.qq.com/open/js/jweixin-1.6.0.js 2 | !(function (e, n) { 3 | "function" == typeof define && (define.amd || define.cmd) 4 | ? define(function () { 5 | return n(e); 6 | }) 7 | : n(e, !0); 8 | })(this, function (r, e) { 9 | var a, c, n, i, t, o, s, d, l, u, p, f, m, g, h, S, y, I, v, _, w, T; 10 | if (!r.jWeixin) 11 | return ( 12 | (a = { 13 | config: "preVerifyJSAPI", 14 | onMenuShareTimeline: "menu:share:timeline", 15 | onMenuShareAppMessage: "menu:share:appmessage", 16 | onMenuShareQQ: "menu:share:qq", 17 | onMenuShareWeibo: "menu:share:weiboApp", 18 | onMenuShareQZone: "menu:share:QZone", 19 | previewImage: "imagePreview", 20 | getLocation: "geoLocation", 21 | openProductSpecificView: "openProductViewWithPid", 22 | addCard: "batchAddCard", 23 | openCard: "batchViewCard", 24 | chooseWXPay: "getBrandWCPayRequest", 25 | openEnterpriseRedPacket: "getRecevieBizHongBaoRequest", 26 | startSearchBeacons: "startMonitoringBeacons", 27 | stopSearchBeacons: "stopMonitoringBeacons", 28 | onSearchBeacons: "onBeaconsInRange", 29 | consumeAndShareCard: "consumedShareCard", 30 | openAddress: "editAddress", 31 | }), 32 | (c = (function () { 33 | var e, 34 | n = {}; 35 | for (e in a) n[a[e]] = e; 36 | return n; 37 | })()), 38 | (n = r.document), 39 | (i = n.title), 40 | (t = navigator.userAgent.toLowerCase()), 41 | (f = navigator.platform.toLowerCase()), 42 | (o = !(!f.match("mac") && !f.match("win"))), 43 | (s = -1 != t.indexOf("wxdebugger")), 44 | (d = -1 != t.indexOf("micromessenger")), 45 | (l = -1 != t.indexOf("android")), 46 | (u = -1 != t.indexOf("iphone") || -1 != t.indexOf("ipad")), 47 | (p = (f = 48 | t.match(/micromessenger\/(\d+\.\d+\.\d+)/) || 49 | t.match(/micromessenger\/(\d+\.\d+)/)) 50 | ? f[1] 51 | : ""), 52 | (m = { 53 | initStartTime: L(), 54 | initEndTime: 0, 55 | preVerifyStartTime: 0, 56 | preVerifyEndTime: 0, 57 | }), 58 | (g = { 59 | version: 1, 60 | appId: "", 61 | initTime: 0, 62 | preVerifyTime: 0, 63 | networkType: "", 64 | isPreVerifyOk: 1, 65 | systemType: u ? 1 : l ? 2 : -1, 66 | clientVersion: p, 67 | url: encodeURIComponent(location.href), 68 | }), 69 | (h = {}), 70 | (S = { _completes: [] }), 71 | (y = { state: 0, data: {} }), 72 | O(function () { 73 | m.initEndTime = L(); 74 | }), 75 | (I = !1), 76 | (v = []), 77 | (_ = { 78 | config: function (e) { 79 | C("config", (h = e)); 80 | var o = !1 !== h.check; 81 | O(function () { 82 | if (o) 83 | k( 84 | a.config, 85 | { 86 | verifyJsApiList: A(h.jsApiList), 87 | verifyOpenTagList: A(h.openTagList), 88 | }, 89 | ((S._complete = function (e) { 90 | (m.preVerifyEndTime = L()), (y.state = 1), (y.data = e); 91 | }), 92 | (S.success = function (e) { 93 | g.isPreVerifyOk = 0; 94 | }), 95 | (S.fail = function (e) { 96 | S._fail ? S._fail(e) : (y.state = -1); 97 | }), 98 | (t = S._completes).push(function () { 99 | B(); 100 | }), 101 | (S.complete = function (e) { 102 | for (var n = 0, i = t.length; n < i; ++n) t[n](); 103 | S._completes = []; 104 | }), 105 | S) 106 | ), 107 | (m.preVerifyStartTime = L()); 108 | else { 109 | y.state = 1; 110 | for (var e = S._completes, n = 0, i = e.length; n < i; ++n) 111 | e[n](); 112 | S._completes = []; 113 | } 114 | var t; 115 | }), 116 | _.invoke || 117 | ((_.invoke = function (e, n, i) { 118 | r.WeixinJSBridge && WeixinJSBridge.invoke(e, P(n), i); 119 | }), 120 | (_.on = function (e, n) { 121 | r.WeixinJSBridge && WeixinJSBridge.on(e, n); 122 | })); 123 | }, 124 | ready: function (e) { 125 | (0 != y.state || (S._completes.push(e), !d && h.debug)) && e(); 126 | }, 127 | error: function (e) { 128 | p < "6.0.2" || (-1 == y.state ? e(y.data) : (S._fail = e)); 129 | }, 130 | checkJsApi: function (e) { 131 | k( 132 | "checkJsApi", 133 | { jsApiList: A(e.jsApiList) }, 134 | ((e._complete = function (e) { 135 | l && (i = e.checkResult) && (e.checkResult = JSON.parse(i)); 136 | var n, 137 | i = e, 138 | t = i.checkResult; 139 | for (n in t) { 140 | var o = c[n]; 141 | o && ((t[o] = t[n]), delete t[n]); 142 | } 143 | }), 144 | e) 145 | ); 146 | }, 147 | onMenuShareTimeline: function (e) { 148 | M( 149 | a.onMenuShareTimeline, 150 | { 151 | complete: function () { 152 | k( 153 | "shareTimeline", 154 | { 155 | title: e.title || i, 156 | desc: e.title || i, 157 | img_url: e.imgUrl || "", 158 | link: e.link || location.href, 159 | type: e.type || "link", 160 | data_url: e.dataUrl || "", 161 | }, 162 | e 163 | ); 164 | }, 165 | }, 166 | e 167 | ); 168 | }, 169 | onMenuShareAppMessage: function (n) { 170 | M( 171 | a.onMenuShareAppMessage, 172 | { 173 | complete: function (e) { 174 | "favorite" === e.scene 175 | ? k("sendAppMessage", { 176 | title: n.title || i, 177 | desc: n.desc || "", 178 | link: n.link || location.href, 179 | img_url: n.imgUrl || "", 180 | type: n.type || "link", 181 | data_url: n.dataUrl || "", 182 | }) 183 | : k( 184 | "sendAppMessage", 185 | { 186 | title: n.title || i, 187 | desc: n.desc || "", 188 | link: n.link || location.href, 189 | img_url: n.imgUrl || "", 190 | type: n.type || "link", 191 | data_url: n.dataUrl || "", 192 | }, 193 | n 194 | ); 195 | }, 196 | }, 197 | n 198 | ); 199 | }, 200 | onMenuShareQQ: function (e) { 201 | M( 202 | a.onMenuShareQQ, 203 | { 204 | complete: function () { 205 | k( 206 | "shareQQ", 207 | { 208 | title: e.title || i, 209 | desc: e.desc || "", 210 | img_url: e.imgUrl || "", 211 | link: e.link || location.href, 212 | }, 213 | e 214 | ); 215 | }, 216 | }, 217 | e 218 | ); 219 | }, 220 | onMenuShareWeibo: function (e) { 221 | M( 222 | a.onMenuShareWeibo, 223 | { 224 | complete: function () { 225 | k( 226 | "shareWeiboApp", 227 | { 228 | title: e.title || i, 229 | desc: e.desc || "", 230 | img_url: e.imgUrl || "", 231 | link: e.link || location.href, 232 | }, 233 | e 234 | ); 235 | }, 236 | }, 237 | e 238 | ); 239 | }, 240 | onMenuShareQZone: function (e) { 241 | M( 242 | a.onMenuShareQZone, 243 | { 244 | complete: function () { 245 | k( 246 | "shareQZone", 247 | { 248 | title: e.title || i, 249 | desc: e.desc || "", 250 | img_url: e.imgUrl || "", 251 | link: e.link || location.href, 252 | }, 253 | e 254 | ); 255 | }, 256 | }, 257 | e 258 | ); 259 | }, 260 | updateTimelineShareData: function (e) { 261 | k( 262 | "updateTimelineShareData", 263 | { title: e.title, link: e.link, imgUrl: e.imgUrl }, 264 | e 265 | ); 266 | }, 267 | updateAppMessageShareData: function (e) { 268 | k( 269 | "updateAppMessageShareData", 270 | { title: e.title, desc: e.desc, link: e.link, imgUrl: e.imgUrl }, 271 | e 272 | ); 273 | }, 274 | startRecord: function (e) { 275 | k("startRecord", {}, e); 276 | }, 277 | stopRecord: function (e) { 278 | k("stopRecord", {}, e); 279 | }, 280 | onVoiceRecordEnd: function (e) { 281 | M("onVoiceRecordEnd", e); 282 | }, 283 | playVoice: function (e) { 284 | k("playVoice", { localId: e.localId }, e); 285 | }, 286 | pauseVoice: function (e) { 287 | k("pauseVoice", { localId: e.localId }, e); 288 | }, 289 | stopVoice: function (e) { 290 | k("stopVoice", { localId: e.localId }, e); 291 | }, 292 | onVoicePlayEnd: function (e) { 293 | M("onVoicePlayEnd", e); 294 | }, 295 | uploadVoice: function (e) { 296 | k( 297 | "uploadVoice", 298 | { 299 | localId: e.localId, 300 | isShowProgressTips: 0 == e.isShowProgressTips ? 0 : 1, 301 | }, 302 | e 303 | ); 304 | }, 305 | downloadVoice: function (e) { 306 | k( 307 | "downloadVoice", 308 | { 309 | serverId: e.serverId, 310 | isShowProgressTips: 0 == e.isShowProgressTips ? 0 : 1, 311 | }, 312 | e 313 | ); 314 | }, 315 | translateVoice: function (e) { 316 | k( 317 | "translateVoice", 318 | { 319 | localId: e.localId, 320 | isShowProgressTips: 0 == e.isShowProgressTips ? 0 : 1, 321 | }, 322 | e 323 | ); 324 | }, 325 | chooseImage: function (e) { 326 | k( 327 | "chooseImage", 328 | { 329 | scene: "1|2", 330 | count: e.count || 9, 331 | sizeType: e.sizeType || ["original", "compressed"], 332 | sourceType: e.sourceType || ["album", "camera"], 333 | }, 334 | ((e._complete = function (e) { 335 | if (l) { 336 | var n = e.localIds; 337 | try { 338 | n && (e.localIds = JSON.parse(n)); 339 | } catch (e) {} 340 | } 341 | }), 342 | e) 343 | ); 344 | }, 345 | getLocation: function (e) { 346 | (e = e || {}), 347 | k( 348 | a.getLocation, 349 | { type: e.type || "wgs84" }, 350 | ((e._complete = function (e) { 351 | delete e.type; 352 | }), 353 | e) 354 | ); 355 | }, 356 | previewImage: function (e) { 357 | k(a.previewImage, { current: e.current, urls: e.urls }, e); 358 | }, 359 | uploadImage: function (e) { 360 | k( 361 | "uploadImage", 362 | { 363 | localId: e.localId, 364 | isShowProgressTips: 0 == e.isShowProgressTips ? 0 : 1, 365 | }, 366 | e 367 | ); 368 | }, 369 | downloadImage: function (e) { 370 | k( 371 | "downloadImage", 372 | { 373 | serverId: e.serverId, 374 | isShowProgressTips: 0 == e.isShowProgressTips ? 0 : 1, 375 | }, 376 | e 377 | ); 378 | }, 379 | getLocalImgData: function (e) { 380 | !1 === I 381 | ? ((I = !0), 382 | k( 383 | "getLocalImgData", 384 | { localId: e.localId }, 385 | ((e._complete = function (e) { 386 | var n; 387 | (I = !1), 388 | 0 < v.length && ((n = v.shift()), wx.getLocalImgData(n)); 389 | }), 390 | e) 391 | )) 392 | : v.push(e); 393 | }, 394 | getNetworkType: function (e) { 395 | k( 396 | "getNetworkType", 397 | {}, 398 | ((e._complete = function (e) { 399 | var n = e, 400 | e = n.errMsg, 401 | i = ((n.errMsg = "getNetworkType:ok"), n.subtype); 402 | if ((delete n.subtype, i)) n.networkType = i; 403 | else { 404 | var i = e.indexOf(":"), 405 | t = e.substring(i + 1); 406 | switch (t) { 407 | case "wifi": 408 | case "edge": 409 | case "wwan": 410 | n.networkType = t; 411 | break; 412 | default: 413 | n.errMsg = "getNetworkType:fail"; 414 | } 415 | } 416 | }), 417 | e) 418 | ); 419 | }, 420 | openLocation: function (e) { 421 | k( 422 | "openLocation", 423 | { 424 | latitude: e.latitude, 425 | longitude: e.longitude, 426 | name: e.name || "", 427 | address: e.address || "", 428 | scale: e.scale || 28, 429 | infoUrl: e.infoUrl || "", 430 | }, 431 | e 432 | ); 433 | }, 434 | hideOptionMenu: function (e) { 435 | k("hideOptionMenu", {}, e); 436 | }, 437 | showOptionMenu: function (e) { 438 | k("showOptionMenu", {}, e); 439 | }, 440 | closeWindow: function (e) { 441 | k("closeWindow", {}, (e = e || {})); 442 | }, 443 | hideMenuItems: function (e) { 444 | k("hideMenuItems", { menuList: e.menuList }, e); 445 | }, 446 | showMenuItems: function (e) { 447 | k("showMenuItems", { menuList: e.menuList }, e); 448 | }, 449 | hideAllNonBaseMenuItem: function (e) { 450 | k("hideAllNonBaseMenuItem", {}, e); 451 | }, 452 | showAllNonBaseMenuItem: function (e) { 453 | k("showAllNonBaseMenuItem", {}, e); 454 | }, 455 | scanQRCode: function (e) { 456 | k( 457 | "scanQRCode", 458 | { 459 | needResult: (e = e || {}).needResult || 0, 460 | scanType: e.scanType || ["qrCode", "barCode"], 461 | }, 462 | ((e._complete = function (e) { 463 | var n; 464 | u && 465 | (n = e.resultStr) && 466 | ((n = JSON.parse(n)), 467 | (e.resultStr = n && n.scan_code && n.scan_code.scan_result)); 468 | }), 469 | e) 470 | ); 471 | }, 472 | openAddress: function (e) { 473 | k( 474 | a.openAddress, 475 | {}, 476 | ((e._complete = function (e) { 477 | ((e = e).postalCode = e.addressPostalCode), 478 | delete e.addressPostalCode, 479 | (e.provinceName = e.proviceFirstStageName), 480 | delete e.proviceFirstStageName, 481 | (e.cityName = e.addressCitySecondStageName), 482 | delete e.addressCitySecondStageName, 483 | (e.countryName = e.addressCountiesThirdStageName), 484 | delete e.addressCountiesThirdStageName, 485 | (e.detailInfo = e.addressDetailInfo), 486 | delete e.addressDetailInfo; 487 | }), 488 | e) 489 | ); 490 | }, 491 | openProductSpecificView: function (e) { 492 | k( 493 | a.openProductSpecificView, 494 | { 495 | pid: e.productId, 496 | view_type: e.viewType || 0, 497 | ext_info: e.extInfo, 498 | }, 499 | e 500 | ); 501 | }, 502 | addCard: function (e) { 503 | for (var n = e.cardList, i = [], t = 0, o = n.length; t < o; ++t) { 504 | var r = n[t], 505 | r = { card_id: r.cardId, card_ext: r.cardExt }; 506 | i.push(r); 507 | } 508 | k( 509 | a.addCard, 510 | { card_list: i }, 511 | ((e._complete = function (e) { 512 | if ((n = e.card_list)) { 513 | for (var n, i = 0, t = (n = JSON.parse(n)).length; i < t; ++i) { 514 | var o = n[i]; 515 | (o.cardId = o.card_id), 516 | (o.cardExt = o.card_ext), 517 | (o.isSuccess = !!o.is_succ), 518 | delete o.card_id, 519 | delete o.card_ext, 520 | delete o.is_succ; 521 | } 522 | (e.cardList = n), delete e.card_list; 523 | } 524 | }), 525 | e) 526 | ); 527 | }, 528 | chooseCard: function (e) { 529 | k( 530 | "chooseCard", 531 | { 532 | app_id: h.appId, 533 | location_id: e.shopId || "", 534 | sign_type: e.signType || "SHA1", 535 | card_id: e.cardId || "", 536 | card_type: e.cardType || "", 537 | card_sign: e.cardSign, 538 | time_stamp: e.timestamp + "", 539 | nonce_str: e.nonceStr, 540 | }, 541 | ((e._complete = function (e) { 542 | (e.cardList = e.choose_card_info), delete e.choose_card_info; 543 | }), 544 | e) 545 | ); 546 | }, 547 | openCard: function (e) { 548 | for (var n = e.cardList, i = [], t = 0, o = n.length; t < o; ++t) { 549 | var r = n[t], 550 | r = { card_id: r.cardId, code: r.code }; 551 | i.push(r); 552 | } 553 | k(a.openCard, { card_list: i }, e); 554 | }, 555 | consumeAndShareCard: function (e) { 556 | k( 557 | a.consumeAndShareCard, 558 | { consumedCardId: e.cardId, consumedCode: e.code }, 559 | e 560 | ); 561 | }, 562 | chooseWXPay: function (e) { 563 | k(a.chooseWXPay, x(e), e), B({ jsApiName: "chooseWXPay" }); 564 | }, 565 | openEnterpriseRedPacket: function (e) { 566 | k(a.openEnterpriseRedPacket, x(e), e); 567 | }, 568 | startSearchBeacons: function (e) { 569 | k(a.startSearchBeacons, { ticket: e.ticket }, e); 570 | }, 571 | stopSearchBeacons: function (e) { 572 | k(a.stopSearchBeacons, {}, e); 573 | }, 574 | onSearchBeacons: function (e) { 575 | M(a.onSearchBeacons, e); 576 | }, 577 | openEnterpriseChat: function (e) { 578 | k( 579 | "openEnterpriseChat", 580 | { useridlist: e.userIds, chatname: e.groupName }, 581 | e 582 | ); 583 | }, 584 | launchMiniProgram: function (e) { 585 | k( 586 | "launchMiniProgram", 587 | { 588 | targetAppId: e.targetAppId, 589 | path: (function (e) { 590 | var n; 591 | if ("string" == typeof e && 0 < e.length) 592 | return ( 593 | (n = e.split("?")[0]), 594 | (n += ".html"), 595 | void 0 !== (e = e.split("?")[1]) ? n + "?" + e : n 596 | ); 597 | })(e.path), 598 | envVersion: e.envVersion, 599 | }, 600 | e 601 | ); 602 | }, 603 | openBusinessView: function (e) { 604 | k( 605 | "openBusinessView", 606 | { 607 | businessType: e.businessType, 608 | queryString: e.queryString || "", 609 | envVersion: e.envVersion, 610 | }, 611 | ((e._complete = function (n) { 612 | if (l) { 613 | var e = n.extraData; 614 | if (e) 615 | try { 616 | n.extraData = JSON.parse(e); 617 | } catch (e) { 618 | n.extraData = {}; 619 | } 620 | } 621 | }), 622 | e) 623 | ); 624 | }, 625 | miniProgram: { 626 | navigateBack: function (e) { 627 | (e = e || {}), 628 | O(function () { 629 | k( 630 | "invokeMiniProgramAPI", 631 | { name: "navigateBack", arg: { delta: e.delta || 1 } }, 632 | e 633 | ); 634 | }); 635 | }, 636 | navigateTo: function (e) { 637 | O(function () { 638 | k( 639 | "invokeMiniProgramAPI", 640 | { name: "navigateTo", arg: { url: e.url } }, 641 | e 642 | ); 643 | }); 644 | }, 645 | redirectTo: function (e) { 646 | O(function () { 647 | k( 648 | "invokeMiniProgramAPI", 649 | { name: "redirectTo", arg: { url: e.url } }, 650 | e 651 | ); 652 | }); 653 | }, 654 | switchTab: function (e) { 655 | O(function () { 656 | k( 657 | "invokeMiniProgramAPI", 658 | { name: "switchTab", arg: { url: e.url } }, 659 | e 660 | ); 661 | }); 662 | }, 663 | reLaunch: function (e) { 664 | O(function () { 665 | k( 666 | "invokeMiniProgramAPI", 667 | { name: "reLaunch", arg: { url: e.url } }, 668 | e 669 | ); 670 | }); 671 | }, 672 | postMessage: function (e) { 673 | O(function () { 674 | k( 675 | "invokeMiniProgramAPI", 676 | { name: "postMessage", arg: e.data || {} }, 677 | e 678 | ); 679 | }); 680 | }, 681 | getEnv: function (e) { 682 | O(function () { 683 | e({ miniprogram: "miniprogram" === r.__wxjs_environment }); 684 | }); 685 | }, 686 | }, 687 | }), 688 | (w = 1), 689 | (T = {}), 690 | n.addEventListener( 691 | "error", 692 | function (e) { 693 | var n, i, t; 694 | l || 695 | ((t = (n = e.target).tagName), 696 | (i = n.src), 697 | "IMG" != t && "VIDEO" != t && "AUDIO" != t && "SOURCE" != t) || 698 | (-1 != i.indexOf("wxlocalresource://") && 699 | (e.preventDefault(), 700 | e.stopPropagation(), 701 | (t = n["wx-id"]) || ((t = w++), (n["wx-id"] = t)), 702 | T[t] || 703 | ((T[t] = !0), 704 | wx.ready(function () { 705 | wx.getLocalImgData({ 706 | localId: i, 707 | success: function (e) { 708 | n.src = e.localData; 709 | }, 710 | }); 711 | })))); 712 | }, 713 | !0 714 | ), 715 | n.addEventListener( 716 | "load", 717 | function (e) { 718 | var n; 719 | l || 720 | ((n = (e = e.target).tagName), 721 | e.src, 722 | "IMG" != n && "VIDEO" != n && "AUDIO" != n && "SOURCE" != n) || 723 | ((n = e["wx-id"]) && (T[n] = !1)); 724 | }, 725 | !0 726 | ), 727 | e && (r.wx = r.jWeixin = _), 728 | _ 729 | ); 730 | function k(n, e, i) { 731 | r.WeixinJSBridge 732 | ? WeixinJSBridge.invoke(n, P(e), function (e) { 733 | V(n, e, i); 734 | }) 735 | : C(n, i); 736 | } 737 | function M(n, i, t) { 738 | r.WeixinJSBridge 739 | ? WeixinJSBridge.on(n, function (e) { 740 | t && t.trigger && t.trigger(e), V(n, e, i); 741 | }) 742 | : C(n, t || i); 743 | } 744 | function P(e) { 745 | return ( 746 | ((e = e || {}).appId = h.appId), 747 | (e.verifyAppId = h.appId), 748 | (e.verifySignType = "sha1"), 749 | (e.verifyTimestamp = h.timestamp + ""), 750 | (e.verifyNonceStr = h.nonceStr), 751 | (e.verifySignature = h.signature), 752 | e 753 | ); 754 | } 755 | function x(e) { 756 | return { 757 | timeStamp: e.timestamp + "", 758 | nonceStr: e.nonceStr, 759 | package: e.package, 760 | paySign: e.paySign, 761 | signType: e.signType || "SHA1", 762 | }; 763 | } 764 | function V(e, n, i) { 765 | ("openEnterpriseChat" != e && "openBusinessView" !== e) || 766 | (n.errCode = n.err_code), 767 | delete n.err_code, 768 | delete n.err_desc, 769 | delete n.err_detail; 770 | var t = n.errMsg, 771 | e = 772 | (t || 773 | ((t = n.err_msg), 774 | delete n.err_msg, 775 | (t = (function (e, n) { 776 | var i = c[e]; 777 | i && (e = i); 778 | i = "ok"; 779 | { 780 | var t; 781 | n && 782 | ((t = n.indexOf(":")), 783 | ("access denied" != 784 | (i = (i = (i = 785 | -1 != 786 | (i = 787 | -1 != 788 | (i = 789 | "failed" == 790 | (i = "confirm" == (i = n.substring(t + 1)) ? "ok" : i) 791 | ? "fail" 792 | : i).indexOf("failed_") 793 | ? i.substring(7) 794 | : i).indexOf("fail_") 795 | ? i.substring(5) 796 | : i).replace(/_/g, " ")).toLowerCase()) && 797 | "no permission to execute" != i) || 798 | (i = "permission denied"), 799 | "" == 800 | (i = 801 | "config" == e && "function not exist" == i ? "ok" : i)) && 802 | (i = "fail"); 803 | } 804 | return (n = e + ":" + i); 805 | })(e, t)), 806 | (n.errMsg = t)), 807 | (i = i || {})._complete && (i._complete(n), delete i._complete), 808 | (t = n.errMsg || ""), 809 | h.debug && !i.isInnerInvoke && alert(JSON.stringify(n)), 810 | t.indexOf(":")); 811 | switch (t.substring(e + 1)) { 812 | case "ok": 813 | i.success && i.success(n); 814 | break; 815 | case "cancel": 816 | i.cancel && i.cancel(n); 817 | break; 818 | default: 819 | i.fail && i.fail(n); 820 | } 821 | i.complete && i.complete(n); 822 | } 823 | function A(e) { 824 | if (e) { 825 | for (var n = 0, i = e.length; n < i; ++n) { 826 | var t = e[n], 827 | t = a[t]; 828 | t && (e[n] = t); 829 | } 830 | return e; 831 | } 832 | } 833 | function C(e, n) { 834 | var i; 835 | !h.debug || 836 | (n && n.isInnerInvoke) || 837 | ((i = c[e]) && (e = i), 838 | n && n._complete && delete n._complete, 839 | console.log('"' + e + '",', n || "")); 840 | } 841 | function B(n) { 842 | var i; 843 | o || 844 | s || 845 | h.debug || 846 | p < "6.0.2" || 847 | g.systemType < 0 || 848 | ((i = new Image()), 849 | (g.appId = h.appId), 850 | (g.initTime = m.initEndTime - m.initStartTime), 851 | (g.preVerifyTime = m.preVerifyEndTime - m.preVerifyStartTime), 852 | _.getNetworkType({ 853 | isInnerInvoke: !0, 854 | success: function (e) { 855 | g.networkType = e.networkType; 856 | e = 857 | "https://open.weixin.qq.com/sdk/report?v=" + 858 | g.version + 859 | "&o=" + 860 | g.isPreVerifyOk + 861 | "&s=" + 862 | g.systemType + 863 | "&c=" + 864 | g.clientVersion + 865 | "&a=" + 866 | g.appId + 867 | "&n=" + 868 | g.networkType + 869 | "&i=" + 870 | g.initTime + 871 | "&p=" + 872 | g.preVerifyTime + 873 | "&u=" + 874 | g.url + 875 | "&jsapi_name=" + 876 | (n ? n.jsApiName : ""); 877 | i.src = e; 878 | }, 879 | })); 880 | } 881 | function L() { 882 | return new Date().getTime(); 883 | } 884 | function O(e) { 885 | d && 886 | (r.WeixinJSBridge 887 | ? e() 888 | : n.addEventListener && 889 | n.addEventListener("WeixinJSBridgeReady", e, !1)); 890 | } 891 | }); 892 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "weixin-js-sdk", 3 | "version": "1.6.5", 4 | "license": "MIT", 5 | "main": "index.js", 6 | "description": "微信官方 js-sdk npm 安装版,支持 typescript", 7 | "repository": { 8 | "type": "git", 9 | "url": "https://github.com/yanxi123-com/weixin-js-sdk" 10 | }, 11 | "homepage": "https://yanxi123.com/" 12 | } 13 | --------------------------------------------------------------------------------