浙里办对接(单点登录/二次回退)

注意流程和文档,使用vue搭建项目,支持npm run build

用到单点登录 建议设置一个中间页帮助过度

<template></template>
<script>
export default {
  onShow() {
    // 设备类型判断
    const sUserAgent = window.navigator.userAgent.toLowerCase();
    const bIsAlipayMini =
      sUserAgent.indexOf("miniprogram") > -1 &&
      sUserAgent.indexOf("alipay") > -1;

    // 二次回退 浙里办支付宝小程序
    if (bIsAlipayMini) {
      console.log("支付宝");
      console.log(getApp().globalData.token, 45648949);
      if (getApp().globalData.token) {
        my.navigateBack();
      }
    } else {
      console.log("浙里办");
      function watchApp() {
        console.log(window.performance.navigation.type, 456786);
        window.addEventListener(
          "pageshow",
          function (event) {
            if (
              event.persisted ||
              (window.performance && window.performance.navigation.type == 2)
            ) {
              ZWJSBridge.close(); //这个是浙里办内部的api,调用close()接口关闭通过openLink打开的页面
            }
          },
          false
        );
      }
      watchApp();
    }

    // 单点登录
    function getQuery(name) {
      var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
      var r = window.location.search.substr(1).match(reg);
      if (r != null) return unescape(r[2]);
      return null;
    }
    let ticket = getQuery("ticket");
    console.log(ticket);
    if (!ticket) {
      if (bIsAlipayMini) {
        console.log("支付宝");
        window.location.href =
          "https://puser.zjzwfw.gov.cn/sso/alipay.do?action=ssoLogin&scope=1&servicecode=";
      } else {
        console.log("浙里办");
        window.location.href =
          "https://puser.zjzwfw.gov.cn/sso/mobile.do?action=oauth&scope=1&servicecode=";
      }
    } else {
      // 单点登录成功
      if (bIsAlipayMini) {
        uni.navigateTo({
          url: "../index/index",
        });
      } else {
        uni.redirectTo({
          url: "../index/index",
        });
      }
    }
  },
};
</script>

在支付宝容器内,调用网络请求无法进入onSuccess 没有数据返回

// 使用this.$nextTick
    this.$nextTick(() => {
      this.request(ticket);
    })

二次回退遇到的问题

无法监听是否是通过返回进入页面,那么就要换一个思路,不必沉溺于以往的方法
第一次进入中间页的时候我们是不需要进行回退的
在单点登录之后进入我们的项目然后进行返回操作的时候我们才需要进行回退操作
所以,在无法监听返回操作的时候,那么我们就通过token用户信息判断我们是不是第一次进入项目
有token的时候,则我们是通过返回进入中间页的,那么我们就进行回退操作

你可能感兴趣的:(对接(浙里办),前端,javascript,小程序)