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

问题描述

  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打开网页授权链接

相关推荐
程序员_三木16 分钟前
Three.js入门-Raycaster鼠标拾取详解与应用
开发语言·javascript·计算机外设·webgl·three.js
开心工作室_kaic2 小时前
springboot476基于vue篮球联盟管理系统(论文+源码)_kaic
前端·javascript·vue.js
川石教育2 小时前
Vue前端开发-缓存优化
前端·javascript·vue.js·缓存·前端框架·vue·数据缓存
搏博2 小时前
使用Vue创建前后端分离项目的过程(前端部分)
前端·javascript·vue.js
温轻舟2 小时前
前端开发 之 12个鼠标交互特效上【附完整源码】
开发语言·前端·javascript·css·html·交互·温轻舟
web135085886352 小时前
2024-05-18 前端模块化开发——ESModule模块化
开发语言·前端·javascript
LCG元3 小时前
javascript页面设计案例【使用HTML、CSS和JavaScript创建一个基本的互动网页】
javascript
未来之窗软件服务3 小时前
AlipayHK支付宝HK接入-商户收款(PHP)
支付宝
技术程序猿华锋4 小时前
Gemini 2.0 Flash 体验版实测:日常视觉识别的最佳选择,关键在于其API Key现在是免费调用
开发语言·javascript·ecmascript·googlecloud·gemini
TttHhhYy4 小时前
uniapp+vue开发app,蓝牙连接,蓝牙接收文件保存到手机特定文件夹,从手机特定目录(可自定义),读取文件内容,这篇首先说如何读取,手机目录如何寻找
开发语言·前端·javascript·vue.js·uni-app