├── naming_conventions.md ├── README.md ├── .gitignore ├── package.json ├── LICENSE ├── jweixin-1.0.0.js ├── jsbeautifier.org.js └── jweixin-1.0.0.beautify.js /naming_conventions.md: -------------------------------------------------------------------------------- 1 | Naming Conventions 2 | == 3 | 4 | 1. `call_conf`: when you call the api from some js on some html page 5 | e.g. 6 | var call_conf = { 7 | success: function () { 8 | // blabla 9 | } 10 | }; 11 | wx.getLocation(call_conf); 12 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # wechat-js-sdk-beautify 2 | 3 | 人肉反编译 http://res.wx.qq.com/open/js/jweixin-1.0.0.js 4 | 5 | # with asserts! 6 | 7 | 微信的错误提示简直 (╯°□°)╯︵ ┻━┻ 8 | 9 | 所以在开发环境请使用 jweixin-1.0.0.beautify.js ┬─┬ ノ(°_°ノ) 10 | 11 | # last keepup 12 | 13 | 2017.FEB.03 14 | 15 | # how to 16 | 17 | 1. 运行 `npm run keepup`,会同步最新的 sdk 文件 18 | 2. 然后执行 `git diff jsbeautifier.org.js`,即可查看这期间微信偷偷摸摸改了些什么 19 | 3. 然后到 `jweixin-1.0.0.beautify.js` 把这些 `diff` 更新进去;如果尚未反编译,则直接覆盖;如果已经反编译,则需人肉升级 20 | 21 | # MIT License 22 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | 5 | # Runtime data 6 | pids 7 | *.pid 8 | *.seed 9 | 10 | # Directory for instrumented libs generated by jscoverage/JSCover 11 | lib-cov 12 | 13 | # Coverage directory used by tools like istanbul 14 | coverage 15 | 16 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 17 | .grunt 18 | 19 | # Compiled binary addons (http://nodejs.org/api/addons.html) 20 | build/Release 21 | 22 | # Dependency directory 23 | # Commenting this out is preferred by some people, see 24 | # https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git- 25 | node_modules 26 | 27 | # Users Environment Variables 28 | .lock-wscript 29 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "wechat-js-sdk-beautify", 3 | "version": "1.0.0", 4 | "description": "人肉反编译 http://res.wx.qq.com/open/js/jweixin-1.0.0.js", 5 | "main": "jweixin-1.0.0.beautify.js", 6 | "scripts": { 7 | "keepup": "rm -f jweixin-1.0.0.js && wget http://res.wx.qq.com/open/js/jweixin-1.0.0.js && js-beautify jweixin-1.0.0.js --outfile jsbeautifier.org.js" 8 | }, 9 | "repository": { 10 | "type": "git", 11 | "url": "https://github.com/wechat-developer/wechat-js-sdk-beautify.git" 12 | }, 13 | "author": "hbrls", 14 | "license": "MIT", 15 | "bugs": { 16 | "url": "https://github.com/wechat-developer/wechat-js-sdk-beautify/issues" 17 | }, 18 | "homepage": "https://github.com/wechat-developer/wechat-js-sdk-beautify", 19 | "devDependencies": { 20 | "js-beautify": "1.5.10" 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 Albert 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 | 23 | -------------------------------------------------------------------------------- /jweixin-1.0.0.js: -------------------------------------------------------------------------------- 1 | ((e,i)=>{"function"==typeof define&&(define.amd||define.cmd)?define(function(){return i(e)}):i(e,!0)})(this,function(r,e){var c,a,i,n,t,s,d,o,l,p,u,f,m,g,h,y,S,_,w,I;if(!r.jWeixin)return c={config:"preVerifyJSAPI",onMenuShareTimeline:"menu:share:timeline",onMenuShareAppMessage:"menu:share:appmessage",onMenuShareQQ:"menu:share:qq",onMenuShareWeibo:"menu:share:weiboApp",onMenuShareQZone:"menu:share:QZone",previewImage:"imagePreview",getLocation:"geoLocation",openProductSpecificView:"openProductViewWithPid",addCard:"batchAddCard",openCard:"batchViewCard",chooseWXPay:"getBrandWCPayRequest"},a=(()=>{var e,i={};for(e in c)i[c[e]]=e;return i})(),n=(i=r.document).title,t=navigator.userAgent.toLowerCase(),f=navigator.platform.toLowerCase(),s=!(!f.match("mac")&&!f.match("win")),d=-1!=t.indexOf("wxdebugger"),o=-1!=t.indexOf("micromessenger"),l=-1!=t.indexOf("android"),p=-1!=t.indexOf("iphone")||-1!=t.indexOf("ipad"),u=(f=t.match(/micromessenger\/(\d+\.\d+\.\d+)/)||t.match(/micromessenger\/(\d+\.\d+)/))?f[1]:"",g=m=!1,h={initStartTime:b(),initEndTime:0,preVerifyStartTime:0,preVerifyEndTime:0},y={version:1,appId:"",initTime:0,preVerifyTime:0,networkType:"",preVerifyState:1,systemType:p?1:l?2:-1,clientVersion:u,url:encodeURIComponent(location.href)},S={},_={_completes:[]},w={state:0,data:{}},A(function(){h.initEndTime=b()}),I={config:function(e){x("config",S=e);var o=!1!==S.check;A(function(){if(o)T(c.config,{verifyJsApiList:V(S.jsApiList)},(_._complete=function(e){h.preVerifyEndTime=b(),w.state=1,w.data=e},_.success=function(e){y.preVerifyState=0},_.fail=function(e){_._fail?_._fail(e):w.state=-1},(t=_._completes).push(function(){0==y.preVerifyState||s||d||S.debug||u<"6.0.2"||y.systemType<0||m||(m=!0,y.appId=S.appId,y.initTime=h.initEndTime-h.initStartTime,y.preVerifyTime=h.preVerifyEndTime-h.preVerifyStartTime,I.getNetworkType({isInnerInvoke:!0,success:function(e){y.networkType=e.networkType;e="http://open.weixin.qq.com/sdk/report?v="+y.version+"&o="+y.preVerifyState+"&s="+y.systemType+"&c="+y.clientVersion+"&a="+y.appId+"&n="+y.networkType+"&i="+y.initTime+"&p="+y.preVerifyTime+"&u="+y.url;(new Image).src=e}}))}),_.complete=function(e){for(var i=0,n=t.length;i{var n,t=a[e];return t&&(e=t),t="ok",i&&(n=i.indexOf(":"),"access denied"!=(t=(t=(t=-1!=(t=-1!=(t="failed"==(t="confirm"==(t=i.substring(n+1))?"ok":t)?"fail":t).indexOf("failed_")?t.substring(7):t).indexOf("fail_")?t.substring(5):t).replace(/_/g," ")).toLowerCase())&&"no permission to execute"!=t||(t="permission denied"),""==(t="config"==e&&"function not exist"==t?"ok":t))&&(t="fail"),i=e+":"+t})(e,t),i.errMsg=t),(n=n||{})._complete&&(n._complete(i),delete n._complete),t=i.errMsg||"",S.debug&&!n.isInnerInvoke&&alert(JSON.stringify(i)),t.indexOf(":"));switch(t.substring(e+1)){case"ok":n.success&&n.success(i);break;case"cancel":n.cancel&&n.cancel(i);break;default:n.fail&&n.fail(i)}n.complete&&n.complete(i)}function V(e){if(e){for(var i=0,n=e.length;i { 2 | "function" == typeof define && (define.amd || define.cmd) ? define(function() { 3 | return i(e) 4 | }) : i(e, !0) 5 | })(this, function(r, e) { 6 | var c, a, i, n, t, s, d, o, l, p, u, f, m, g, h, y, S, _, w, I; 7 | if (!r.jWeixin) return c = { 8 | config: "preVerifyJSAPI", 9 | onMenuShareTimeline: "menu:share:timeline", 10 | onMenuShareAppMessage: "menu:share:appmessage", 11 | onMenuShareQQ: "menu:share:qq", 12 | onMenuShareWeibo: "menu:share:weiboApp", 13 | onMenuShareQZone: "menu:share:QZone", 14 | previewImage: "imagePreview", 15 | getLocation: "geoLocation", 16 | openProductSpecificView: "openProductViewWithPid", 17 | addCard: "batchAddCard", 18 | openCard: "batchViewCard", 19 | chooseWXPay: "getBrandWCPayRequest" 20 | }, a = (() => { 21 | var e, i = {}; 22 | for (e in c) i[c[e]] = e; 23 | return i 24 | })(), n = (i = r.document).title, t = navigator.userAgent.toLowerCase(), f = navigator.platform.toLowerCase(), s = !(!f.match("mac") && !f.match("win")), d = -1 != t.indexOf("wxdebugger"), o = -1 != t.indexOf("micromessenger"), l = -1 != t.indexOf("android"), p = -1 != t.indexOf("iphone") || -1 != t.indexOf("ipad"), u = (f = t.match(/micromessenger\/(\d+\.\d+\.\d+)/) || t.match(/micromessenger\/(\d+\.\d+)/)) ? f[1] : "", g = m = !1, h = { 25 | initStartTime: b(), 26 | initEndTime: 0, 27 | preVerifyStartTime: 0, 28 | preVerifyEndTime: 0 29 | }, y = { 30 | version: 1, 31 | appId: "", 32 | initTime: 0, 33 | preVerifyTime: 0, 34 | networkType: "", 35 | preVerifyState: 1, 36 | systemType: p ? 1 : l ? 2 : -1, 37 | clientVersion: u, 38 | url: encodeURIComponent(location.href) 39 | }, S = {}, _ = { 40 | _completes: [] 41 | }, w = { 42 | state: 0, 43 | data: {} 44 | }, A(function() { 45 | h.initEndTime = b() 46 | }), I = { 47 | config: function(e) { 48 | x("config", S = e); 49 | var o = !1 !== S.check; 50 | A(function() { 51 | if (o) T(c.config, { 52 | verifyJsApiList: V(S.jsApiList) 53 | }, (_._complete = function(e) { 54 | h.preVerifyEndTime = b(), w.state = 1, w.data = e 55 | }, _.success = function(e) { 56 | y.preVerifyState = 0 57 | }, _.fail = function(e) { 58 | _._fail ? _._fail(e) : w.state = -1 59 | }, (t = _._completes).push(function() { 60 | 0 == y.preVerifyState || s || d || S.debug || u < "6.0.2" || y.systemType < 0 || m || (m = !0, y.appId = S.appId, y.initTime = h.initEndTime - h.initStartTime, y.preVerifyTime = h.preVerifyEndTime - h.preVerifyStartTime, I.getNetworkType({ 61 | isInnerInvoke: !0, 62 | success: function(e) { 63 | y.networkType = e.networkType; 64 | e = "http://open.weixin.qq.com/sdk/report?v=" + y.version + "&o=" + y.preVerifyState + "&s=" + y.systemType + "&c=" + y.clientVersion + "&a=" + y.appId + "&n=" + y.networkType + "&i=" + y.initTime + "&p=" + y.preVerifyTime + "&u=" + y.url; 65 | (new Image).src = e 66 | } 67 | })) 68 | }), _.complete = function(e) { 69 | for (var i = 0, n = t.length; i < n; ++i) t[i](); 70 | _._completes = [] 71 | }, _)), h.preVerifyStartTime = b(); 72 | else { 73 | w.state = 1; 74 | for (var e = _._completes, i = 0, n = e.length; i < n; ++i) e[i](); 75 | _._completes = [] 76 | } 77 | var t 78 | }), S.beta && !I.invoke && (I.invoke = function(e, i, n) { 79 | r.WeixinJSBridge && WeixinJSBridge.invoke(e, k(i), n) 80 | }, I.on = function(e, i) { 81 | r.WeixinJSBridge && WeixinJSBridge.on(e, i) 82 | }) 83 | }, 84 | ready: function(e) { 85 | (0 != w.state || (_._completes.push(e), !o && S.debug)) && e() 86 | }, 87 | error: function(e) { 88 | u < "6.0.2" || g || (g = !0, -1 == w.state ? e(w.data) : _._fail = e) 89 | }, 90 | checkJsApi: function(e) { 91 | T("checkJsApi", { 92 | jsApiList: V(e.jsApiList) 93 | }, (e._complete = function(e) { 94 | l && (n = e.checkResult) && (e.checkResult = JSON.parse(n)); 95 | var i, n = e, 96 | t = n.checkResult; 97 | for (i in t) { 98 | var o = a[i]; 99 | o && (t[o] = t[i], delete t[i]) 100 | } 101 | }, e)) 102 | }, 103 | onMenuShareTimeline: function(e) { 104 | v(c.onMenuShareTimeline, { 105 | complete: function() { 106 | T("shareTimeline", { 107 | title: e.title || n, 108 | desc: e.title || n, 109 | img_url: e.imgUrl || "", 110 | link: e.link || location.href, 111 | type: e.type || "link", 112 | data_url: e.dataUrl || "" 113 | }, e) 114 | } 115 | }, e) 116 | }, 117 | onMenuShareAppMessage: function(i) { 118 | v(c.onMenuShareAppMessage, { 119 | complete: function(e) { 120 | "favorite" === e.scene ? T("sendAppMessage", { 121 | title: i.title || n, 122 | desc: i.desc || "", 123 | link: i.link || location.href, 124 | img_url: i.imgUrl || "", 125 | type: i.type || "link", 126 | data_url: i.dataUrl || "" 127 | }) : T("sendAppMessage", { 128 | title: i.title || n, 129 | desc: i.desc || "", 130 | link: i.link || location.href, 131 | img_url: i.imgUrl || "", 132 | type: i.type || "link", 133 | data_url: i.dataUrl || "" 134 | }, i) 135 | } 136 | }, i) 137 | }, 138 | onMenuShareQQ: function(e) { 139 | v(c.onMenuShareQQ, { 140 | complete: function() { 141 | T("shareQQ", { 142 | title: e.title || n, 143 | desc: e.desc || "", 144 | img_url: e.imgUrl || "", 145 | link: e.link || location.href 146 | }, e) 147 | } 148 | }, e) 149 | }, 150 | onMenuShareWeibo: function(e) { 151 | v(c.onMenuShareWeibo, { 152 | complete: function() { 153 | T("shareWeiboApp", { 154 | title: e.title || n, 155 | desc: e.desc || "", 156 | img_url: e.imgUrl || "", 157 | link: e.link || location.href 158 | }, e) 159 | } 160 | }, e) 161 | }, 162 | onMenuShareQZone: function(e) { 163 | v(c.onMenuShareQZone, { 164 | complete: function() { 165 | T("shareQZone", { 166 | title: e.title || n, 167 | desc: e.desc || "", 168 | img_url: e.imgUrl || "", 169 | link: e.link || location.href 170 | }, e) 171 | } 172 | }, e) 173 | }, 174 | startRecord: function(e) { 175 | T("startRecord", {}, e) 176 | }, 177 | stopRecord: function(e) { 178 | T("stopRecord", {}, e) 179 | }, 180 | onVoiceRecordEnd: function(e) { 181 | v("onVoiceRecordEnd", e) 182 | }, 183 | playVoice: function(e) { 184 | T("playVoice", { 185 | localId: e.localId 186 | }, e) 187 | }, 188 | pauseVoice: function(e) { 189 | T("pauseVoice", { 190 | localId: e.localId 191 | }, e) 192 | }, 193 | stopVoice: function(e) { 194 | T("stopVoice", { 195 | localId: e.localId 196 | }, e) 197 | }, 198 | onVoicePlayEnd: function(e) { 199 | v("onVoicePlayEnd", e) 200 | }, 201 | uploadVoice: function(e) { 202 | T("uploadVoice", { 203 | localId: e.localId, 204 | isShowProgressTips: 0 == e.isShowProgressTips ? 0 : 1 205 | }, e) 206 | }, 207 | downloadVoice: function(e) { 208 | T("downloadVoice", { 209 | serverId: e.serverId, 210 | isShowProgressTips: 0 == e.isShowProgressTips ? 0 : 1 211 | }, e) 212 | }, 213 | translateVoice: function(e) { 214 | T("translateVoice", { 215 | localId: e.localId, 216 | isShowProgressTips: 0 == e.isShowProgressTips ? 0 : 1 217 | }, e) 218 | }, 219 | chooseImage: function(e) { 220 | T("chooseImage", { 221 | scene: "1|2", 222 | count: e.count || 9, 223 | sizeType: e.sizeType || ["original", "compressed"], 224 | sourceType: e.sourceType || ["album", "camera"] 225 | }, (e._complete = function(e) { 226 | if (l) { 227 | var i = e.localIds; 228 | try { 229 | i && (e.localIds = JSON.parse(i)) 230 | } catch (e) {} 231 | } 232 | }, e)) 233 | }, 234 | previewImage: function(e) { 235 | T(c.previewImage, { 236 | current: e.current, 237 | urls: e.urls 238 | }, e) 239 | }, 240 | uploadImage: function(e) { 241 | T("uploadImage", { 242 | localId: e.localId, 243 | isShowProgressTips: 0 == e.isShowProgressTips ? 0 : 1 244 | }, e) 245 | }, 246 | downloadImage: function(e) { 247 | T("downloadImage", { 248 | serverId: e.serverId, 249 | isShowProgressTips: 0 == e.isShowProgressTips ? 0 : 1 250 | }, e) 251 | }, 252 | getNetworkType: function(e) { 253 | T("getNetworkType", {}, (e._complete = function(e) { 254 | var i = e, 255 | e = i.errMsg, 256 | n = (i.errMsg = "getNetworkType:ok", i.subtype); 257 | if (delete i.subtype, n) i.networkType = n; 258 | else { 259 | var n = e.indexOf(":"), 260 | t = e.substring(n + 1); 261 | switch (t) { 262 | case "wifi": 263 | case "edge": 264 | case "wwan": 265 | i.networkType = t; 266 | break; 267 | default: 268 | i.errMsg = "getNetworkType:fail" 269 | } 270 | } 271 | }, e)) 272 | }, 273 | openLocation: function(e) { 274 | T("openLocation", { 275 | latitude: e.latitude, 276 | longitude: e.longitude, 277 | name: e.name || "", 278 | address: e.address || "", 279 | scale: e.scale || 28, 280 | infoUrl: e.infoUrl || "" 281 | }, e) 282 | }, 283 | getLocation: function(e) { 284 | e = e || {}, T(c.getLocation, { 285 | type: e.type || "wgs84" 286 | }, (e._complete = function(e) { 287 | delete e.type 288 | }, e)) 289 | }, 290 | hideOptionMenu: function(e) { 291 | T("hideOptionMenu", {}, e) 292 | }, 293 | showOptionMenu: function(e) { 294 | T("showOptionMenu", {}, e) 295 | }, 296 | closeWindow: function(e) { 297 | T("closeWindow", {}, e = e || {}) 298 | }, 299 | hideMenuItems: function(e) { 300 | T("hideMenuItems", { 301 | menuList: e.menuList 302 | }, e) 303 | }, 304 | showMenuItems: function(e) { 305 | T("showMenuItems", { 306 | menuList: e.menuList 307 | }, e) 308 | }, 309 | hideAllNonBaseMenuItem: function(e) { 310 | T("hideAllNonBaseMenuItem", {}, e) 311 | }, 312 | showAllNonBaseMenuItem: function(e) { 313 | T("showAllNonBaseMenuItem", {}, e) 314 | }, 315 | scanQRCode: function(e) { 316 | T("scanQRCode", { 317 | needResult: (e = e || {}).needResult || 0, 318 | scanType: e.scanType || ["qrCode", "barCode"] 319 | }, (e._complete = function(e) { 320 | var i; 321 | p && (i = e.resultStr) && (i = JSON.parse(i), e.resultStr = i && i.scan_code && i.scan_code.scan_result) 322 | }, e)) 323 | }, 324 | openProductSpecificView: function(e) { 325 | T(c.openProductSpecificView, { 326 | pid: e.productId, 327 | view_type: e.viewType || 0, 328 | ext_info: e.extInfo 329 | }, e) 330 | }, 331 | addCard: function(e) { 332 | for (var i = e.cardList, n = [], t = 0, o = i.length; t < o; ++t) { 333 | var r = i[t], 334 | r = { 335 | card_id: r.cardId, 336 | card_ext: r.cardExt 337 | }; 338 | n.push(r) 339 | } 340 | T(c.addCard, { 341 | card_list: n 342 | }, (e._complete = function(e) { 343 | if (i = e.card_list) { 344 | for (var i, n = 0, t = (i = JSON.parse(i)).length; n < t; ++n) { 345 | var o = i[n]; 346 | o.cardId = o.card_id, o.cardExt = o.card_ext, o.isSuccess = !!o.is_succ, delete o.card_id, delete o.card_ext, delete o.is_succ 347 | } 348 | e.cardList = i, delete e.card_list 349 | } 350 | }, e)) 351 | }, 352 | chooseCard: function(e) { 353 | T("chooseCard", { 354 | app_id: S.appId, 355 | location_id: e.shopId || "", 356 | sign_type: e.signType || "SHA1", 357 | card_id: e.cardId || "", 358 | card_type: e.cardType || "", 359 | card_sign: e.cardSign, 360 | time_stamp: e.timestamp + "", 361 | nonce_str: e.nonceStr 362 | }, (e._complete = function(e) { 363 | e.cardList = e.choose_card_info, delete e.choose_card_info 364 | }, e)) 365 | }, 366 | openCard: function(e) { 367 | for (var i = e.cardList, n = [], t = 0, o = i.length; t < o; ++t) { 368 | var r = i[t], 369 | r = { 370 | card_id: r.cardId, 371 | code: r.code 372 | }; 373 | n.push(r) 374 | } 375 | T(c.openCard, { 376 | card_list: n 377 | }, e) 378 | }, 379 | chooseWXPay: function(e) { 380 | T(c.chooseWXPay, { 381 | timeStamp: e.timestamp + "", 382 | nonceStr: e.nonceStr, 383 | package: e.package, 384 | paySign: e.paySign, 385 | signType: e.signType || "SHA1" 386 | }, e) 387 | } 388 | }, e && (r.wx = r.jWeixin = I), I; 389 | 390 | function T(i, e, n) { 391 | r.WeixinJSBridge ? WeixinJSBridge.invoke(i, k(e), function(e) { 392 | M(i, e, n) 393 | }) : x(i, n) 394 | } 395 | 396 | function v(i, n, t) { 397 | r.WeixinJSBridge ? WeixinJSBridge.on(i, function(e) { 398 | t && t.trigger && t.trigger(e), M(i, e, n) 399 | }) : x(i, t || n) 400 | } 401 | 402 | function k(e) { 403 | return (e = e || {}).appId = S.appId, e.verifyAppId = S.appId, e.verifySignType = "sha1", e.verifyTimestamp = S.timestamp + "", e.verifyNonceStr = S.nonceStr, e.verifySignature = S.signature, e 404 | } 405 | 406 | function M(e, i, n) { 407 | delete i.err_code, delete i.err_desc, delete i.err_detail; 408 | var t = i.errMsg, 409 | e = (t || (t = i.err_msg, delete i.err_msg, t = ((e, i) => { 410 | var n, t = a[e]; 411 | return t && (e = t), t = "ok", i && (n = i.indexOf(":"), "access denied" != (t = (t = (t = -1 != (t = -1 != (t = "failed" == (t = "confirm" == (t = i.substring(n + 1)) ? "ok" : t) ? "fail" : t).indexOf("failed_") ? t.substring(7) : t).indexOf("fail_") ? t.substring(5) : t).replace(/_/g, " ")).toLowerCase()) && "no permission to execute" != t || (t = "permission denied"), "" == (t = "config" == e && "function not exist" == t ? "ok" : t)) && (t = "fail"), i = e + ":" + t 412 | })(e, t), i.errMsg = t), (n = n || {})._complete && (n._complete(i), delete n._complete), t = i.errMsg || "", S.debug && !n.isInnerInvoke && alert(JSON.stringify(i)), t.indexOf(":")); 413 | switch (t.substring(e + 1)) { 414 | case "ok": 415 | n.success && n.success(i); 416 | break; 417 | case "cancel": 418 | n.cancel && n.cancel(i); 419 | break; 420 | default: 421 | n.fail && n.fail(i) 422 | } 423 | n.complete && n.complete(i) 424 | } 425 | 426 | function V(e) { 427 | if (e) { 428 | for (var i = 0, n = e.length; i < n; ++i) { 429 | var t = e[i], 430 | t = c[t]; 431 | t && (e[i] = t) 432 | } 433 | return e 434 | } 435 | } 436 | 437 | function x(e, i) { 438 | var n; 439 | !S.debug || i && i.isInnerInvoke || ((n = a[e]) && (e = n), i && i._complete && delete i._complete, console.log('"' + e + '",', i || "")) 440 | } 441 | 442 | function b() { 443 | return (new Date).getTime() 444 | } 445 | 446 | function A(e) { 447 | o && (r.WeixinJSBridge ? e() : i.addEventListener && i.addEventListener("WeixinJSBridgeReady", e, !1)) 448 | } 449 | }); -------------------------------------------------------------------------------- /jweixin-1.0.0.beautify.js: -------------------------------------------------------------------------------- 1 | !function wrap(the_global, initialize) { 2 | if (typeof define === 'function' && (define.amd || define.cmd)) { 3 | define(function () { 4 | return initialize(the_global); 5 | }) 6 | } else { 7 | initialize(the_global, true); 8 | } 9 | }(this, function(r, e) { 10 | if (!r.jWeixin) { 11 | var API_NAMES = { // var c 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 | }; 25 | 26 | var API_NAMES_REVERSE = (function() { // var a 27 | var names = {}; 28 | for (var key in API_NAMES) { 29 | names[API_NAMES[key]] = key; 30 | } 31 | return names; 32 | }()); 33 | 34 | var i = r.document; 35 | var n = i.title; 36 | 37 | var user_agent = navigator.userAgent.toLowerCase(); // var t 38 | var f = navigator.platform.toLowerCase(); 39 | var s = !(!f.match("mac") && !f.match("win")); 40 | var d = -1 != t.indexOf("wxdebugger"); 41 | var IS_MICRO_MESSENGER = -1 != user_agent.indexOf("micromessenger"); // var o 42 | var IS_ANDROID = -1 != user_agent.indexOf("android"); // var l 43 | var IS_IOS = -1 != user_agent.indexOf("iphone") || -1 != user_agent.indexOf("ipad"); // var p 44 | 45 | var client_version = function() { // var u 46 | var a = user_agent.match(/micromessenger\/(\d+\.\d+\.\d+)/) || user_agent.match(/micromessenger\/(\d+\.\d+)/); 47 | return a ? a[1] : "" 48 | }(); 49 | 50 | var g = false; 51 | var m = false; 52 | 53 | var h = { 54 | initStartTime: now(), 55 | initEndTime: 0, 56 | preVerifyStartTime: 0, 57 | preVerifyEndTime: 0 58 | }; 59 | 60 | var STATS_INFO = { // var y 61 | version: 1, 62 | appId: "", 63 | initTime: 0, 64 | preVerifyTime: 0, 65 | networkType: "", 66 | preVerifyState: 1, 67 | systemType: IS_IOS ? 1 : IS_ANDROID ? 2 : -1, 68 | clientVersion: client_version, 69 | url: encodeURIComponent(location.href) 70 | }; 71 | 72 | var CONFIG_COPY = {}; // var S 73 | 74 | var _ = { 75 | _completes: [] 76 | }; 77 | 78 | var w = { 79 | state: 0, 80 | data: {} 81 | }; 82 | 83 | A(function() { 84 | h.initEndTime = now() 85 | }); 86 | 87 | var I = { 88 | config: function(e) { 89 | x("config", CONFIG_COPY = e); 90 | var o = !1 !== S.check; 91 | A(function() { 92 | if (o) T(c.config, { 93 | verifyJsApiList: V(S.jsApiList) 94 | }, (_._complete = function(e) { 95 | h.preVerifyEndTime = b(), w.state = 1, w.data = e 96 | }, _.success = function(e) { 97 | y.preVerifyState = 0 98 | }, _.fail = function(e) { 99 | _._fail ? _._fail(e) : w.state = -1 100 | }, (t = _._completes).push(function() { 101 | 0 == y.preVerifyState || s || d || S.debug || u < "6.0.2" || y.systemType < 0 || m || (m = !0, y.appId = S.appId, y.initTime = h.initEndTime - h.initStartTime, y.preVerifyTime = h.preVerifyEndTime - h.preVerifyStartTime, I.getNetworkType({ 102 | isInnerInvoke: !0, 103 | success: function(e) { 104 | y.networkType = e.networkType; 105 | e = "http://open.weixin.qq.com/sdk/report?v=" + y.version + "&o=" + y.preVerifyState + "&s=" + y.systemType + "&c=" + y.clientVersion + "&a=" + y.appId + "&n=" + y.networkType + "&i=" + y.initTime + "&p=" + y.preVerifyTime + "&u=" + y.url; 106 | (new Image).src = e 107 | } 108 | })) 109 | }), _.complete = function(e) { 110 | for (var i = 0, n = t.length; i < n; ++i) t[i](); 111 | _._completes = [] 112 | }, _)), h.preVerifyStartTime = b(); 113 | else { 114 | w.state = 1; 115 | for (var e = _._completes, i = 0, n = e.length; i < n; ++i) e[i](); 116 | _._completes = [] 117 | } 118 | var t 119 | }), CONFIG_COPY.beta && !I.invoke && (I.invoke = function(e, i, n) { 120 | r.WeixinJSBridge && WeixinJSBridge.invoke(e, k(i), n) 121 | }, I.on = function(e, i) { 122 | r.WeixinJSBridge && WeixinJSBridge.on(e, i) 123 | }) 124 | }, 125 | ready: function(e) { 126 | (0 != w.state || (_._completes.push(e), !o && S.debug)) && e() 127 | }, 128 | error: function(e) { 129 | u < "6.0.2" || g || (g = !0, -1 == w.state ? e(w.data) : _._fail = e) 130 | }, 131 | checkJsApi: function(e) { 132 | T("checkJsApi", { 133 | jsApiList: V(e.jsApiList) 134 | }, (e._complete = function(e) { 135 | l && (n = e.checkResult) && (e.checkResult = JSON.parse(n)); 136 | var i, n = e, 137 | t = n.checkResult; 138 | for (i in t) { 139 | var o = a[i]; 140 | o && (t[o] = t[i], delete t[i]) 141 | } 142 | }, e)) 143 | }, 144 | onMenuShareTimeline: function(e) { 145 | v(c.onMenuShareTimeline, { 146 | complete: function() { 147 | T("shareTimeline", { 148 | title: e.title || n, 149 | desc: e.title || n, 150 | img_url: e.imgUrl || "", 151 | link: e.link || location.href, 152 | type: e.type || "link", 153 | data_url: e.dataUrl || "" 154 | }, e) 155 | } 156 | }, e) 157 | }, 158 | onMenuShareAppMessage: function(i) { 159 | v(c.onMenuShareAppMessage, { 160 | complete: function(e) { 161 | "favorite" === e.scene ? T("sendAppMessage", { 162 | title: i.title || n, 163 | desc: i.desc || "", 164 | link: i.link || location.href, 165 | img_url: i.imgUrl || "", 166 | type: i.type || "link", 167 | data_url: i.dataUrl || "" 168 | }) : T("sendAppMessage", { 169 | title: i.title || n, 170 | desc: i.desc || "", 171 | link: i.link || location.href, 172 | img_url: i.imgUrl || "", 173 | type: i.type || "link", 174 | data_url: i.dataUrl || "" 175 | }, i) 176 | } 177 | }, i) 178 | }, 179 | onMenuShareQQ: function(e) { 180 | v(c.onMenuShareQQ, { 181 | complete: function() { 182 | T("shareQQ", { 183 | title: e.title || n, 184 | desc: e.desc || "", 185 | img_url: e.imgUrl || "", 186 | link: e.link || location.href 187 | }, e) 188 | } 189 | }, e) 190 | }, 191 | onMenuShareWeibo: function(e) { 192 | v(c.onMenuShareWeibo, { 193 | complete: function() { 194 | T("shareWeiboApp", { 195 | title: e.title || n, 196 | desc: e.desc || "", 197 | img_url: e.imgUrl || "", 198 | link: e.link || location.href 199 | }, e) 200 | } 201 | }, e) 202 | }, 203 | onMenuShareQZone: function(e) { 204 | v(c.onMenuShareQZone, { 205 | complete: function() { 206 | T("shareQZone", { 207 | title: e.title || n, 208 | desc: e.desc || "", 209 | img_url: e.imgUrl || "", 210 | link: e.link || location.href 211 | }, e) 212 | } 213 | }, e) 214 | }, 215 | startRecord: function(e) { 216 | T("startRecord", {}, e) 217 | }, 218 | stopRecord: function(e) { 219 | T("stopRecord", {}, e) 220 | }, 221 | onVoiceRecordEnd: function(e) { 222 | v("onVoiceRecordEnd", e) 223 | }, 224 | playVoice: function(e) { 225 | T("playVoice", { 226 | localId: e.localId 227 | }, e) 228 | }, 229 | pauseVoice: function(e) { 230 | T("pauseVoice", { 231 | localId: e.localId 232 | }, e) 233 | }, 234 | stopVoice: function(e) { 235 | T("stopVoice", { 236 | localId: e.localId 237 | }, e) 238 | }, 239 | onVoicePlayEnd: function(e) { 240 | v("onVoicePlayEnd", e) 241 | }, 242 | uploadVoice: function(e) { 243 | T("uploadVoice", { 244 | localId: e.localId, 245 | isShowProgressTips: 0 == e.isShowProgressTips ? 0 : 1 246 | }, e) 247 | }, 248 | downloadVoice: function(e) { 249 | T("downloadVoice", { 250 | serverId: e.serverId, 251 | isShowProgressTips: 0 == e.isShowProgressTips ? 0 : 1 252 | }, e) 253 | }, 254 | translateVoice: function(e) { 255 | T("translateVoice", { 256 | localId: e.localId, 257 | isShowProgressTips: 0 == e.isShowProgressTips ? 0 : 1 258 | }, e) 259 | }, 260 | chooseImage: function(e) { 261 | T("chooseImage", { 262 | scene: "1|2", 263 | count: e.count || 9, 264 | sizeType: e.sizeType || ["original", "compressed"], 265 | sourceType: e.sourceType || ["album", "camera"] 266 | }, (e._complete = function(e) { 267 | if (l) { 268 | var i = e.localIds; 269 | try { 270 | i && (e.localIds = JSON.parse(i)) 271 | } catch (e) {} 272 | } 273 | }, e)) 274 | }, 275 | previewImage: function(e) { 276 | T(c.previewImage, { 277 | current: e.current, 278 | urls: e.urls 279 | }, e) 280 | }, 281 | uploadImage: function(e) { 282 | T("uploadImage", { 283 | localId: e.localId, 284 | isShowProgressTips: 0 == e.isShowProgressTips ? 0 : 1 285 | }, e) 286 | }, 287 | downloadImage: function(e) { 288 | T("downloadImage", { 289 | serverId: e.serverId, 290 | isShowProgressTips: 0 == e.isShowProgressTips ? 0 : 1 291 | }, e) 292 | }, 293 | getNetworkType: function(e) { 294 | T("getNetworkType", {}, (e._complete = function(e) { 295 | var i = e, 296 | e = i.errMsg, 297 | n = (i.errMsg = "getNetworkType:ok", i.subtype); 298 | if (delete i.subtype, n) i.networkType = n; 299 | else { 300 | var n = e.indexOf(":"), 301 | t = e.substring(n + 1); 302 | switch (t) { 303 | case "wifi": 304 | case "edge": 305 | case "wwan": 306 | i.networkType = t; 307 | break; 308 | default: 309 | i.errMsg = "getNetworkType:fail" 310 | } 311 | } 312 | }, e)) 313 | }, 314 | openLocation: function(e) { 315 | T("openLocation", { 316 | latitude: e.latitude, 317 | longitude: e.longitude, 318 | name: e.name || "", 319 | address: e.address || "", 320 | scale: e.scale || 28, 321 | infoUrl: e.infoUrl || "" 322 | }, e) 323 | }, 324 | getLocation: function(e) { 325 | e = e || {}, T(c.getLocation, { 326 | type: e.type || "wgs84" 327 | }, (e._complete = function(e) { 328 | delete e.type 329 | }, e)) 330 | }, 331 | hideOptionMenu: function(e) { 332 | T("hideOptionMenu", {}, e) 333 | }, 334 | showOptionMenu: function(e) { 335 | T("showOptionMenu", {}, e) 336 | }, 337 | closeWindow: function(e) { 338 | T("closeWindow", {}, e = e || {}) 339 | }, 340 | hideMenuItems: function(e) { 341 | T("hideMenuItems", { 342 | menuList: e.menuList 343 | }, e) 344 | }, 345 | showMenuItems: function(e) { 346 | T("showMenuItems", { 347 | menuList: e.menuList 348 | }, e) 349 | }, 350 | hideAllNonBaseMenuItem: function(e) { 351 | T("hideAllNonBaseMenuItem", {}, e) 352 | }, 353 | showAllNonBaseMenuItem: function(e) { 354 | T("showAllNonBaseMenuItem", {}, e) 355 | }, 356 | scanQRCode: function(e) { 357 | T("scanQRCode", { 358 | needResult: (e = e || {}).needResult || 0, 359 | scanType: e.scanType || ["qrCode", "barCode"] 360 | }, (e._complete = function(e) { 361 | var i; 362 | p && (i = e.resultStr) && (i = JSON.parse(i), e.resultStr = i && i.scan_code && i.scan_code.scan_result) 363 | }, e)) 364 | }, 365 | openProductSpecificView: function(e) { 366 | T(c.openProductSpecificView, { 367 | pid: e.productId, 368 | view_type: e.viewType || 0, 369 | ext_info: e.extInfo 370 | }, e) 371 | }, 372 | addCard: function(e) { 373 | for (var i = e.cardList, n = [], t = 0, o = i.length; t < o; ++t) { 374 | var r = i[t], 375 | r = { 376 | card_id: r.cardId, 377 | card_ext: r.cardExt 378 | }; 379 | n.push(r) 380 | } 381 | T(c.addCard, { 382 | card_list: n 383 | }, (e._complete = function(e) { 384 | if (i = e.card_list) { 385 | for (var i, n = 0, t = (i = JSON.parse(i)).length; n < t; ++n) { 386 | var o = i[n]; 387 | o.cardId = o.card_id, o.cardExt = o.card_ext, o.isSuccess = !!o.is_succ, delete o.card_id, delete o.card_ext, delete o.is_succ 388 | } 389 | e.cardList = i, delete e.card_list 390 | } 391 | }, e)) 392 | }, 393 | chooseCard: function(e) { 394 | T("chooseCard", { 395 | app_id: S.appId, 396 | location_id: e.shopId || "", 397 | sign_type: e.signType || "SHA1", 398 | card_id: e.cardId || "", 399 | card_type: e.cardType || "", 400 | card_sign: e.cardSign, 401 | time_stamp: e.timestamp + "", 402 | nonce_str: e.nonceStr 403 | }, (e._complete = function(e) { 404 | e.cardList = e.choose_card_info, delete e.choose_card_info 405 | }, e)) 406 | }, 407 | openCard: function(e) { 408 | for (var i = e.cardList, n = [], t = 0, o = i.length; t < o; ++t) { 409 | var r = i[t], 410 | r = { 411 | card_id: r.cardId, 412 | code: r.code 413 | }; 414 | n.push(r) 415 | } 416 | T(c.openCard, { 417 | card_list: n 418 | }, e) 419 | }, 420 | chooseWXPay: function(e) { 421 | T(c.chooseWXPay, { 422 | timeStamp: e.timestamp + "", 423 | nonceStr: e.nonceStr, 424 | package: e.package, 425 | paySign: e.paySign, 426 | signType: e.signType || "SHA1" 427 | }, e) 428 | } 429 | }; 430 | 431 | e && (r.wx = r.jWeixin = I); 432 | 433 | return I; 434 | } 435 | 436 | function T(api_name, conf, conf_of_callback) { 437 | r.WeixinJSBridge ? WeixinJSBridge.invoke(api_name, e(conf), function(result) { 438 | M(api_name, result, conf_of_callback) 439 | }) : x(api_name, conf_of_callback) 440 | } 441 | 442 | function v(i, n, t) { 443 | r.WeixinJSBridge ? WeixinJSBridge.on(i, function(e) { 444 | t && t.trigger && t.trigger(e), M(i, e, n) 445 | }) : x(i, t || n) 446 | } 447 | 448 | function k(e) { 449 | return (e = e || {}).appId = S.appId, e.verifyAppId = S.appId, e.verifySignType = "sha1", e.verifyTimestamp = S.timestamp + "", e.verifyNonceStr = S.nonceStr, e.verifySignature = S.signature, e 450 | } 451 | 452 | function M(e, i, n) { 453 | delete i.err_code, delete i.err_desc, delete i.err_detail; 454 | var t = i.errMsg, 455 | e = (t || (t = i.err_msg, delete i.err_msg, t = ((e, i) => { 456 | var n, t = a[e]; 457 | return t && (e = t), t = "ok", i && (n = i.indexOf(":"), "access denied" != (t = (t = (t = -1 != (t = -1 != (t = "failed" == (t = "confirm" == (t = i.substring(n + 1)) ? "ok" : t) ? "fail" : t).indexOf("failed_") ? t.substring(7) : t).indexOf("fail_") ? t.substring(5) : t).replace(/_/g, " ")).toLowerCase()) && "no permission to execute" != t || (t = "permission denied"), "" == (t = "config" == e && "function not exist" == t ? "ok" : t)) && (t = "fail"), i = e + ":" + t 458 | })(e, t), i.errMsg = t), (n = n || {})._complete && (n._complete(i), delete n._complete), t = i.errMsg || "", S.debug && !n.isInnerInvoke && alert(JSON.stringify(i)), t.indexOf(":")); 459 | switch (t.substring(e + 1)) { 460 | case "ok": 461 | n.success && n.success(i); 462 | break; 463 | case "cancel": 464 | n.cancel && n.cancel(i); 465 | break; 466 | default: 467 | n.fail && n.fail(i) 468 | } 469 | n.complete && n.complete(i) 470 | } 471 | 472 | // api_name, result, conf_of_callback 473 | function M(a, bridge_result, c) { 474 | delete bridge_result.err_code; 475 | delete bridge_result.err_desc; 476 | delete bridge_result.err_detail; 477 | 478 | var d = bridge_result.errMsg 479 | if (!d) { 480 | d = bridge_result.err_msg; 481 | delete bridge_result.err_msg; 482 | d = h(a, d); 483 | bridge_result.errMsg = d; 484 | } 485 | 486 | c = c || {}; 487 | if (c._complete) { 488 | c._complete(bridge_result); 489 | delete c._complete; 490 | } 491 | 492 | d = bridge_result.errMsg || ""; 493 | 494 | if (CONFIG_COPY.debug && !c.isInnerInvoke) { 495 | alert(JSON.stringify(bridge_result)); 496 | } 497 | 498 | var e = d.indexOf(":"); 499 | var f = d.substring(e + 1); 500 | 501 | switch (f) { 502 | case "ok": 503 | if (c.success) { 504 | c.success(bridge_result); 505 | } 506 | break; 507 | case "cancel": 508 | if (c.cancel) { 509 | c.cancel(bridge_result); 510 | } 511 | break; 512 | default: 513 | if (c.fail) { 514 | c.fail(bridge_result); 515 | } 516 | } 517 | 518 | if (c.complete) { 519 | c.complete(bridge_result) 520 | } 521 | } 522 | 523 | function V(e) { 524 | if (e) { 525 | for (var i = 0, n = e.length; i < n; ++i) { 526 | var t = e[i], 527 | t = c[t]; 528 | t && (e[i] = t) 529 | } 530 | return e 531 | } 532 | } 533 | 534 | function x(e, i) { 535 | if (!(!CONFIG_COPY.debug || i && i.isInnerInvoke)) { 536 | var n = API_NAMES_REVERSE[e]; 537 | n && (e = n), i && i._complete && delete b._complete, console.log('"' + e + '",', i || "") 538 | } 539 | } 540 | 541 | function now() { 542 | return (new Date).getTime(); 543 | } 544 | 545 | function A(ready_callback) { 546 | if (IS_MICRO_MESSENGER) { 547 | if (r.WeixinJSBridge) { 548 | ready_callback(); 549 | } else { 550 | if (i.addEventListener) { 551 | i.addEventListener("WeixinJSBridgeReady", ready_callback, false); 552 | } 553 | } 554 | } 555 | } 556 | }); 557 | --------------------------------------------------------------------------------