关于移动端H5获取微信非静默授权被拦截进入【微信快照页】问题及解决方案

37 篇文章 0 订阅
6 篇文章 0 订阅

业务需求场景:登录用户 — 微信分享H5页面URL — 好友(非登录用户)打开分享页面时,要求获取用户授权,拿到非登录用户的微信相关信息才可以继续访问


问题描述:有部分用户反馈,页面访问不正常即,打开分享页面,进入了微信快照页,并且右下角有提示,需要用户点击【使用完整服务】后,才能正常拉取授权进入分享页


官方描述:快照页将会默认对用户屏蔽网页授权弹窗,用户在快照页中仅可进行滑动浏览操作,其他交互将被限制,并提示用户 “该网页需获取个人信息才可使用完整服务,当前仅可浏览部分内容”。用户如需要使用完整网页服务,可轻触右下角 “使用完整服务” 按钮触发授权弹窗,用户确认后进入原网页。

微信网页授权能力调整公告https://developers.weixin.qq.com/community/minihome/doc/000c2c34068880629ced91a2f56001


授权流程:(vue项目为例)


解决方案:

首先要明白为什么会进入快照页,客观看这里:

现有的业务代码逻辑正好命中不规范中第一条: 访问网页时就去拉取授权

猜想,如果在拉取授权前跳转一个过渡页,过渡页明确告知用户要去拉取微信授权获取个人信息,且由用户点击确定按钮操作后,再执行网页授权逻辑,这样就符合微信授权规范了吧?修改授权逻辑,增加过渡页:

测试,ok,完美解决分享页面拉取授权进入快照页问题 ~ 


授权过渡页逻辑代码:(供参考)

<template>
  <div>
    <h2 class="double-pd14">正在获取授权,请耐心等待...</h2>

    
    <confirm-dialog
      :is-show-dialog="showDialog"
      :show-cancel-btn="false"
      dialog-title="授权确认提示xxxxxx"
      dialog-message="是否允许获取您的微信授权xxxxxxx"
      @confirmEvents="onSetWxAuthHandle"
    />
  </div>
</template>

<script>
export default {
  name: 'wx-auth-page',
  components: {
    confirmDialog
  },
  data () {
    return {
      showDialog: false
    }
  },
  created () {
    this.onCheckWxRedirect()
  },
  methods: {
    async onCheckWxRedirect () {
      const {
        code,
        state
      } = this.$route.query
      
      // 判断是否授权重定向
      if (code && state === 'shareLogin') {
        // 重定向回来,业务逻辑
        // 请求接口续签token,跳转分享页
      } else {
        // 非重定向,唤起授权提示
        this.showDialog = true
      }
    },

    // 发起微信授权
    async onSetWxAuthHandle () {
      const {
        origin,
        pathname
      } = this.onReturnWindowOpt()
      this.showDialog = false
      // 接口逻辑略
      await setWxOpenAuth({
        state: 'shareLogin',
        redirectUrl: encodeURIComponent(origin + pathname)
      })
    },

    // 失败跳转登录,错误补偿机制
    wxAuthErrorEffect () {
      this.$toast('授权失败')
      const { origin } = this.onReturnWindowOpt()
      window.location.replace(`${origin}${PRODUCT_NAME}login`)
    },

    onReturnWindowOpt () {
      const {
        origin,
        pathname
      } = window.location
      return {
        origin,
        pathname
      }
    }
  }
}
</script>

移动端H5调用微信支付是指在手机上运行的网应用使用微信支付进行支付交易。移动端H5通常是通过微信内置的浏览器或者第三方浏览器打开的网应用。要实现移动端H5调用微信支付,需要进行以下步骤: 首先,开发人员需要在微信公众平台上注册并申请一个微信支付商户号。商户号是与微信支付相关联的唯一标识符。 接下来,开发人员需要在移动端H5的网应用中引入微信支付的JSAPI。微信支付提供了一组JavaScript API,开发人员可以通过这些API来实现支付功能。 在用户点击支付按钮时,网应用需要调用微信支付的统一下单API,向微信服务器发送支付请求。支付请求需要包括商户号、订单号、支付金额、用户的openid等必要信息。 微信服务器收到支付请求后,会返回一个prepay_id给移动端H5的网应用。网应用可以将这个prepay_id传递给微信支付的JSAPI,用于发起支付。 在调用微信支付的JSAPI时,需要传递一些必要的参数,如appId、timeStamp、nonceStr和签名等。这些参数是为了验证支付请求的合法性,并确保支付过程的安全性。 最后,用户确认支付后,网应用会调用微信支付的JSAPI发起支付。微信支付会弹出一个支付窗口,用户可以在该窗口中输入支付密码完成支付。 支付过程结束后,微信服务器会将支付结果通知给网应用。网应用可以根据支付结果进行相应的处理,如提示用户支付成功或失败,并进行相应的操作。 总之,移动端H5调用微信支付需要开发人员在网应用中引入微信支付的JSAPI,并按照微信支付的流程进行相应的调用和处理,以实现支付功能。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值