123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- import third from '@/sheep/api/third';
- import $wxsdk from '@/sheep/libs/sdk-h5-weixin';
- import $store from '@/sheep/store';
- import $platform from '@/sheep/platform';
- import { getRootUrl } from '@/sheep/helper';
- // 加载微信公众号JSSDK
- async function load() {
- if (
- $store('app').platform.auto_login &&
- !$store('user').isLogin &&
- location.href.search('pages/index/login') === -1
- ) {
- // 发起自动登陆
- login();
- }
- $wxsdk.init();
- }
- // 微信公众号登陆
- async function login(code = '') {
- // 获取登陆地址
- if (!code) {
- const loginResult = await getLoginUrl();
- if (loginResult.error === 0 && loginResult.data.login_url) {
- uni.setStorageSync('returnUrl', location.href);
- window.location = loginResult.data.login_url;
- }
- } else {
- // 解密code发起登陆
- const loginResult = await loginByCode(code);
- if (loginResult.error === 0) {
- return loginResult;
- }
- }
- return false;
- }
- // 微信公众号绑定
- async function bind(code = '') {
- // 获取绑定地址
- if (code === '') {
- const loginResult = await getLoginUrl('bind');
- if (loginResult.error === 0 && loginResult.data.login_url) {
- uni.setStorageSync('returnUrl', location.href);
- window.location = loginResult.data.login_url;
- }
- } else {
- // 解密code发起登陆
- const loginResult = await bindByCode(code);
- if (loginResult.error === 0) {
- return loginResult;
- }
- }
- return false;
- }
- // 微信公众号解除绑定
- async function unbind() {
- const { error } = await third.wechat.unbind({
- platform: 'officialAccount',
- });
- return Promise.resolve(!error);
- }
- // 获取公众号登陆地址
- function getLoginUrl(event = 'login') {
- let page = getRootUrl() + 'pages/index/login';
- return third.wechat.oauthLogin({
- platform: 'officialAccount',
- payload: encodeURIComponent(
- JSON.stringify({
- page,
- event,
- }),
- ),
- });
- }
- // 此处使用前端发送code在后端解密,防止用户在后端过长时间停留
- function loginByCode(code) {
- return third.wechat.login({
- platform: 'officialAccount',
- shareInfo: uni.getStorageSync('shareLog') || {},
- payload: encodeURIComponent(
- JSON.stringify({
- code,
- }),
- ),
- });
- }
- // 此处使用前端发送code在后端解密,防止用户在后端过长时间停留
- function bindByCode(code) {
- return third.wechat.bind({
- platform: 'officialAccount',
- payload: encodeURIComponent(
- JSON.stringify({
- code,
- }),
- ),
- });
- }
- export default {
- load,
- login,
- bind,
- unbind,
- jssdk: $wxsdk,
- };
|