鸿蒙APP接入支付宝支付能否复用Android平台信息?
结论
如果现有支付宝应用的 Android 平台信息绑定了原 Android 包名,而鸿蒙应用使用的是另一个包名,通常无法直接复用原有的平台配置。
鸿蒙应用需要配置与实际包名一致的平台信息。如果支付宝开放平台不允许同一应用配置两套 Android 包名,可以新建一个支付宝应用,在 Android 平台信息中填写鸿蒙应用的包名,并完成签名、公钥、支付产品签约和上线审核等配置。
需要注意,新建应用并填写包名只是接入流程的一部分,不代表支付功能已经接入完成。是否需要新建支付宝应用,要看控制台能否在原应用下新增平台实例,以及鸿蒙支付宝 SDK 接入文档的具体要求。
为什么不能直接复用原 Android 平台信息
支付宝客户端支付通常会校验应用身份,其中不只有支付宝侧的 app_id,还可能包括:
- 应用包名或 Bundle Name
- 应用签名证书信息
- 支付宝应用的审核和上线状态
- 已签约的支付产品
- 服务端使用的应用私钥及支付宝公钥
即使 Android 应用和鸿蒙应用属于同一个业务产品,只要包名不同,平台通常就会把它们视为不同的客户端身份。
例如:
Android 包名:com.example.mall.android
鸿蒙 Bundle Name:com.example.mall.harmony
如果让 com.example.mall.harmony 客户端使用只登记了 com.example.mall.android 的支付宝平台配置,可能出现支付拉起失败、签名校验失败或应用身份不匹配等问题。
推荐处理步骤
1. 确认鸿蒙应用的实际包名
应以工程最终构建配置中的 Bundle Name 为准,不要填写产品名称、模块名称或临时测试包名。
配置示意:
{
"app": {
"bundleName": "com.example.mall.harmony"
}
}
不同版本的 HarmonyOS 工程可能采用不同的配置文件结构,具体以当前工程和 SDK 文档为准。
2. 检查原支付宝应用能否新增平台配置
登录支付宝开放平台,查看现有应用是否允许新增一套 Android 平台信息,并绑定鸿蒙应用的包名。
可以按下面的情况处理:
- 如果同一个支付宝应用可以分别登记多个客户端包名,优先在原应用下补充鸿蒙应用的平台配置。
- 如果 Android 平台只能绑定一个包名,或者修改包名会影响已经上线的 Android 应用,就不要覆盖原配置。
- 如果控制台明确要求鸿蒙客户端使用独立应用,则需要新建支付宝应用。
不要直接修改已上线 Android 应用的包名配置来接入鸿蒙应用,否则可能影响原 Android 客户端的支付功能。
3. 必要时新建支付宝应用
如果原应用无法同时保存两套包名,可以新建应用,并在 Android 平台信息中填写鸿蒙应用的实际包名:
com.example.mall.harmony
之后还要完成以下配置:
- 配置应用签名或证书信息。
- 配置接口加签方式。
- 上传或登记应用公钥。
- 保存支付宝公钥或支付宝公钥证书。
- 签约并开通所需的支付产品。
- 提交审核,确认应用已达到可调用状态。
- 将新应用对应的
app_id、密钥和证书同步到支付服务端。
新建应用会获得新的 app_id,服务端不能继续无条件使用原 Android 应用的 app_id 和密钥。
服务端配置示例
下面的代码只用于说明配置关系,字段名称需要根据实际支付 SDK 调整:
alipay:
harmony:
app-id: "鸿蒙对应的支付宝应用APP_ID"
private-key: "${ALIPAY_HARMONY_PRIVATE_KEY}"
alipay-public-key: "${ALIPAY_HARMONY_PUBLIC_KEY}"
notify-url: "https://pay.example.com/alipay/notify"
创建订单时,需要根据客户端平台选择对应的支付宝应用配置:
AlipayConfig config = platform.equals("harmony")
? harmonyAlipayConfig
: androidAlipayConfig;
String orderString = alipayOrderService.createOrder(config, orderRequest);
这里的 AlipayConfig 和 createOrder 只用于说明配置关系,并不是支付宝鸿蒙 SDK 的固定 API。实际类名、参数和调用方式应以所用 SDK 的官方文档为准。
客户端只使用服务端生成的订单信息拉起支付,不应保存应用私钥:
const orderString = await requestOrderFromServer({
platform: "harmony",
orderId: orderId
});
// 使用支付宝鸿蒙 SDK 拉起支付。
// 具体 API 名称和参数以当前 SDK 文档为准。
await invokeAlipaySdk(orderString);
注意事项
不要只替换包名
支付宝应用配置通常不只有包名。新建应用后,还要重新核对 app_id、签名证书、公私钥、支付产品签约和回调地址。如果只填写新包名,却继续使用旧应用的全部服务端参数,很容易造成应用身份不一致。
不要在客户端生成支付签名
应用私钥必须保存在服务端。客户端提交订单参数后,由服务端调用支付宝接口或生成签名后的订单字符串,再交给鸿蒙客户端拉起支付。
区分测试包和正式包
如果测试版和正式版使用不同的包名或签名证书,需要分别确认支付宝平台是否要求独立配置。正式发布前,还应使用正式包名和正式签名重新验证。
新旧应用的交易数据可能分离
如果鸿蒙端使用新建的支付宝应用,其交易、账单、权限和回调配置可能会与原 Android 应用分开管理。服务端需要记录每笔订单使用的渠道应用标识。退款、查询和关闭订单时,也要继续使用创建该笔交易时对应的支付宝应用配置。
以当前接入文档和控制台能力为准
“鸿蒙 SDK 使用 Android 平台信息”并不表示鸿蒙应用可以复用任意 Android 包名。如果控制台没有明确说明包名数量、签名类型或鸿蒙应用的配置方式,建议向支付宝开放平台技术支持确认:
- 一个支付宝应用能否绑定多个客户端包名;
- 鸿蒙 Bundle Name 应填写在哪个字段;
- 鸿蒙应用需要提交哪种签名或证书信息;
- 新建应用后是否需要重新签约支付产品。
更准确的判断方式是:包名不一致时,必须为鸿蒙应用配置自己的平台身份。只有原应用无法新增该身份时,才需要新建支付宝应用。完成包名配置后,还要配置密钥、完成签约和审核,并切换服务端参数,整个支付接入才算完成。
备注:内容仅供参考。
