wechat-utils-1.0.js 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264
  1. /**
  2. * @author 何秀刚
  3. * @description wechat 工具类,依赖JQuery,如果引入此文件,自动绑定分享事件。
  4. * @version V.1.0
  5. */
  6. // 获取绑定微信JSSDK的配置参数
  7. var getConfigUrl = base_path+"/config/get";
  8. // JSSDK是否绑定成功
  9. var jssdkSuccess = true;
  10. //是否隐藏全局菜单
  11. if (window.hiddenAllWechatMenu == null) {
  12. window.hiddenAllWechatMenu = false;
  13. }
  14. // 使用全局默认
  15. window.wxFriend = {
  16. "appId": "",
  17. "imgUrl":'https://s.iamberry.com/soodo/wechat/images/product_fenxiang.jpg',
  18. "link":"https://s.iamberry.com/soodo/wechat/index.html",
  19. "desc":"让你的“笑容停留在18岁”",
  20. "title":"【Soodo上朵】柔性声波牙刷,智柔刷牙.新体验",
  21. "netError":"您的网络异常,请刷新重试!如多次刷新无效,请向我们反应 ~",
  22. "shareTimeSuccess":"这里是分享朋友圈后调用的文字",
  23. "shareTimeCancel":"这里是取消分享给朋友圈后调用的文字",
  24. "shareAppSuccess":"这里是分享好友后调用的文字",
  25. "shareAppCancel":"这里是取消分享给好友后调用的文字"
  26. };
  27. // 微信共享地址数据
  28. window.wechatAddr = {
  29. "status":false, // 是否调用成功,true成功,false失败
  30. "statusMsg":"失败时信息",
  31. "detailInfo":"详细地址",
  32. "postalCode":"邮编",
  33. "userName":"收货人",
  34. "userTel":"收货人电话",
  35. "nationalCode":"收货地址国家码"
  36. };
  37. /** 引入JSSDK1.0基本组件,微信共享地址智能使用1.0版本,并且需要服务器返回参数支持 */
  38. //incoldeJSFile("http://res.wx.qq.com/open/js/jweixin-1.0.0.js");
  39. /** 引入JSSDK1.1基本组件 ,支持摇一摇、微信共享地址 */
  40. incoldeJSFile("//res.wx.qq.com/open/js/jweixin-1.1.0.js");
  41. getConfig(); // 配置JSSDK组件
  42. /** 获取服务器JSSDK参数配置 */
  43. function getConfig(){
  44. $.ajax({
  45. type: 'get', url: getConfigUrl, data: {appid: "", url: location.href,"date":new Date().getTime()}, dataType: 'json', timeout: 10000, context: $('body'),
  46. success: function(data){setConfig(data);},
  47. error: function(xhr, type){
  48. getConfig();
  49. mui.alert('网络异常,请刷新重试,否则某些功能不能使用!')
  50. }
  51. });
  52. }
  53. /**配置JS-SDK*/
  54. function setConfig(config){
  55. wx.config({
  56. debug: false,
  57. appId: config.appId,
  58. timestamp: config.timestamp,
  59. nonceStr: config.nonceStr,
  60. signature: config.signature,
  61. jsApiList: [
  62. 'checkJsApi',
  63. 'onMenuShareTimeline',
  64. 'onMenuShareAppMessage',
  65. 'hideMenuItems',
  66. 'scanQRCode',
  67. 'showMenuItems'
  68. ]
  69. });
  70. wx.ready(function(){ //JSSDK绑定成功
  71. wxReadySuccess();
  72. });
  73. wx.error(function(res){ // JSSDK绑定失败的方法
  74. wxReadyError();
  75. });
  76. }
  77. /** JSSDK绑定成功调用事件 */
  78. function wxReadySuccess() {
  79. window.jssdkSuccess = true;
  80. shareMessage();
  81. wx.getNetworkType({success: function (res) {}});
  82. if (window.hiddenAllWechatMenu) {
  83. wx.showMenuItems({
  84. menuList: [
  85. ] // 要显示的菜单项,所有menu项见附录3
  86. });
  87. wx.hideMenuItems({
  88. menuList: [
  89. "menuItem:copyUrl",
  90. "menuItem:openWithSafari",
  91. "menuItem:originPage",
  92. "menuItem:share:email",
  93. "menuItem:dayMode",
  94. "menuItem:setFont",
  95. "menuItem:nightMode",
  96. "menuItem:share:qq",
  97. "menuItem:dayMode",
  98. "menuItem:exposeArticle",
  99. "menuItem:nightMode",
  100. "menuItem:openWithQQBrowser",
  101. "menuItem:share:QZone",
  102. "menuItem:favorite",
  103. "menuItem:share:facebook",
  104. "menuItem:share:appMessage",
  105. "menuItem:share:brand",
  106. "menuItem:share:timeline"
  107. ] // 要隐藏的菜单项,所有menu项见附录3
  108. });
  109. } else {
  110. wx.showMenuItems({
  111. menuList: [
  112. "menuItem:share:appMessage",
  113. "menuItem:share:timeline"
  114. ] // 要显示的菜单项,所有menu项见附录3
  115. });
  116. wx.hideMenuItems({
  117. menuList: [
  118. "menuItem:copyUrl",
  119. "menuItem:openWithSafari",
  120. "menuItem:originPage",
  121. "menuItem:share:email",
  122. "menuItem:dayMode",
  123. "menuItem:setFont",
  124. "menuItem:nightMode",
  125. "menuItem:share:qq",
  126. "menuItem:dayMode",
  127. "menuItem:exposeArticle",
  128. "menuItem:nightMode",
  129. "menuItem:openWithQQBrowser",
  130. "menuItem:share:QZone",
  131. "menuItem:favorite",
  132. "menuItem:share:brand",
  133. "menuItem:share:facebook"
  134. ] // 要隐藏的菜单项,所有menu项见附录3
  135. });
  136. }
  137. }
  138. /** JSSDK 绑定失败调用方法 */
  139. function wxReadyError() {
  140. // alert(wxFriend.netError);
  141. }
  142. /** 分享时、分享后调用方法 */
  143. function shareMessage(title, message) {
  144. title = title || wxFriend.title;
  145. message = message || wxFriend.desc;
  146. wx.onMenuShareTimeline({ //分享到朋友圈,只有标题、图标,没有内容简介
  147. title: title, link: wxFriend.link, imgUrl: wxFriend.imgUrl,
  148. success: function () {
  149. if (wxFriend.shareAppSuccess != null && wxFriend.shareAppSuccess != "") {
  150. // alert(wxFriend.shareAppSuccess);
  151. }
  152. },
  153. cancel: function () {
  154. if (wxFriend.shareTimeCancel != null && wxFriend.shareTimeCancel != "") {
  155. // alert(wxFriend.shareTimeCancel);
  156. }
  157. }
  158. });
  159. wx.onMenuShareAppMessage({ // 分享给好友,有标题、内容简介、图标
  160. title: title, desc: message, link: wxFriend.link, imgUrl: wxFriend.imgUrl,
  161. success: function () {
  162. if (wxFriend.shareAppSuccess != null && wxFriend.shareAppSuccess != "") {
  163. // alert(wxFriend.shareAppSuccess);
  164. }
  165. },
  166. cancel: function () {
  167. if (wxFriend.shareTimeCancel != null && wxFriend.shareTimeCancel != "") {
  168. // alert(wxFriend.shareTimeCancel);
  169. }
  170. }
  171. });
  172. }
  173. /**
  174. * 微信支付
  175. * str:微信支付参数,字符串
  176. * paySuccessCallBack:微信支付成功后回调方法,此方法必须为全局时,方可以回调成功
  177. * payCancelCallBack:微信支付失败后回调方法,此方法必须为全局时,方可以回调成功
  178. */
  179. function wechatPay(str, paySuccessCallBack, payCancelCallBack) {
  180. if (typeof WeixinJSBridge == "undefined"){
  181. alert("非微信浏览器!无法发起微信支付请求!");
  182. return;
  183. }
  184. var obj = JSON.parse("{" + str + "}");
  185. WeixinJSBridge.invoke('getBrandWCPayRequest', obj, function(res) {
  186. if(res.err_msg=='get_brand_wcpay_request:ok'){
  187. paySuccessCallBack
  188. }else{
  189. payCancelCallBack
  190. }
  191. });
  192. }
  193. if (typeof WeixinJSBridge == "undefined"){
  194. if( document.addEventListener ){
  195. document.addEventListener('WeixinJSBridgeReady', wechatPay, false);
  196. }else if (document.attachEvent){
  197. document.attachEvent('WeixinJSBridgeReady', wechatPay);
  198. document.attachEvent('onWeixinJSBridgeReady', wechatPay);
  199. }
  200. }
  201. /** 发起微信共享地址Version 1.0 */
  202. function editAddrV0(config) {
  203. WeixinJSBridge.invoke('editAddress', {"appId" : config.appId, "scope" : "jsapi_address", "signType" : "SHA1", "addrSign" : config.addrSign, "timeStamp" : config.timestamp, "nonceStr" : config.nonceStr},
  204. function(res) {
  205. if ("edit_address:ok" == res.err_msg) {
  206. var address = res.proviceFirstStageName + "-" + res.addressCitySecondStageName + "-" + res.addressCountiesThirdStageName + "-" + res.addressDetailInfo;
  207. wechatAddr.status = true;
  208. wechatAddr.detailInfo = address;
  209. wechatAddr.postalCode = res.addressPostalCode;
  210. wechatAddr.userName = res.userName;
  211. wechatAddr.userTel = res.telNumber;
  212. return wechatAddr;
  213. } else if ("edit_address:fail" == res.err_msg) {// 没有选择
  214. wechatAddr.statusMsg = "您没有选择收货地址!";
  215. return wechatAddr;
  216. } else { // 参数过时,请刷新
  217. wechatAddr.statusMsg = "操作过时,请刷新重试!";
  218. return wechatAddr;
  219. }
  220. }
  221. );
  222. }
  223. /**
  224. * 发起微信共享地址Version 1.1<br>
  225. * {<br>
  226. * status : 状态,true:请求成功,false:请求失败<br>
  227. * errorInfo : 请求失败时的提示信息<br>
  228. * res: { 请求成功时的地址信息,失败为空<br>
  229. * userName : 收货人姓名。<br>
  230. * postalCode : 邮编。<br>
  231. * provinceName 国标收货地址第一级地址(省)。<br>
  232. * cityName : 国标收货地址第二级地址(市)。<br>
  233. * countryName : 国标收货地址第三级地址(区)。<br>
  234. * detailInfo : 详细收货地址信息。<br>
  235. * nationalCode : 收货地址国家码。<br>
  236. * telNumber : 收货人电话<br>
  237. * }
  238. * }
  239. */
  240. function editAddrV1(successCallback, errorCallback) {
  241. if (!window.jssdkSuccess) {
  242. mui.alert("错误啦 ~~ 请刷新重试!");
  243. return;
  244. }
  245. wx.openAddress({
  246. success: successCallback,
  247. cancel: errorCallback
  248. });
  249. }
  250. /** 动态引入wechat utils JavaScript */
  251. function incoldeJSFile(jsUrl) {
  252. var typeHand = document.getElementsByTagName('head').item(0);
  253. var typeScript= document.createElement("script");
  254. typeScript.type = "text/javascript";
  255. typeScript.src=jsUrl;
  256. typeHand.appendChild(typeScript);
  257. }