UNPKG

orcrist-wechat

Version:

for Orcrist Wechat sdk

156 lines (143 loc) 3.89 kB
import OST_REQ from "orcrist-request"; import { traceLog } from "./utils/traceLog"; import API from "./api"; import { WECHAT_REGISTER_APIS, WECHAT_MENU_ITEMS, REGISTER_SERVICE_URL, } from "./constants"; const w: any = window; const d: any = document; const r: any = OST_REQ; if (w.BUZZ) { w.BUZZ.scene = `${w.BUZZ.scene}_WECHAT`; } /** * 全局统一注册Wechat方法 * @param options { productCode(skuCode), shareOpt, hideMenu } */ export const register = (options = {}) => { // current URL const CURR_URL = encodeURIComponent(location.href.split("#")[0]); r.request(REGISTER_SERVICE_URL, { method: "POST", body: { url: CURR_URL, }, }) .then(({ code, data }) => { switch (code) { case "0": const { appid: appId = "", nonceStr = "", sign: signature = "", timestamp, } = data; configWechatJSSDK(appId, timestamp, nonceStr, signature, options); break; default: traceLog({ log: encodeURIComponent( `[ SignWechatSDKService ] Error Code: ${code}` ), }); } }) .catch((err) => { traceLog({ log: encodeURIComponent( `[ SignWechatSDKService ] Error Code: 500. ${err.message}` ), }); throw new Error(err.message); }); }; interface JSSDK_OPTION { hideMenu?: boolean; shareOpt?: any; } const configWechatJSSDK = ( appId, timestamp, nonceStr, signature, { hideMenu = false, shareOpt }: JSSDK_OPTION // 注册wechat ) => { const { config = () => {}, ready, error } = w.wx; // * 执行注册SDK config({ // debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId, // 必填,公众号的唯一标识 timestamp, // 必填,生成签名的时间戳 nonceStr, // 必填,生成签名的随机串 signature, // 必填,签名 jsApiList: WECHAT_REGISTER_APIS, // 必填,需要使用的JS接口列表 }); ready(function () { // wechat local cache localStorage.setItem( "WX_CONFIG", JSON.stringify({ appId, nonceStr, signature, timestamp, }) ); if (hideMenu) { // 隐藏所有功能按钮 setOptionMenu("hideOptionMenu"); w.wx.hideMenuItems({ // !所有微信菜单项:https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html#64 menuList: WECHAT_MENU_ITEMS, }); w.wx.hideAllNonBaseMenuItem(); } else { setOptionMenu("showMenuItems"); // 设置自定义分享 if (shareOpt) { w.wx.updateAppMessageShareData(shareOpt); w.wx.updateTimelineShareData(shareOpt); w.wx.onMenuShareTimeline(shareOpt); // 朋友圈 w.wx.onMenuShareAppMessage(shareOpt); // 朋友 } w.wx.showAllNonBaseMenuItem(); } }); error(function (res) { // 签名会valid traceLog({ log: encodeURIComponent(JSON.stringify(res || {})), }); }); }; /** * 设置是否关闭微信菜单 * @param status */ const setOptionMenu = (status) => { const onBridgeReady = () => { w.WeixinJSBridge.call(status); }; if (status) { if (typeof w.WeixinJSBridge == "undefined") { if (document.addEventListener) { document.addEventListener( "WeixinJSBridgeReady", onBridgeReady.bind(this), false ); } else if (d.attachEvent) { d.attachEvent("WeixinJSBridgeReady", onBridgeReady.bind(this)); d.attachEvent("onWeixinJSBridgeReady", onBridgeReady.bind(this)); } } else { onBridgeReady(); } } }; export default { register, ...API, };