鸿蒙APP接入支付宝支付SDK能否沿用现有APPID?
结论
现有 Android、iOS 应用使用的支付宝开放平台 APPID 可以继续用于鸿蒙版,但需要满足几个条件:鸿蒙版仍属于同一业务应用和同一商户主体,并且该 APPID 已开通“App 支付”等所需能力。
APPID 标识的是支付宝开放平台中的应用,与 Android、iOS 或 HarmonyOS 等设备平台无关。支付订单仍由服务端使用该 APPID 和应用私钥签名,鸿蒙客户端负责调用支付宝鸿蒙 SDK。
如果开放平台暂时没有 HarmonyOS 选项,不要直接选择 Android 并随意填写签名。Android 应用签名通常指 APK 签名证书指纹,它与 HarmonyOS 应用签名、支付宝接口使用的 RSA2 签名都不是一回事。除非支付宝鸿蒙 SDK 的当前接入文档明确要求复用 Android 配置入口,否则应先确认是否无需新增平台信息,或者联系支付宝开放平台技术支持开通相应配置。
接入前需要确认的条件
复用现有 APPID 前,需要检查以下内容:
- 现有开放平台应用已经签约并开通“App 支付”能力。
- 鸿蒙版与原 Android、iOS 版本属于同一个产品,并非独立运营、独立结算的新应用。
- 服务端继续使用该应用对应的支付宝公钥、应用私钥和签名方式。
- 鸿蒙 SDK 支持当前使用的 HarmonyOS 版本和设备范围。
- 开放平台应用、签约及商户账户状态均正常。
如果鸿蒙版由不同主体运营,或者需要独立结算、权限和风控管理,更适合创建新的开放平台应用,并使用新的 APPID。
推荐接入方式
1. 复用现有开放平台应用
进入支付宝开放平台,找到 Android、iOS 当前使用的应用,核对其 APPID、App 支付签约状态和接口加签方式。
增加 HarmonyOS 客户端并不意味着需要在支付请求中伪造成 Android 应用。是否需要补充 HarmonyOS 包信息,应以当前鸿蒙支付 SDK 的接入要求为准。
2. 由服务端创建支付订单
客户端不应保存应用私钥,也不应自行拼接和签名完整的支付参数。服务端调用 alipay.trade.app.pay 生成支付宝 SDK 所需的订单字符串,然后将其返回给鸿蒙客户端。
以下是 Java 服务端的典型写法:
AlipayClient alipayClient = new DefaultAlipayClient(
"https://openapi.alipay.com/gateway.do",
APP_ID,
APP_PRIVATE_KEY,
"json",
"UTF-8",
ALIPAY_PUBLIC_KEY,
"RSA2"
);
AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();
AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
model.setOutTradeNo(outTradeNo);
model.setTotalAmount("0.01");
model.setSubject("订单支付");
model.setProductCode("QUICK_MSECURITY_PAY");
request.setBizModel(model);
request.setNotifyUrl("https://example.com/alipay/notify");
AlipayTradeAppPayResponse response = alipayClient.sdkExecute(request);
String orderString = response.getBody();
在生产环境中,金额、订单号和商品信息必须由服务端根据真实订单生成,不能直接采用客户端提交的数据。
3. 鸿蒙客户端调用支付 SDK
鸿蒙客户端从业务服务端取得 orderString 后,将其传给支付宝鸿蒙 SDK。SDK 的具体类名、方法名和返回值结构可能随版本变化,应按照已安装版本的配套文档调用,不要直接套用 Android 的 PayTask API。
一般调用流程如下:
鸿蒙客户端创建业务订单
-> 业务服务端调用 alipay.trade.app.pay
-> 服务端返回 orderString
-> 客户端调用支付宝鸿蒙 SDK
-> 支付宝返回客户端结果
-> 服务端接收异步通知并验签
-> 服务端查询并更新最终订单状态
客户端返回“支付成功”只能用于页面提示。最终支付结果必须以服务端验签后的支付宝异步通知,或者主动查询接口返回的结果为准。
Android 签名应该怎么配置
如果开放平台页面显示“Android 包名”和“Android 应用签名”,需要区分以下三种签名:
- Android 应用签名:用于识别 APK,一般来自 Android 签名证书。
- HarmonyOS 应用签名:用于签署鸿蒙应用,证书格式和指纹规则由鸿蒙工具链决定。
- 支付宝接口签名:由服务端使用应用私钥完成的
RSA2签名。
它们的用途不同,不能相互替代。
如果支付宝当前文档没有说明如何在 Android 配置项中填写 HarmonyOS 签名,就不要自行填写 .p12 密码、公钥内容或证书序列号,也不要把某个 SHA-256 指纹转换成 Android 签名值。配置错误可能造成应用审核失败、SDK 无法拉起或身份校验不通过。
只有官方接入说明明确要求“通过 Android 入口登记 HarmonyOS 应用”,并给出包名字段和证书指纹算法时,才应按照说明提取 HarmonyOS 发布证书的信息。调试证书与正式发布证书通常不同,生产配置必须使用最终发布包对应的证书。
回调验签不能省略
业务服务端收到支付宝异步通知后,需要使用支付宝公钥验签,并至少核对以下字段:
app_id是否等于预期的APPIDout_trade_no是否存在且属于当前商户total_amount是否与服务端订单金额一致seller_id是否属于预期收款账户trade_status是否为业务允许处理的状态
验签通过并完成幂等处理后,才能更新订单状态。不要仅凭鸿蒙客户端的返回值发货或开通服务。
注意事项
- 复用
APPID不代表继续使用 Android SDK。鸿蒙客户端必须使用支付宝提供的鸿蒙 SDK,并按照对应方式集成。 - 不要将应用私钥、商户敏感配置或完整的签名逻辑放入鸿蒙客户端。
- 沙箱环境和生产环境的网关、账号及密钥配置应分开管理。
- 更换应用密钥后,需要同步更新服务端私钥和开放平台配置。
- 如果控制台强制要求选择平台,却没有 HarmonyOS 入口,应提交工单,并附上
APPID、SDK 名称、HarmonyOS 版本和控制台页面截图,请支付宝确认配置方式。 - 支付宝开放平台的控制台字段和鸿蒙 SDK 支持范围可能发生调整。实际配置应以接入时对应版本的官方文档和平台审核要求为准。
备注:内容仅供参考。
