orcrist-wechat
Version:
for Orcrist Wechat sdk
50 lines (40 loc) • 1.49 kB
text/typescript
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,
};