jssdk.js 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  1. function jssdk(wid, domain) {
  2. this.wid = wid;
  3. if (typeof domain == "undefined") {
  4. domain = window.location.origin;
  5. }
  6. this.domain = domain;
  7. }
  8. // title,desc,link,imgUrl
  9. jssdk.prototype._shareQQ = function (shareData) {
  10. wx.onMenuShareQQ(shareData);
  11. };
  12. // title,desc,link,imgUrl
  13. jssdk.prototype._shareWeibo = function (shareData) {
  14. wx.onMenuShareWeibo(shareData);
  15. };
  16. // title,link,imgUrl
  17. jssdk.prototype._shareTimeline = function (shareData) {
  18. wx.onMenuShareTimeline(shareData);
  19. };
  20. // title,desc,link,imgUrl
  21. // type 分享类型 music/video/link[default]
  22. // dataUrl type=music/video,则要提供数据链接,默认为空
  23. jssdk.prototype._shareAppMessage = function (shareData) {
  24. wx.onMenuShareAppMessage(shareData);
  25. };
  26. //title 分享给朋友标题 desc 分享给朋友描述 imgUrl 分享图标 timetitle 分享到朋友圈标题
  27. jssdk.prototype.share = function (title, desc, imgUrl, timetitle, success) {
  28. if (typeof success != "function") {
  29. success = function () {
  30. };
  31. }
  32. var link=arguments[5] ? arguments[5] : _sdk_config.getUrl(true);
  33. _sdk_config.config(this.wid, this.domain);
  34. var that = this;
  35. wx.ready(function () {
  36. that._shareQQ({title: title, desc: desc, link: link, imgUrl: imgUrl, success: success});
  37. that._shareWeibo({title: title, desc: desc, link: link, imgUrl: imgUrl, success: success});
  38. that._shareTimeline({title: timetitle, link: link, imgUrl: imgUrl, success: success});
  39. that._shareAppMessage({title: title, desc: desc, link: link, imgUrl: imgUrl, success: success});
  40. });
  41. }
  42. jssdk.prototype.config = function (debug) {
  43. _sdk_config.config(this.wid, this.domain, debug);
  44. }
  45. jssdk.prototype.previewImage = function (data) {
  46. wx.previewImage(data);
  47. }
  48. jssdk.prototype.qrcode = function (callback) {
  49. wx.scanQRCode({
  50. needResult: 1,
  51. scanType: ["qrCode","barCode"],
  52. success: function (res) {
  53. callback(res.resultStr);
  54. }
  55. });
  56. };
  57. jssdk.prototype.getLocation = function (callback) {
  58. wx.ready(function(){
  59. wx.getLocation({
  60. type: 'gcj02', // 默认为wgs84的gps坐标,如果要返回直接给openLocation用的火星坐标,可传入'gcj02'
  61. success: function (res) {
  62. callback(res);
  63. }
  64. })
  65. });
  66. }
  67. jssdk.prototype.chooseWXPay = function (option) {
  68. wx.chooseWXPay(option);
  69. };
  70. // 控制分享接口
  71. jssdk.prototype.controlShareMenu = function(option){
  72. _sdk_config.config(this.wid, this.domain);
  73. var that = this;
  74. wx.ready(function(){
  75. if (option != 'hideAllNonBaseMenuItem') {
  76. that._hideMenuItems(option);
  77. } else {
  78. wx.hideAllNonBaseMenuItem(); // 隐藏所有
  79. }
  80. });
  81. };
  82. // 选择隐藏
  83. jssdk.prototype._hideMenuItems = function(option){
  84. var option = eval("("+option+")");
  85. wx.hideMenuItems({
  86. menuList: option
  87. });
  88. };
  89. jssdk.prototype.chooseImage = function (option, callback) {
  90. var def = {
  91. count: 9,
  92. sizeType: ['original', 'compressed'],
  93. sourceType: ['album', 'camera'],
  94. success: function(res) {
  95. callback(res);
  96. }
  97. };
  98. for(var i in option) {
  99. def[i] = option[i];
  100. }
  101. wx.chooseImage(def);
  102. };
  103. jssdk.prototype.uploadImage = function (option, callback) {
  104. var def = {
  105. localId: '',
  106. isShowProgressTips: 1,
  107. success: function(res) {
  108. callback(res);
  109. }
  110. };
  111. for(var i in option) {
  112. def[i] = option[i];
  113. }
  114. wx.uploadImage(def);
  115. };
  116. var _sdk_config = {
  117. _config_state: [],
  118. _url: "",
  119. _apiList: [
  120. 'onMenuShareTimeline',
  121. 'onMenuShareAppMessage',
  122. 'onMenuShareQQ',
  123. 'onMenuShareWeibo',
  124. 'scanQRCode',
  125. 'chooseWXPay',
  126. 'previewImage',
  127. 'openLocation',
  128. 'getLocation',
  129. 'openEnterpriseChat',
  130. 'openEnterpriseContact',
  131. 'hideAllNonBaseMenuItem', // 添加
  132. 'hideMenuItems',
  133. 'chooseImage',
  134. 'uploadImage'
  135. ],
  136. addApiList: function (api) {
  137. this._apiList.push(api);
  138. },
  139. config: function (wid, domain, debug, force) {
  140. if (this._config_state[wid] && !force) {
  141. return;
  142. }
  143. this._config_state[wid] = true;
  144. var that = this;
  145. $.ajax({
  146. type: "get",
  147. url: domain + '/uc/api/wx-jssdk/config',
  148. dataType: "jsonp",
  149. jsonp: "callback",
  150. data: ({
  151. wid: wid,
  152. url: this.getUrl()
  153. }),
  154. success: function (data) {
  155. var configData = {
  156. // beta: true,// 必须这么写,否则wx.invoke调用形式的jsapi会有问题
  157. debug: debug ? true : false,
  158. appId: data.appId,
  159. timestamp: data.timestamp,
  160. nonceStr: data.nonceStr,
  161. signature: data.signature,
  162. jsApiList: that._apiList
  163. };
  164. wx.config(configData);
  165. }
  166. });
  167. },
  168. getUrl: function (clear) {
  169. if (!this._url) {
  170. var l = window.location;
  171. this._url = l.protocol + '//' + l.host + l.pathname + l.search;
  172. }
  173. if (typeof clear != "undefined") {
  174. return this.delQueStr(this._url, ['code', 'CODE', 'state', 'STATE']);
  175. }
  176. return this._url;
  177. },
  178. delQueStr: function (url, strs) {
  179. var str = "";
  180. if (url.indexOf('?') != -1)
  181. str = url.substr(url.indexOf('?') + 1);
  182. else
  183. return url;
  184. for (var i = 0; i < strs.length; i++) {
  185. var returnurl = "";
  186. var ref = strs[i];
  187. if (str.indexOf('&') != -1) {
  188. var arr = str.split('&');
  189. for (var ii in arr) {
  190. var nf = arr[ii].split('=');
  191. if (nf[0] != ref) {
  192. returnurl += arr[ii] + "&";
  193. }
  194. }
  195. url = url.substr(0, url.indexOf('?')) + "?" + returnurl.substr(0, returnurl.length - 1);
  196. } else {
  197. var arr = str.split('=');
  198. if (arr[0] == ref)
  199. url = url.substr(0, url.indexOf('?'));
  200. else
  201. url = url;
  202. }
  203. }
  204. return url;
  205. }
  206. };