Antom, leading provider of tailored payment solutionsAntom, leading provider of tailored payment solutions

跳转链接使用最佳实践

调用 支付咨询 接口后,针对不同支付方式,支付咨询 接口的响应中会返回不同类型的跳转 URL 用于签约流程的推进。本文为您提供不同端类型对应的跳转 URL 使用最佳实践。关于各个支付方式的 URL 实际返回情况,请参考 部分支付方式的URL返回类型汇总

跳转 URL 参数

针对不同的商户应用端类型(Web, WAP, App),不同支付方式在 支付咨询 接口的响应中会返回以下三种跳转 URL 中的部分或全部,用于签约推进:

链接类型

描述

normalUrl

HTTPS 地址的 URL,用于同一个浏览器页面跳转至支付方式页面。

示例:https://msp.boost-my.com/onlinepayment/authorise?source=alipay-connect&codeValue=https%3A%2F%2Fglobal.alipay.com%2F2810020400931LFH2t2mq1jjJ8zSetyv31VU

applinkUrl

用于推进签约流程的 Android App Links 或 iOS Universal Links。

示例:https://myboost.app.link/IvWm7QZkfjb?%24fallback_url=https%3A%2F%2Fmsp.boost-my.com%2Fonlinepayment%2Fauthorise&source=alipay-connect&codeValue=https%3A%2F%2Fglobal.alipay.com%2F2810020400931LFH2t2mq1jjJ8zSetyv31VU

schemeUrl

用于打开支付方式 app 的 scheme URL。

示例:boostapp://inAppDeeplink?deeplink_path=deeplink/onetimepayment&source=alipay-connect&codeValue=https%3A%2F%2Fglobal.alipay.com%2F2810020400931LFH2t2mq1jjJ8zSetyv31VU

注意

  • 在使用如上链接拉起签约时,可能因为买家没有安装支付方式 app 会发生链接跳转的异常,注意异常的处理。
  • 部分支付方式的签约链接并不支持多次打开,因此若拉起失败,建议更换 authState 重新获取签约链接并拉起。

WEB端

在 WEB 端场景下,consult 接口的响应中会返回 normalUrl。

URL打开方式

获取 normalUrl 字段的值后,需要将页面重定向至该签约链接。建议您新建一个标签页打开该签约链接以便引导买家完成签约,新建页面代码样例如下:

copy
if (serverResponse.normalUrl != null) {
    window.open(serverResponse.normalUrl, '_blank');
}

买家体验

以 normalUrl 对应的页面是扫码签约或账密登录界面为例,下图展示了 Web 端签约流程的示意图:

image.png

WAP端

在 WAP 端场景下, consult 接口的响应中,不同支付方式可能会返回以下三种 URL 中的部分或全部:

  • normalUrl
  • applinkUrl
  • schemeUrl

URL的使用策略

如果您收到的 consult 接口响应中,只返回了三种 URL 中的一种,则直接使用您收到的 URL 作为跳转链接。 如果您收到以上三种URL中的多个, 建议按照以下策略使用对应的URL:

  • iOS 系统:优先使用 applinkUrl,次优使用 schemeUrl,最后选择使用 normalUrl
  • 安卓系统:优先使用 schemeUrl,次优使用 applinkurl,最后选择使用 normalUrl

URL打开方式

使用 JavaScript 的页面跳转方法,可以使用如下代码打开 URL:

copy
window.location.href = URL;

买家体验

链接类型

支付体验

normalUrl

买家从商户 WAP 页面跳转至支付方式 WAP 页。支付方式 WAP 页面对买家呈现的内容取决于支付方式,分为以下两种类型:

  • 账密登录支付页面。后续的签约流程在支付方式 WAP 页内完成。
  • 引导买家点击按钮,用于拉起支付方式的 app。后续的签约流程在支付方式app内完成。

applinkUrl

根据买家是否安装支付方式 app,自动决定后续签约流程如何推进:

  • 买家安装了支付方式 app: 打开支付方式 app, 买家在 app 内完成签约。
  • 买家没有安装支付方式app: 打开WAP页面,买家在WAP页面按照指引继续完成签约。此流程通过系统默认浏览器打开并渲染跳转链接。

schemeUrl

