react-app-shell
Version:
react打包脚本和example, 这里的版本请忽略
112 lines (100 loc) • 3.14 kB
JavaScript
import { fetchUtils, tools, localStore } from '../utils';
import { appConfig } from '../config';
import { AccountsType } from '../constants';
const { mobileDomain, baseDomain } = appConfig.domain;
// 落地时的 路径+查询参数, 为了解决IOS SPA 分享bug
const entryUrl = window.location.href;
/**
* 根据当前URL的路径和参数, 获取微信签名
* @returns {*|Promise<T>}
*/
export const getWechatSignature = (account = 'MAIN') => {
const url = baseDomain.concat('/wechat/mp/jsapi/signature');
const data = {
account,
/**
* !!! url参数必须传递当前页面的完整url
*/
url: tools.isIOS() ? entryUrl : window.location.href
};
return fetchUtils.get(url, data).then((res) => res.data);
};
/**
* 根据用户主动授权的code, 获取openId 和 微信token
* 接口的响应 会给浏览器添加一个cookie, "wxToken"
* @param code
* @returns {*|Promise<any>}
*/
export const getOpenIdByCode = (code) => {
const url = mobileDomain.concat('/wx/asyncOauth2');
const data = {
code
};
return fetchUtils.get(url, data, { includeToken: false, successCode: 0 });
};
/**
* 根据用户主动授权的code和account, 获取openId 和 微信token
* @param code
* @param account
* @returns {*|Promise<any>}
*/
export const getOpenIdByCodeAndAccount = (code, account) => {
let url;
let data = {
code
};
let type;
switch (account) {
// account 为BONNY时,需要单独将wxToken写入cookie
case AccountsType.MAIN:
url = mobileDomain.concat('/wx/asyncOauth2');
break;
case AccountsType.ACTIVITY:
url = mobileDomain.concat('/wx99/asyncOauth2');
break;
case AccountsType.BONNY:
// account 为BONNY-魔小兔,则调用新的微信授权接口
url = baseDomain.concat('/wechat/mp/oauth2');
data = {
code,
account
};
// 调用新的微信授权接口
type = 'newType';
break;
default:
url = mobileDomain.concat('/wx/asyncOauth2');
break;
}
// account 为BONNY时,调用新接口,并将wxToken写入cookie
if (type === 'newType')
return fetchUtils.get(url, data).then((res) => {
const { wechatTokenKey } = appConfig.cookie;
const { wxMpUser, encryptWxToken } = res.data;
// 将wxToken写入cookie
localStore.set(wechatTokenKey, encryptWxToken);
return {
code: res.code,
openId: wxMpUser.openId,
nickname: wxMpUser.nickname
};
});
if (account === AccountsType.MAIN) {
// 接口返回的数据 不是标准数据格式, 没有code编码, 只有一层数据
return fetchUtils.get(url, data, { includeToken: false, jumpSuccessCode: true });
} else {
return fetchUtils.get(url, data, { includeToken: false, successCode: 0 });
}
};
/**
* 检查用户是否关注过公众号
* @param account
* @returns {self|Promise<T | never>}
*/
export const checkWxSubscribe = (account) => {
const url = baseDomain.concat('/usercenter/wx/check/subscribe');
const data = {
account
};
return fetchUtils.get(url, data).then((res) => res.data);
};