一、配置 backSCAppScheme
- 在跳转支付宝的链接中,添加 backSCAppScheme 参数,指定回调到当前 App 的 Scheme 。例如:
alipays://platformapi/startapp?appId=XXXXXXXXXXXX&backSCAppScheme=myAppScheme
- 这里的 myAppScheme 是 App 自定义的 Scheme,支付宝完成操作后会通过该 Scheme 回调到当前的 App。
二、注册 Scheme
- 为了让 App 能够接收支付宝的回调,需要在 HarmonyOS 应用的 module.json5 中注册对应的 Scheme。例如:
{
"module": {
"name": "entry",
"type": "entry",
"description": "$string:module_desc",
"mainElement": "EntryAbility",
"deviceTypes": [
"phone"
],
"abilities": [
{
"name": "EntryAbility",
"srcEntry": "./ets/entryability/EntryAbility.ets",
"description": "$string:EntryAbility_desc",
"icon": "$media:logo_launcher",
"label": "$string:EntryAbility_label",
"startWindowIcon": "$media:logo_login",
"startWindowBackground": "$color:start_window_background",
"exported": true,
"skills": [
{
"actions": [
"ohos.want.action.view"
],
"uris": [
{
"scheme": "myAppScheme"
}
]
}
]
}
]
}
}
- 这样,当支付宝通过 myAppScheme:// 回调时,系统会将回调路由到 App。
三、处理 Scheme 回调
- 在 HarmonyOS 中,可以通过 UIAbility 的 onCreate 方法监听 Scheme 回调,并执行跳转回 App 的逻辑。以下是一个示例代码:
import UIAbility from '@ohos.app.ability.UIAbility';
import Want from '@ohos.app.ability.Want';
import router from '@ohos.router';
export default class EntryAbility extends UIAbility {
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate');
}
onNewWant(want: Want, launchParam: AbilityConstant.LaunchParam): void {
// 获取支付宝返回的 Scheme URL
const returnedUrl = want.uri;
if (returnedUrl && returnedUrl.startsWith('myAppScheme://')) {
}
}
}
四、拉起支付宝功能
- 在 HarmonyOS 中,可以通过 UIAbilityContext 模块拉起支付宝功能。例如:
import { common, Want, Permissions } from '@kit.AbilityKit'
let url = 'alipays://platformapi/startapp?appId=XXXXXXXXXXXX&backSCAppScheme=myAppScheme'
let context = getContext(this) as common.UIAbilityContext
let want: Want = {
uri: url,
};
context.startAbility(want)
.then(() => {
Router.back()
console.info('Open link succeeded.');
})
.catch((err:BusinessError) => {
console.error(`Open link failed, code is ${err.code}, message is ${err.message}`);
});
- 调用 openAlipay 方法后,会跳转到支付宝的指定功能页面。
五、支付宝完成操作后回调
- 当支付宝完成操作后,会通过 backSCAppScheme 指定的 Scheme 回调到 App。例如:
myAppScheme://?result=success
- 在 UIAbility 的 onNewWant 方法中,可以解析回调 URL 并跳转回 App 的指定页面。
六、注意事项
- Scheme 唯一性:确保 backSCAppScheme 中的 Scheme 是唯一的,避免与其他应用冲突。
- 安全性:在服务端验证回调结果时,务必使用支付宝公钥对返回数据进行验签,确保数据未被篡改。
- 兼容性:不同版本的支付宝客户端可能对回调机制的支持有所不同,建议进行充分的测试。
七、完整流程示例
- 在 App 中调用支付宝功能,传递 backSCAppScheme 参数;
- 支付宝完成操作后,通过 backSCAppScheme 回调到 App;
- 在 UIAbility 的 onNewWant 方法中解析回调 URL,并跳转回 App 的指定页面。