支付宝小程序如何跳转到生活号应用授权链接

问题描述

  1. 在微信小程序上通过webview访问微信公众号授权链接,是可以正常访问的和信息授权的。
  2. 最近在开发支付宝小程序时,有个需求是在支付宝小程序打开支付宝生活号的应用授权长链,本想着可以直接跟微信小程序一样在webview访问就完事了,可是结果不如意。

问题判断

支付宝生活号的网页应用授权长链示例:

APPID:生活号应用的appid,ENCODED_URL:encode后的重定向链接

https://openauth.alipay.com/oauth2/publicAppAuthorize.htm?app_id=APPID&scope=auth_user&redirect_uri=ENCODED_URL&state=init

微信公众号网页授权链接示例:

APPID:公众号的appid,ENCODED_URL:encode后的重定向链接 https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=ENCODED_URL&response_type=code&scope=snsapi_base&state=init#wechat_redirect

  • 微信小程序通过web-view访问网页授权,官方默认白名单内应该有open.weixin.qq.com此域名,且有做公众号和小程序的关联,所以才可以正常访问
  • 支付宝小程序不能通过web-view访问网页授权,在支付宝小程序中会报openauth.alipay.com此域名的问题,因是支付宝官方的域名,也无法把校验文件放对方服务器,所以配置不了白名单。

问题排查

  • 支付宝小程序是否存在默认的全局白名单域名
  • 支付宝小程序是否有其他方式打开网页应用授权链接

排查过程

1. 查看支付宝小程序api文档

通过查阅文档发现,有个跳转支付宝应用或页面my.ap.openURL的api,属于是打开小程序外支付宝app内的webview。

文档链接:支付宝小程序跳转支付宝应用或页面方法

代码示例:

js 复制代码
my.ap.openURL({
  url: 'https://render.alipay.com/p/404', // 请将 url 替换为有效的页面地址
  success: (res) => {
    console.log('openURL success', res)
  },
  fail: (err) => {
    console.log('openURL success', err)
  }
});

注意点:

  • URL 为第三方 H5 页面或者支付宝官方给出的链接(以 https:// 或者 alipays:// 开头),且必须在 URL 白名单内。

  • URL 白名单包含两部分:

    • 默认的全局白名单,包含以 https://render.alipay.com/p/ 开头的所有 URL。所有小程序都可直接通过 my.ap.openURL 打开此类 URL。

    • 开放范围 内的小程序,可通过开放平台控制台 开发设置 > openURL 配置 自助申请添加其 URL 白名单。申请通过审核以后约 10 分钟生效。

      尝试使用my.ap.openURL打开支付宝生活号的网页应用授权长链,但报错:跳转目标不在白名单
      因未在openURL 配置openauth.alipay.com白名单
      配置需要上传目标链接的案例截图,比较繁琐

2. 找出默认的全局白名单域名

在上面的步骤的文档中,发现render.alipay.com是其中的白名单,后经尝试,ds.alipay.com也在白名单中

猜想: 是否可以通过https://render.alipay.com或者https://ds.alipay.com/变相打开网页应用授权链接?

3.了解支付宝内程序的跳转方式

4. 通过全局白名单链接打开网页应用授权链接

通过网站如何实现第三方支付宝登录了解到支付宝客户端端内进行 H5 支付宝登录(因我们的业务是在小程序内打开,属于端内打开)有两种方式:

  • 通过 js+api 的方式进行访问授权 (很明显不是我们想要)
  • 通过链接方式进行访问授权 (符合需求的)
  1. 采用通过链接方式进行访问授权:alipays://platformapi/startapp?appId=20000067&url=encodeURIComponent(url),其中appId=20000067是固定的,url是需要授权的业务页面链接
  2. 因my.ap.openURL不支持alipays://platformapi/startapp,需要将scheme 链接转换成https链接,即把 scheme 当作参数进行 UrlEncode 编码后,拼接在 https://ds.alipay.com/?scheme= 后。
js 复制代码
const openUrl = `https://ds.alipay.com/?scheme=` 
                    + encodeURIComponent(`alipays://platformapi/startapp?appId=20000067&url=${encodeURIComponent(url)}`) 
  1. my.ap.openURL打开以上链接,正常打开授权页面,再尝试另外一个全局白名单域名,也能正常打开,即
js 复制代码
const openUrl = `https://render.alipay.com/p/s/i/?scheme=` 
                    + encodeURIComponent(`alipays://platformapi/startapp?appId=20000067&url=${encodeURIComponent(url)}`) 

总结

社区有类似的问答:h5上直接点击连接,打开支付宝并跳转到商户应用授权页面

支付宝小程序跳H5方式

  • 跳普通H5(白名单域名):webview
  • 跳网页授权链接:my.ap.openURL

支付宝小程序openURL全局白名单

使用my.ap.openURL打开网页授权链接

相关推荐
Jiaberrr1 小时前
JS实现树形结构数据中特定节点及其子节点显示属性设置的技巧(可用于树形节点过滤筛选)
前端·javascript·tree·树形·过滤筛选
我码玄黄2 小时前
THREE.js:网页上的3D世界构建者
开发语言·javascript·3d
爱喝水的小鼠2 小时前
Vue3(一) Vite创建Vue3工程,选项式API与组合式API;setup的使用;Vue中的响应式ref,reactive
前端·javascript·vue.js
小晗同学2 小时前
Vue 实现高级穿梭框 Transfer 封装
javascript·vue.js·elementui
WeiShuai2 小时前
vue-cli3使用DllPlugin优化webpack打包性能
前端·javascript
forwardMyLife2 小时前
element-plus的面包屑组件el-breadcrumb
javascript·vue.js·ecmascript
mez_Blog4 小时前
个人小结(2.0)
前端·javascript·vue.js·学习·typescript
珊珊而川4 小时前
【浏览器面试真题】sessionStorage和localStorage
前端·javascript·面试
森叶4 小时前
Electron 安装包 asar 解压定位问题实战
前端·javascript·electron
深情废杨杨4 小时前
前端vue-插值表达式和v-html的区别
前端·javascript·vue.js