支付体验取决于买家是否安装了支付方式app:

  • 买家安装了支付方式app: 打开支付方式app, 买家在app内完成签约。
  • 买家没有安装支付方式app: 无法通过此URL拉起app, 买家可能会停留在当前页面无法推进签约。

下图展示了 WAP 端签约流程的示意图。浏览器需要做的是将页面重定向至跳转链接对应的页面,或新标签页打开跳转链接对应的页面。

image.png

APP端

在 APP 端场景下, consult 接口的响应中,不同支付方式可能会返回以下三种URL中的部分或全部:

  • normalUrl
  • applinkUrl
  • schemeUrl

注意:在App端,除了上述用于跳转的 URL 参数, consult 接口的响应中还会返回 appIdentifier 参数。此参数是支付方式app对应的包名(package name),在app支付中用于判断钱包app是否安装,还可以用于避免在安卓系统中出现消除歧义框。

URL的使用策略

如果您收到的 consult 接口响应中,只返回了三种 URL 中的一种,则直接使用您收到的 URL 作为跳转链接。 如果您收到以上三种URL中的多个, 建议按照以下策略使用对应的URL:

  • iOS 系统:优先使用 applinkUrl,次优使用 schemeUrl,最后选择使用 normalUrl
  • 安卓系统:优先使用 schemeUrl,次优使用 applinkurl,最后选择使用 normalUrl

URL 打开方式

在 iOS 及 Android 系统中,可以通过以下方式打开跳转 URL :

iOS

Android

  • 应用外跳转:调用 iOS 方法打开跳转链接
  • 应用内打开
    • 使用 WKWebView 控件:
    • 使用 WKWebView 及 JSBridge
    • 使用 SafariViewController 组件
  • 根据是否安装支付方式 app, 分别采取应用外跳转或应用内打开方案。
  • 应用外跳转:调用 Android 方法打开跳转链接
  • 应用内打开:
    • 使用 WebView 控件
    • 使用 WebView 及 JavascriptInterface
    • 使用 Custom Tabs 插件
  • 根据是否安装支付方式 app, 分别采取应用外跳转或应用内打开方案。

打开方式优缺点对比

每种方式均有其优势,建议您根据系统情况及集成场景选择适合的打开方式。

打开方式

说明

应用外跳转:调用 Android/iOS 方法打开跳转 URL

Alipay推荐使用此方案

  • 方案优点:适配性更强,集成成本低,一次接入,可兼容所有支付方式及 Alipay 后续支持的更多支付方式。
  • 方案缺点:支付流程会跳出商户应用。

应用内打开跳转 URL

  • WKWebView
  • WebView

WKWebView/WebView 是一个内置的控件,可以在应用程序中嵌入一个 Web 浏览器。你可以使用它来加载网站的链接。

  • 方案优点:您可以定制化支付流程体验,为买家提供更好的支付体验。此外,可以通过此方案实现应用内跳转,即买家不离开商户端应用,在商户应用内完成后续支付流程。
  • 方案缺点:需要更多研发投入与测试。
  • WKWebView+JSBridge
  • WebView+JavascriptInterface

属于基于 WKWebView/WebView 的升级方案,使用 JSBridge/JavascriptInterface 后,WebView 可以直接调用 Android/iOS 方法打开跳转链接。

  • 方案优点:相较 WKWebView/WebView, 性能和安全性有所提升,可以为买家提供更好的定制化支付体验,可扩展性强。
  • 方案缺点:需要更多研发投入与测试。
  • SafariViewController
  • Custom Tabs

是 iOS/Android 官方提供的应用内打开链接的方式,与 WebView 相比,能力更全面。

  • 方案优点:可以和系统浏览器打通,与系统浏览器共用 cookie 等能力。集成方式较为简单。
  • 方案缺点:不支持定制化支付体验。

判断是否安装支付方式 app 后, 分别采取应用外跳转或应用内打开跳转 URL

根据买家是否安装支付方式 app,分别提供不同的跳转链接打开方式。

  • 优点:买家体验好。
  • 缺点:需要更多研发投入与测试。

代码示例(iOS)

方法1: 调用 iOS 方法打开跳转链接

以下代码示例是通过系统打开 URL 的方式,在 iOS 系统中实现从商户 app 跳转至支付方式 app:

