如何配置Intent-Filter实现支付网关按钮点击跳转回安卓App并传递状态
Android支付网关回跳App实现方案
前置配置:AndroidManifest.xml注册Intent-Filter
首先需要在你要响应回跳的Activity节点下添加如下配置:
<activity android:name=".你要接收回跳的Activity类名" android:exported="true"> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <!-- 自定义Scheme和Host,建议使用唯一值避免和其他应用冲突 --> <data android:scheme="你的自定义scheme,例如myapppay" android:host="你的自定义host,例如pay.callback" /> </intent-filter> </activity>
支付网关页a标签跳转配置
直接使用Android官方的intent协议格式编写跳转链接,可以精准指定包名和目标Activity,不会唤起其他匹配同Scheme的应用:
- 取消支付(携带
message=FAILED)按钮的链接:
<a href="intent://pay.callback?message=FAILED#Intent;package=你的App包名;component=你的App包名/.你的接收回跳Activity类名;scheme=你的自定义scheme;end">CANCEL</a>
- 完成支付(携带
message=DONE)按钮的链接:
<a href="intent://pay.callback?message=DONE#Intent;package=你的App包名;component=你的App包名/.你的接收回跳Activity类名;scheme=你的自定义scheme;end">ACCEPT</a>
参数替换说明:
- 你的App包名:对应App的
applicationId,例如com.test.mall- 你的接收回跳Activity类名:对应Manifest里注册的Activity类名,例如
PayResultActivity- 自定义scheme、host:要和Manifest里配置的完全一致
App端接收参数逻辑
在接收回跳的Activity的onCreate方法中添加如下代码获取参数:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 省略布局初始化逻辑 Intent intent = getIntent(); if (Intent.ACTION_VIEW.equals(intent.getAction())) { Uri callbackData = intent.getData(); if (callbackData != null) { // 获取支付结果参数 String payResult = callbackData.getQueryParameter("message"); // 根据结果处理后续逻辑 if ("DONE".equals(payResult)) { // 展示支付成功页面 } else if ("FAILED".equals(payResult)) { // 展示支付失败/取消页面 } } } }
额外注意事项
如果需要处理用户未安装App的场景,可以在intent链接中添加S.browser_fallback_url=你的备用跳转地址参数,未检测到对应App时会自动跳转到备用地址,示例:
<a href="intent://pay.callback?message=DONE#Intent;package=com.test.mall;component=com.test.mall/.PayResultActivity;scheme=myapppay;S.browser_fallback_url=https://你自己的备用页地址;end">ACCEPT</a>
内容的提问来源于stack exchange,提问作者David Black
相关产品推荐
相关产品推荐

