微信开放标签 + 微信分享功能 初始化

795 阅读1分钟

背景

微信放开了一个功能,就是微信开放标签,用于唤起APP或者唤起微信小程序

  1. 唤起APP
  2. 唤起微信小程序
  3. 微信二次分享自定义配置功能

code

npm i weixin-js-sdk@^1.6.0 --save

import jsonp from 'jsonp'
import wx from 'weixin-js-sdk'

interface ShareData {
    title: string 
    desc: string
    imgUrl: string
    link: string
}
type ShareDataPartial = Partial<ShareData>;
interface WxConfig {
    debug: boolean
    appId: string
    timestamp: string
    nonceStr: string
    signature: string
    jsApiList: string[]
    openTagList?: string[]
}
const jsApiList = [
    'checkJsApi',
    'onMenuShareTimeline',
    'onMenuShareAppMessage',
    'onMenuShareQQ',
    'onMenuShareQZone',
    'onMenuShareWeibo',
    'hideMenuItems',
    'showMenuItems',
    'hideAllNonBaseMenuItem',
    'showAllNonBaseMenuItem',
    'translateVoice',
    'startRecord',
    'stopRecord',
    'onRecordEnd',
    'playVoice',
    'pauseVoice',
    'stopVoice',
    'uploadVoice',
    'downloadVoice',
    'chooseImage',
    'previewImage',
    'uploadImage',
    'downloadImage',
    'getNetworkType',
    'openLocation',
    'getLocation',
    'hideOptionMenu',
    'showOptionMenu',
    'closeWindow',
    'scanQRCode',
    'chooseWXPay',
    'openProductSpecificView',
    'addCard',
    'chooseCard',
    'openCard'
]
export function initEvents ({shareData, sdkUrl}: { shareData: ShareData, sdkUrl?: string}) {
    // 获取签名
    const URL_WX_SIGN = sdkUrl ? sdkUrl : 'https://xxx.xxxx.com/weixin/getSignPackage';
    const url = URL_WX_SIGN + '?url=' + encodeURIComponent(location.href.split('#')[0]);
    
    return jsonp(url, {
        prefix: 'xxx',
        name: 'xxx'
    }, (err, data) => {
        if (err) throw err

        if (data.error_code === '0') {
            const wxConfig: WxConfig = {
                debug: false,
                appId: data.data.appId,
                timestamp: data.data.timestamp,
                nonceStr: data.data.nonceStr,
                signature: data.data.signature,
                jsApiList
            };
            /* 支持微信开放标签 */
            if (sdkUrl) {
                wxConfig.openTagList = ['wx-open-launch-app','wx-open-launch-weapp'];
            }
            wx.config(wxConfig);
            wx.ready(() => {
                if (JSON.stringify(shareData) === '{}' || !shareData) return;
                /* 功能: 微信分享 */
                const defaultData = {
                    title: document.title,
                    desc: '',
                    link: location.href,
                    imgUrl: '',
                    trigger (res) {
                        // alert('用户点击发送给朋友aa');
                    },
                    success (res) {
                        // alert('成功');
                    },
                    cancel (res) {
                        // alert('已取消');
                    },
                    fail (res) {
                        // alert('分享失败了');
                    }
                }
                shareData = Object.assign(defaultData, shareData)
                wx.onMenuShareAppMessage(shareData)
                wx.onMenuShareTimeline(shareData)
                wx.onMenuShareQQ(shareData)
                wx.onMenuShareWeibo(shareData)
                wx.onMenuShareQZone(shareData)
            })
        } else {
            console.error(data.error_msg)
        }
    });
}