wxShare.ts 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. import Vue from 'vue'
  2. import WeiXinSDK from '@/utils/wx-js-sdk-register.ts'
  3. import { androidOrIOS } from '@/utils/globalFunctions'
  4. import { inWeiXinBrowser } from '@/utils/platform'
  5. import { getWxSdkSign } from '@/api/'
  6. declare module 'vue/types/vue' {
  7. interface Vue {
  8. $env: any;
  9. $envs: any;
  10. $registerWxSdk: any;
  11. $wxSdk: any;
  12. }
  13. }
  14. const isAndroidOrIos = androidOrIOS()
  15. export async function getSdkSign (url: string) {
  16. const sdkInfo = await getWxSdkSign({ url })
  17. if (!sdkInfo) return
  18. const info = sdkInfo.data
  19. if (info && info.wxsdk && Array.isArray(info.wxsdk)) {
  20. const sdk = info.wxsdk
  21. return new WeiXinSDK({
  22. appId: sdk[0],
  23. timestamp: sdk[1],
  24. nonceStr: sdk[2],
  25. signature: sdk[3]
  26. })
  27. }
  28. }
  29. /* 微信自定义分享封装函数 */
  30. export async function weChatShare (options: any) {
  31. if (!inWeiXinBrowser) return
  32. const device = isAndroidOrIos
  33. // 获取并注册sdkSign
  34. let url = location.href.split('#')[0]
  35. if (device === 'ios') {
  36. url = (Vue as any).prototype.$firstUrl
  37. }
  38. const wxSdk: any = await getSdkSign(url)
  39. Vue.prototype.$wxSdk = wxSdk
  40. wxSdk.shareToFriendAndQQ(options)
  41. wxSdk.shareToFriendsAndQZone(options)
  42. return wxSdk
  43. }
  44. export async function weChatPay (options: any) {
  45. if (!inWeiXinBrowser) return
  46. // 获取并注册sdkSign
  47. const url = location.href.split('#')[0]
  48. const wxSdk: any = await getSdkSign(url)
  49. Vue.prototype.$wxSdk = wxSdk
  50. wxSdk.chooseWXPayForWeiXinJSBridge(options)
  51. return wxSdk
  52. }