第三方登录-pc支付宝扫码登录流程

最近有个奇葩的需求,用户要支持支付宝扫码登录。这个需求很少见,那就做一下,看起来有点难,其实很简单。
先看结果
在这里插入图片描述

流程梳理

在这里插入图片描述

核心代码

获取支付宝扫码页面的url

	// 获取支付宝扫码登录页面的url
  async function getZFBLoginUrl() {
    try {
      let redirectUrl = 'https://yx.hubeidaily.net/zfblogin'; 
      let res: any = await getAuthAlipayPcUrl({ redirectUrl });
      if (res?.code !== 200) return;
      let url = res.data;
      window.open(url);
    } catch (error) {}
  }

<div onClick={() => getZFBLoginUrl()}>支付宝扫码登录</div>

在指定页面检测是否绑定账号

Zfblogin.tsx 空白页面

let urlState = useGetUrlParams('state');
let code = useGetUrlParams('auth_code');
const [token, setToken] = useAtom(tokenStore);
const setUserInfo = useSetAtom(userInfoStore);
const navigate = useNavigate();

useEffect(() => {
  if (urlState) isBinding(code, urlState);
}, []);


// 判断是否绑定
async function isBinding(code: string, state: string) {
  try {
    let params = { auth_code: code, state };
    let res: any = await getAuthAlipayAuthorize(params);
    console.log('判断是否绑定-res: ', res);
    if (res.code === 200) {
      toast('登录成功', 'success');
      setUserInfo(res.data.user);
      setToken(res.data.token);
      setTimeout(() => {
        handleLoginSuc();
      }, 1000);
    } else if (res.code === 10000) {
      // 未绑定
      navigate('/accountBind?type=zfb&state=' + state);
    } 
  } catch (error) { }
}

用已有账号绑定支付宝账号

AccountBind.tsx 账号绑定页面,手机号验证码绑定

  1. 如果有账号,直接绑定,并登录
  2. 如果没有账号,去注册
    let state = useGetUrlParams(‘state’); // state支付宝绑定时需要,支付宝返回来的
 // 提交
 const submit = async () => {
   let params = {
     ...allData,
     state: state,
   };
   try {
     setLoading(true);
     let res: any = await postAuthAlipayPcPersonBind(params);
     console.log('支付博绑定-res: ', res);
     if (res.code === 200) {
       toast('绑定成功', 'success');
       setUserInfo(res.data.user);
       setToken(res.data.token);
       setTimeout(() => {
         handleLoginSuc();
       }, 1000);
     } else if (res.code === 10001) {
       // 未注册
       toast('你还未注册,请先注册', 'warnning');
       setTimeout(() => {
         showLoginCpn();
       }, 1000);
     }
   } finally {
     setLoading(false);
   }
 };

未注册,则注册并登录

register.tsx 注册页面,注册绑定登录;区分普通登录和支付宝登录

  let state = useGetUrlParams('state'); // state 微信、支付宝绑定时需要

  // 提交
  const submit = async () => {
    try {
      let params = await formRef?.current?.validateFieldsReturnFormatValue();
      let res: any;
      if (!state) {
        // 普通注册
        res = await postAuthRegisterPerson(params);
      } else {
        // 支付宝注册
        params.state = state;
        res = await postAuthAlipayPcPersonRegister(params);
      }
      if (res.code === 200){}  // 成功后再执行相应逻辑
    } catch (error) {
      setLoading(false);
      console.log('error: ', error);
    }
  };

至此,大功告成;
其实,这里边核心东西不难,前端就是调调api,但是交互和测试会比较麻烦,要考虑注册、登录、绑定等一系列的交互。
在这里插入图片描述

  • 13
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
PC网站上实现微信扫码登录功能,可以按照以下步骤进行: 1. 注册微信开放平台账号:访问微信开放平台(https://open.weixin.qq.com/),使用微信账号登录并注册一个开放平台账号。 2. 创建应用并获取应用ID和密钥:在微信开放平台上创建一个应用,并获取对应的应用ID(AppID)和密钥(AppSecret)。 3. 引入微信登录SDK:下载并引入微信登录的Java SDK,可以使用官方提供的SDK或第三方库,例如weixin-java-tools。 4. 配置回调URL:在微信开放平台上配置回调URL,该URL用于接收微信授权回调的code。 5. 实现扫码登录页面:在PC网站上创建一个扫码登录页面,可以使用HTML和CSS进行布局和样式设计。 6. 发起微信授权请求:在扫码登录页面中,通过调用微信登录SDK提供的接口,生成带有应用ID和回调URL的二维码图片,并显示在页面上供用户扫码。 7. 处理微信授权回调:在设置的回调URL对应的接口中,获取微信授权回调的code,并使用该code调用微信登录SDK提供的接口,获取access_token和openid等用户信息。 8. 实现登录逻辑:根据获取到的用户信息,可以选择将用户信息保存到数据库中,或者进行其他逻辑处理。 需要注意的是,微信授权登录涉及到用户隐私和安全,建议在实施过程中加强安全验证和保护用户信息。 以上是一个大致的步骤,具体实现过程可以参考微信开放平台的文档和示例代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值