微信公众号:接入绑定逻辑

pull/32/MERGE
YunaiV 2023-12-23 22:40:30 +08:00
parent 4d9343d2db
commit 6077ea8b26
2 changed files with 22 additions and 53 deletions

View File

@ -1,32 +1,29 @@
<!-- 微信公众号的登录回调页 -->
<template> <template>
<!-- 空登陆页 --> <!-- 空登陆页 -->
<view></view> <view />
</template> </template>
<script setup> <script setup>
import { isEmpty } from 'lodash';
import sheep from '@/sheep'; import sheep from '@/sheep';
import { onLoad, onShow } from '@dcloudio/uni-app'; import { onLoad } from '@dcloudio/uni-app';
onLoad(async (options) => { onLoad(async (options) => {
// #ifdef H5 // #ifdef H5
let event = ''; // search options 便
new URLSearchParams(location.search).forEach((value, key) => { new URLSearchParams(location.search).forEach((value, key) => {
options[key] = value; options[key] = value;
}); });
if (options.code) { const event = options.event;
event = 'login'; const code = options.code;
const { error } = await sheep.$platform.useProvider().login(options.code, options.state); const state = options.state;
if (error === 0) { if (event === 'login') { //
sheep.$store('user').getInfo(); const res = await sheep.$platform.useProvider().login(code, state);
} } else if (event === 'bind') { //
} sheep.$platform.useProvider().bind(code, state);
if (options.bind_code) {
event = 'bind';
const { error } = await sheep.$platform.useProvider().bind(options.bind_code);
} }
// H5 // H5
let returnUrl = uni.getStorageSync('returnUrl'); let returnUrl = uni.getStorageSync('returnUrl');
if (returnUrl) { if (returnUrl) {
uni.removeStorage('returnUrl'); uni.removeStorage('returnUrl');
@ -36,7 +33,6 @@
url: '/', url: '/',
}); });
} }
// #endif // #endif
}); });
</script> </script>

View File

@ -23,8 +23,9 @@ async function login(code = '', state = '') {
// 情况二:有 code 时,使用 code 去自动登录 // 情况二:有 code 时,使用 code 去自动登录
} else { } else {
// 解密 code 发起登陆 // 解密 code 发起登陆
const loginResult = await loginByCode(code, state); const loginResult = await AuthUtil.socialLogin(socialType, code, state);
if (loginResult.code === 0) { if (loginResult.code === 0) {
// TODO 芋艿shareLog
setOpenid(loginResult.data.openid); setOpenid(loginResult.data.openid);
return loginResult; return loginResult;
} }
@ -33,8 +34,8 @@ async function login(code = '', state = '') {
} }
// 微信公众号绑定 // 微信公众号绑定
async function bind(code = '') { async function bind(code = '', state = '') {
// 获取绑定地址 // 情况一:没有 code 时,去获取 code
if (code === '') { if (code === '') {
const loginUrl = await getLoginUrl('bind'); const loginUrl = await getLoginUrl('bind');
if (loginUrl) { if (loginUrl) {
@ -42,9 +43,10 @@ async function bind(code = '') {
window.location = loginUrl; window.location = loginUrl;
} }
} else { } else {
// 解密code发起登陆 // 情况二:有 code 时,使用 code 去自动绑定
const loginResult = await bindByCode(code); const loginResult = await SocialApi.socialBind(socialType, code, state);
if (loginResult.error === 0) { if (loginResult.code === 0) {
setOpenid(loginResult.data);
return loginResult; return loginResult;
} }
} }
@ -59,7 +61,8 @@ const unbind = async (openid) => {
// 获取公众号登陆地址 // 获取公众号登陆地址
async function getLoginUrl(event = 'login') { async function getLoginUrl(event = 'login') {
const page = getRootUrl() + 'pages/index/login'; const page = getRootUrl() + 'pages/index/login'
+ '?event=' + event; // event 目的,区分是 login 还是 bind
const { code, data } = await AuthUtil.socialAuthRedirect(socialType, page); const { code, data } = await AuthUtil.socialAuthRedirect(socialType, page);
if (code !== 0) { if (code !== 0) {
return undefined; return undefined;
@ -67,36 +70,6 @@ async function getLoginUrl(event = 'login') {
return data; return data;
} }
// 此处使用前端发送code在后端解密防止用户在后端过长时间停留
function loginByCode(code, state) {
if (true) {
return AuthUtil.socialLogin(socialType, code, state);
}
// TODO 芋艿shareLog
return third.wechat.login({
platform: 'officialAccount',
shareInfo: uni.getStorageSync('shareLog') || {},
payload: encodeURIComponent(
JSON.stringify({
code,
}),
),
});
}
// 此处使用前端发送code在后端解密防止用户在后端过长时间停留
function bindByCode(code) {
debugger
return third.wechat.bind({
platform: 'officialAccount',
payload: encodeURIComponent(
JSON.stringify({
code,
}),
),
});
}
// 设置 openid 到本地存储,目前只有 pay 支付时会使用 // 设置 openid 到本地存储,目前只有 pay 支付时会使用
function setOpenid(openid) { function setOpenid(openid) {
uni.setStorageSync('openid', openid); uni.setStorageSync('openid', openid);