wechatConfig.js 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. import store from "../store";
  2. import { sdkwxConfig } from "@/api/common";
  3. export const getCurrentContext = () => {
  4. const u = navigator.userAgent;
  5. if (
  6. u.match(/MicroMessenger/i) &&
  7. u.match(/MicroMessenger/i)[0] &&
  8. u.match(/MicroMessenger/i)[0].toLowerCase() == "micromessenger"
  9. ) {
  10. console.log("运行环境 version: DEV_20200731_V1.1 ====== 微信");
  11. return "wechat";
  12. }
  13. return "";
  14. };
  15. // 微信功能初始化
  16. const jsApiList = [
  17. "hideOptionMenu",
  18. "invoke",
  19. "shareAppMessage",
  20. "shareWechatMessage",
  21. "selectExternalContact",
  22. "getCurExternalContact",
  23. "onMenuShareAppMessage",
  24. "updateAppMessageShareData",
  25. "hideMenuItems",
  26. "showMenuItems"
  27. ];
  28. export let newData = null;
  29. export const wxConfig = async (argjsApiList, callback) => {
  30. const isWechat = getCurrentContext() === "wechat";
  31. if (!isWechat) {
  32. return false;
  33. }
  34. // 登录时间超过1小时50分调用wxConfig会重新获取签名data,或主动清除data
  35. if (newData && newData.startTime + 110 * 60 * 1000 <= new Date().getTime()) {
  36. newData = null;
  37. }
  38. if (!newData) {
  39. let { data } = await sdkwxConfig();
  40. newData = { ...data, startTime: new Date().getTime() };
  41. }
  42. // let {appid, signature, timestamp, nonceStr} = store.getters.eWechatInfo
  43. console.log("开始初始化微信参数,入参为--------" + JSON.stringify(newData));
  44. argjsApiList = argjsApiList || [];
  45. window.wx.config({
  46. beta: true, // 必须这么写,否则wx.invoke调用形式的jsapi会有问题
  47. debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
  48. appId: newData.appId, // 必填,企业微信的corpID
  49. timestamp: newData.timestamp, // 必填,生成签名的时间戳
  50. nonceStr: newData.nonceStr, // 必填,生成签名的随机串
  51. signature: newData.signature, // 必填,签名,见 附录-JS-SDK使用权限签名算法
  52. jsApiList: [...jsApiList, ...argjsApiList] // 必填,需要使用的JS接口列表,凡是要调用的接口都需要传进来
  53. });
  54. window.wx.ready(function(data) {
  55. console.log("初始化微信config成功------" + JSON.stringify(data));
  56. window.wx.hideMenuItems({
  57. menuList: [
  58. //分享到朋友圈:
  59. "menuItem:share:timeline",
  60. //分享到QQ:
  61. "menuItem:share:qq",
  62. //分享到Weibo:
  63. "menuItem:share:weiboApp",
  64. //收藏: "menuItem:favorite"
  65. //分享到FB:
  66. "menuItem:share:facebook",
  67. //分享到 QQ 空间
  68. "menuItem:share:QZone",
  69. // 以下为保护类
  70. //编辑标签:
  71. "menuItem:editTag",
  72. //删除:
  73. "menuItem:delete",
  74. //复制链接:
  75. "menuItem:copyUrl",
  76. //原网页:
  77. "menuItem:originPage",
  78. //阅读模式:
  79. "menuItem:readMode",
  80. //在QQ浏览器中打开:
  81. "menuItem:openWithQQBrowser",
  82. //在Safari中打开:
  83. "menuItem:openWithSafari",
  84. //邮件:
  85. "menuItem:share:email",
  86. //一些特殊公众号:
  87. "menuItem:share:brand"
  88. ] // 要隐藏的菜单项,只能隐藏“传播类”和“保护类”按钮,所有menu项见附录3
  89. });
  90. // 展示按钮
  91. window.wx.showMenuItems({
  92. menuList: ["menuItem:share:appMessage"] // 要显示的菜单项,所有menu项见附录3
  93. });
  94. callback && callback();
  95. store.dispatch("setEwechatInfo", {
  96. eWxConfigStatus: true,
  97. startTime: newData.startTime
  98. });
  99. });
  100. window.wx.error(function(err) {
  101. //通过error接口处理失败验证
  102. console.log("初始化微信config失败--------" + JSON.stringify(err));
  103. // config信息验证失败会执行error
  104. store.dispatch("setEwechatInfo", {
  105. eWxConfigStatus: false,
  106. startTime: newData.startTime
  107. });
  108. });
  109. };
  110. const wechatOnShare = shareData => {
  111. if (!wx) return;
  112. // 展示按钮
  113. wx.showMenuItems({
  114. menuList: ["menuItem:share:appMessage"] // 要显示的菜单项,所有menu项见附录3
  115. });
  116. let wxVersion = navigator.userAgent.match(/MicroMessenger\/([\d\.]+)/i)[1];
  117. if (wxVersion >= "6.7.2") {
  118. // 1.4以上版本sdk, 微信版本6.7.2以上
  119. wx.updateAppMessageShareData({
  120. title: shareData.title, // 分享标题
  121. desc: shareData.desc, // 分享描述
  122. link: shareData.link, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
  123. imgUrl: shareData.imgUrl, // 分享图标
  124. success: function() {
  125. console.log("分享成功" + JSON.stringify(shareData));
  126. // 设置成功
  127. }
  128. });
  129. return false;
  130. }
  131. // 即将废弃
  132. wx.onMenuShareAppMessage({
  133. title: shareData.title, // 分享标题
  134. desc: shareData.desc, // 分享描述
  135. link: shareData.link, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
  136. imgUrl: shareData.imgUrl, // 分享图标
  137. type: "", // 分享类型,music、video或link,不填默认为link
  138. dataUrl: "", // 如果type是music或video,则要提供数据链接,默认为空
  139. success: function() {
  140. // 用户点击了分享后执行的回调函数
  141. console.log("分享成功-老得分享方法" + JSON.stringify(shareData));
  142. }
  143. });
  144. };