UNPKG

orcrist-wechat

Version:

for Orcrist Wechat sdk

50 lines (40 loc) 1.49 kB
import { getQueryMap } from "../utils/common"; import { msg } from "./msg"; import { WECHAT_REDIRECT_URL } from "../constants"; import { queryUserInfo } from "../service"; /** * 显式授权 * @param redirectURL */ export const explicitAuth = async (redirectURL: string) => { const { sources = "", code = "" } = getQueryMap(); const { APPID = "" } = (await msg()) || {}; // * 是否显式授权状态位 const isVisibleFLAG = sessionStorage.getItem("SNSAPI_USERINFO"); // * 微信userINFO (包含了openid) const userINFO = JSON.parse(sessionStorage.getItem("SP_WX_USERINFO") || null); // * 须满足没有显式授权过 if (code && isVisibleFLAG) { // 重置URL history.replaceState( {}, document.title || "", location.href.split("code")[0].slice(0, -1) ); return userINFO ? Promise.resolve({ code: 20000, data: userINFO, type: "userINFO" }) : queryUserInfo(code, sources); } else { const targetURL = WECHAT_REDIRECT_URL.replace("APPID", APPID) .replace("REDIRECT_URI", encodeURIComponent(redirectURL)) // snsapi_base: 静默授权 用来获取进入页面的用户的openid的, snsapi_userinfo: 用户点击授权 .replace("SCOPE", "snsapi_userinfo") .replace("STATE", ""); sessionStorage.setItem("SNSAPI_USERINFO", "1"); window.location.replace(targetURL); //微信授权跳转 return Promise.resolve({ code: -1, data: "" }); } }; export default { explicitAuth, };