copy
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 10.0) {
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:Url] options:@{} completionHandler:nil];
}else{ 
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:Url]];
}

方法2:应用内打开跳转 URL

当您倾向于在支付流程中使用应用内打开网页的方式进行下单处理,使用以下URL类型:

  • normalUrl
  • applinkUrl

注意:部分支付方式不支持 WAP 页面签约,访问 normalUrl 时会经过重定向并触发 scheme 的跳转来唤醒对应的支付方式 app 。WKWebView 会拦截到 scheme 外跳应用,您需要操作 WKWebView 的 decidePolicyForNavigationAction 方法并调用 iOS 方法打开跳转链接,即可实现商户 WKWebView 跳转到支付方式 App 签约。

使用 WKWebView

以下代码示例使用 WKWebView 在 iOS 的应用内加载支付方式页面:

copy
// 初始化 webview 配置
WKWebViewConfiguration *configuration = [[WKWebViewConfiguration alloc]init];
// 初始化 webView 
WKWebView *webView = [[WKWebView alloc]initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height) configuration:configuration];
webView.navigationDelegate = self;
//加载支付方式 URL
[webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:Url]]];
[self.view addSubview:self.webView];

以下代码示例展示操作 WKWebView decidePolicyForNavigationAction 方法实现商户 WebView 跳转到支付方式 App 签约:

copy
- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler{
    // WKWebView默认拦截scheme 需在下面方法手动打开
    // 打开外部应用 Safari等操作
    NSURL *url = navigationAction.request.URL;
    NSString *absoluteString = url.absoluteString;
    NSString *scheme = url.baseURL.scheme;

    DLog(@"navigationAction.request.URL.absoluteString=====> %@", absoluteString);
    if ([absoluteString isEqualToString:@"about:blank"]) {
        decisionHandler(WKNavigationActionPolicyCancel);
    }
    if (!([absoluteString containsString:@"https://"] || [absoluteString containsString:@"http://"])) {
        if ([absoluteString containsString:@"://"]) {
            NSString *urlHeader =  [absoluteString componentsSeparatedByString:@"://"][0];
            [MBProgressHUD showAutoMessage:[NSString stringWithFormat:@"Scheme\n%@://",urlHeader] toView:self.view];
            dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
                [self openAppWithUrlStr:navigationAction.request.URL];
                decisionHandler(WKNavigationActionPolicyAllow);
            });
        }
    } else {
        decisionHandler(WKNavigationActionPolicyAllow);
    }
}
使用 WKWebView 及 JSBridge

使用该方法会更加优化买家支付的体验,同时需要较强的开发能力,在通过 WKWebView 打开 URL 的基础上结合使用 JSBridge,有利于项目后续的维护及可扩展性,同时又能提高性能和安全性。使用 JSBridge可以帮助网页和原生应用之间的交互更加方便,实现 WAP 页面可以直接调用 app 的 native 方法。以下代码示例展示了在 WKWebView 中使用 JSBridge 的方法:

copy
[self.wkWebView evaluateJavaScript:bridge completionHandler:nil];
使用SFSafariViewController

SFSafariViewController 支持 normalUrl, applinkUrl, 及 schemeUrl 的打开及渲染。与 WebView 相比,能力更全面,集成方式较为简单。使用 SFSafariViewController 打开链接的实现方式可参考iOS官方提供的 SFSafariViewController 使用文档。以下代码示例展示了使用 SFSafariViewController 的方法:

copy
SFSafariViewController *safariVC = [[SFSafariViewController alloc] initWithURL:Url entersReaderIfAvailable:NO];
safariVC.delegate = self;
[self.navigationController presentViewController:safariVC animated:YES completion:nil];

方法3:判断支付方式 app 是否安装并分别处理

首先需要判断买家是否安装了支付方式 App ,再针对不同情况使用不同的 URL 打开方式进行处理。在 iOS 系统下,需要完成以下步骤:

  1. 在 info.plist 配置中添加 LSApplicationQueriesSchemes。需注意 info.plist 中对 scheme 有个数限制。
  2. 在代码中通过 canOpenURL 方法判断是否安装了支付方式 app。代码实现请参考以下示例:
copy
NSString *walletSchemeUrl = @"gcash://";

if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:walletSchemeUrl]]){
    // 支付方式应用已安装,建议通过原生方式打开
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:Url] options:@{} completionHandler:nil];
    
    return YES;
} else {
    // 支付方式应用未安装,建议通过 WEBVIEW 加载 H5 页面
    SFSafariViewController *safariVC = [[SFSafariViewController alloc] initWithURL:Url entersReaderIfAvailable:NO];
    safariVC.delegate = self;
    [self.navigationController presentViewController:safariVC animated:YES completion:nil];
    
    return NO;
}

代码示例(Android)

方法1: 调用 Android 方法打开跳转链接

以下代码示例是通过系统打开 URL 的方式,在 Android 系统中实现从商户 app 跳转至支付方式 app:

copy
try {
    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(Url));
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    // use the startActivity function to redirect to the wallet app 
    startActivity(intent);
} catch (Exception e) {
    e.printStackTrace();
}

使用此方法可能会出现消除歧义对话框。

什么是消歧对话框

Android App Link 在安装应用时向谷歌服务器请求身份认证。 如果身份验证失败,则 Android 应用程序链接将失效,并且当买家尝试通过此类链接打开应用程序时会出现消歧对话框。 买家需要手动选择如何打开链接。

此图显示了当买家点击 Android 应用程序链接时出现的消歧对话框示例。 买家需要手动选择打开链接的方式:使用谷歌地图或谷歌浏览器。

image

防止消歧对话框出现

当出现消歧对话框时,买家需要手动选择应用程序的打开方式,影响支付成功率。 因此,您需要防止出现消歧对话框,请执行以下操作之一:

  • 买家安装了支付方式 app 时,指定支付方式的 packageName,打开支付方式的 URL。
  • 买家没有安装支付方式 app 时,使用下面的示例代码实现离开商户 app, 并打开跳转 URL:
copy
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(applinkUrl));
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
//设置支付方式的包名
intent.setPackage(walletPackageName);
PackageManager packageManager = MainActivity.this.getPackageManager();
//查询是否有支持打开该链接的应用。
List<ResolveInfo> activities = packageManager.queryIntentActivities(intent, 0);
if (activities.size() <= 0) {
   //支付方式 app 未安装。请重新初始化 Intent,该链接会由系统默认支持的方式打开。
   intent = new Intent(Intent.ACTION_VIEW, Uri.parse(applinkUrl));
   intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
     startActivity(intent);
} else {
  //支付方式 app 已安装。通过指定支付方式包名打开支付方式 URL,消除歧义对话框不会出现。  
     startActivity(intent);
}

【注意】 以下列表展示了部分支付方式的 packageName 值:

  • AlipayHK: hk.alipay.wallet
  • GCash: com.globe.gcash.android
  • TrueMoney: th.co.truemoney.wallet
  • KakaoPay: com.kakao.talk
  • Touch 'n Go: my.com.tngdigital.ewallet
  • Dana: id.dana

方法2:应用内打开跳转 URL

当您倾向于在支付流程中使用应用内打开网页的方式进行下单处理,可以使用 WebView 容器加载 normalUrlapplinkUrl 为一个 WAP 页面:

  • normalUrl
  • applinkUrl

注意:部分支付方式不支持 WAP 页面授权, 访问 normalUrl 时会经过重定向并触发 scheme 的跳转来唤醒对应的支付方式 app 。WebView 会拦截到 scheme 外跳应用,您需要操作 WebView 的 shouldOverrideUrlLoading 方法并调用 Android 方法打开跳转链接,即可实现商户 WebView 跳转到支付方式 App 授权。

使用WebView

以下代码示例使用 WebView 在 Android 的应用内加载支付方式页面:

copy
WebView webView = findViewById(R.id.webview);
//设置 webview 客户端
webView.setWebViewClient(new WebViewClient() {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
        view.loadUrl(request.getUrl().toString());
        return super.shouldOverrideUrlLoading(view, request);
    }});

WebSettings webSettings = webView.getSettings();
//启用 javascript
webSettings.setJavaScriptEnabled(true);
//启用 scaling
webSettings.setSupportZoom(true);
//启用 scaling controls (buttons)
webSettings.setBuiltInZoomControls(true);
//Webview 有两种缓存模式,这里不使用缓存加载
webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE);
//允许 JavaScript 打开新窗口 (默认为 false)
webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
//允许 JavaScript 加在本地缓存
webSettings.setDomStorageEnabled(true);
//WAP 缓存大小 (无需手动设置)
//webSettings.setAppCacheMaxSize(1024 * 1024 * 8);
//WAP 缓存路径
String absolutePath = getApplicationContext().getCacheDir().getAbsolutePath();
//WAP 缓存大小
webSettings.setAppCachePath(absolutePath);
//是否允许 WebView 访问文件 (默认为 true)
webSettings.setAllowFileAccess(true);
//允许保存 WAP 缓存
webSettings.setAppCacheEnabled(true);
//使用概览模式时,如果页面宽度超过WebView显示,缩放页面以适应WebView(默认为false)
webSettings.setLoadWithOverviewMode(true);
//支持视口 HTML 元标签
webSettings.setUseWideViewPort(true);
//加载支付方式 URL
webView.loadUrl(Url);

以下代码示例使用 WebView 拦截到 scheme 外跳应用,通过对 WebView 设置 WebViewClient,使用 WebViewClient.shouldOverrideUrlLoading() 方法对 URL 进行拦截,拦截后判断其格式,然后 Native 解析到对应的方法和数据后执行本地方法:

copy
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
    if (request.getUrl().toString().startsWith("http")) {
        view.loadUrl(request.getUrl().toString());
        return super.shouldOverrideUrlLoading(view, request);
    } else {
        view.onPause();
        view.stopLoading();
        try {
          Intent intent = Intent.parseUri(uri, Intent.URI_INTENT_SCHEME);
          intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
          view.getContext().startActivity(intent);
        } catch (URISyntaxException e) {
          //alert not support this scheme
        }
        return false;
    }
}

注意:如果您的应用有跳转外部 app 白名单,需注意白名单的处理与配置,考虑旧版兼容性问题并减少应用的发版次数。

使用Webview及JavascriptInterface

使用该方法会更加优化买家支付的体验,同时需要较强的开发能力,建议在 WevView 中使用 JavascriptInterface。使用 JavaScriptInterface 可以帮助 Android 应用程序和 WebView 之间进行双向通信,使得 WAP 页面可以直接调用 app 的 native 方法,让您的应用程序更加灵活和强大,有利于项目后续的维护及扩展。以下代码示例展示了在 Webview 中使用 JavascriptInterface 的方法:

  1. 在 WebView 里声明一个 JavascriptInterface
copy
@JavascriptInterface
    public void openActivity(String url) {
        //根据实际情况添加到代码中
        try {
        Intent intent = Intent.parseUri(uri, Intent.URI_INTENT_SCHEME);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(intent);
    } catch (Exception e) {
        Toast.makeText(context, "App not installed", Toast.LENGTH_SHORT).show();
    }
}
  1. 给 WebView 设置 JavascripInterface
copy
mWebView.addJavascriptInterface(this, "bridge");
  1. 使用以下代码打开跳转 URL
copy
window.bridge.openActivity("Url");
使用 Custom Tabs

Custom Tabs 支持 normalUrl, applinkUrl, 及 schemeUrl 的打开及渲染。与 WebView 相比,能力更全面,集成方式较为简单。以下代码示例展示了使用 Custom Tabs 的方法:

  1. Gradle 项目文件中引入 Custom Tabs
copy
dependencies {
    ...
    implementation "androidx.browser:browser:1.4.0"
}
  1. 使用 Custom Tabs 在应用中打开一个 Chrome Tab
copy
// 使用 CustomTabsIntent.Builder 配置 CustomTabsIntent.
// 准备就绪后,调用 CustomTabsIntent.Builder.build() 来创建 CustomTabsIntent
// 使用 CustomTabsIntent.launchUrl() 启动所需的 URL

CustomTabsIntent.Builder builder = new CustomTabsIntent.Builder();
CustomTabsIntent customTabsIntent = builder.build();
customTabsIntent.launchUrl(this, Uri.parse(url));

更多关于如何使用 CustomTabs 打开链接的信息,请参考 Android 官方提供的 Custom Tabs使用指南

方法3:判断支付方式 app 是否安装并分别处理

首先需要判断买家是否安装了支付方式 App ,再针对不同情况使用不同的 URL 打开方式进行处理。

在 Android 系统下,此方案的实现需要完成以下步骤:

  1. 出于 Android 系统的隐私和安全政策,需要在 AndroidManifest.xml 中添加 <queries> 标签,以确保签约链接能打开对应的支付方式 App。<queries> 标签中需要配置支付方式 App 的包名(package name),对应的值可以从支付宝的 支付 接口返回中通过 appIdentifier 参数获取,或者联系 Alipay 技术支持。
copy
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          xmlns:tools="http://schemas.android.com/tools"
          package="com.llw.scandemo">
  
  ...
  <queries>
    <package android:name="th.co.truemoney.wallet" />
    <package android:name="com.eg.android.AlipayGphone" />
    <package android:name="my.com.tngdigital.ewallet" />
    ...
  </queries>
  ...
  
</manifest>
  1. 通过以下代码判断是否安装支付方式 app 并拉起签约:
copy
String Url = "applinkUrl/schemeUrl";
try {
    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(Url));
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    intent.setPackage("my.com.tngdigital.ewallet");
    // 通过以下两行代码判断是否安装支付方式 app
    PackageManager packageManager = MainActivity.this.getPackageManager();
    List<ResolveInfo> activities = packageManager.queryIntentActivities(intent, 0);
    
    if (activities.size() <= 0) {
        // 支付方式 app 未安装。建议在 WEBVIEW 中打开 H5 链接

        intent = new Intent(MainActivity.this, WebviewActivity.class);
        intent.setData(Uri.parse(Url));
        startActivity(intent);
    } else {
        
        // 支付方式 app 已安装。通过原生方式唤起交易。
        startActivity(intent);
    }
} catch (Exception e) {
    // 处理报错
    e.printStackTrace();
}

买家体验

链接的不同打开方式下所对应的的签约跳转流程如下

打开方式

签约跳转流程

应用外跳转:调用Android/iOS方法打开跳转URL

应用外跳转。签约体验取决于买家是否安装了支付方式 app:

  • 已安装: 从商户的 app 跳转至支付方式 app。即买家选择完支付方式后,通过 Alipay 返回的 schemeUrl applinkUrl 直接拉起钱包 App 进行签约,买家在支付方式 App 上完成签约。

image.png

  • 未安装: 从商户的 app 跳转至系统默认浏览器。即:
    • 系统浏览器签约:买家选择完支付方式后,通过 Alipay 返回的 normalUrl applinkUrl 从商家 App 跳转到系统默认浏览器打开的支付方式 WAP 页面,买家在此页面上完成登陆签约。

image.png

    • 系统浏览器转钱包 App 签约:买家选择完支付方式后,通过 Alipay 返回的 normalUrl 或 applinkUrl 从商家 App 跳转到系统默认浏览器打开的支付方式 WAP 页面,支付方式 WAP 页面会唤起支付方式 App,买家在支付方式 App 上完成签约。

image.png

应用内打开跳转URL

有应用外跳转及应用内跳转两种签约体验:

  • 商户 WebView 转钱包 App 签约(应用外跳转):买家选择完支付方式后,通过 Alipay 返回的 normalUrl applinkUrl 在商家 App 内置的 webview 进行打开。打开后页面会展示拉起支付方式的 WAP 页面,买家点击唤起支付方式 app 的按钮,此时需要开发者为 webview 设置处理 scheme 的能力,支付方式 WAP 页面会唤起支付方式 App。买家在钱包 App 上完成签约。

image.png

  • 商户 WebView 签约(应用内跳转):买家选择完支付方式后,通过 Alipay 返回的 normalUrl applinkUrl 在商家 App 内直接拉起支付方式的 WAP 页面,买家可在此页面上完成登陆支付。

image.png

最佳实践

建议您根据不同支付方式做打开跳转URL的固定配置,或根据支付方式、设备环境和返回内容进行路由。下图展示了根据不同支付方式做固定配置的示例:

lQLPJw_uBacEWz7NB_XNCZCw-xsn-lE-2mAEJxCWfsCmAA_2448_2037.png

针对每一种支付方式,您在决策使用什么方式打开跳转 URL 时,建议按照以下方式进行判断:lQLPJw-TEsQjFH7NB_XNCZCwEvbaFczDLXkEJxJfqYAKAA_2448_2037.png