Android 支付签约是否与 SDK 版本有关?
结论
Android 端能否完成支付宝签约,不只取决于 SDK 版本。alipaySdk-15.7.9-20200727142846 可以发起常规 APP 支付,但要实现“支付并签约”或“独立签约”,还需要满足以下条件:
- 商户已开通相应的签约产品,如周期扣款、代扣等。
- 服务端调用的支付宝接口支持签约,并正确传入相关参数。
- 支付宝开放平台应用、商户账号及签约产品均已配置完成。
- 目标产品没有超出当前客户端 SDK 的最低版本要求。
因此,仅凭 15.7.9 这个版本号,无法确认支付签约一定可用。如果目标产品没有额外的 SDK 版本限制,该版本通常可以用于拉起支付宝客户端,但签约请求和业务参数仍应由服务端生成。
签约能力为什么不完全由 SDK 决定
Android SDK 主要负责接收服务端生成的请求字符串、拉起支付宝客户端,并将处理结果返回给 APP。
完整流程通常如下:
- APP 请求业务服务端创建支付或签约请求。
- 服务端调用支付宝开放平台接口,设置支付、签约和通知参数。
- 服务端使用商户私钥完成签名。
- APP 获取服务端返回的
orderInfo。 - APP 调用
PayTask.payV2()或相应的授权接口。 - 服务端根据支付宝异步通知确认最终结果。
如果商户尚未开通对应产品,或者服务端没有传入正确的签约参数,单纯升级 Android SDK 也不会获得签约能力。
建议的确认步骤
1. 明确“支付签约”的类型
先确认实际需求属于哪种场景:
- 普通 APP 支付:只完成单次支付,不建立后续扣款协议。
- 支付并签约:付款的同时建立扣款协议。
- 独立签约:不发生支付,只建立授权或扣款协议。
- 支付宝账号授权:获取用户授权信息,不等同于代扣签约。
不同场景可能对应不同的产品、服务端接口和客户端调用方式,不能混用。
2. 检查商户产品权限
登录支付宝开放平台,确认当前应用和商户账号已经签约并开通目标产品,同时检查:
- APP 应用已经创建并完成必要审核。
- 应用绑定了正确的商户账号。
- 应用公钥或支付宝公钥配置正确。
- 产品权限处于有效状态。
- 接口文档是否规定了客户端 SDK 的最低版本。
如果官方产品文档要求使用更高版本,应以该文档为准。
3. 由服务端生成请求参数
订单内容和签名必须由服务端生成,商户私钥不能放在 Android APP 中。
下面的代码只展示 Android 端如何调用普通支付请求字符串:
final String orderInfo = response.getOrderInfo();
Runnable payRunnable = new Runnable() {
@Override
public void run() {
PayTask alipay = new PayTask(activity);
Map<String, String> result = alipay.payV2(orderInfo, true);
Message message = Message.obtain();
message.what = SDK_PAY_FLAG;
message.obj = result;
handler.sendMessage(message);
}
};
Thread payThread = new Thread(payRunnable);
payThread.start();
其中,orderInfo 应由业务服务端返回。采用“支付并签约”时,签约参数也应按照目标产品的接口文档在服务端请求中设置,不能由 Android 端自行拼接。
4. 根据异步通知确认结果
客户端返回值只适合用于界面提示,不能作为支付或签约成功的最终依据。服务端需要:
- 验证支付宝异步通知的签名。
- 核对商户订单号、金额、应用 ID 和商户身份。
- 检查支付状态及签约状态。
- 对通知进行幂等处理,避免重复更新订单。
- 保存协议号等后续业务所需的信息。
当前 SDK 版本需要注意什么
alipaySdk-15.7.9-20200727142846 是一个较早的版本。它能否满足具体签约产品的要求,需要对照该产品当前的官方接入文档确认,不能从常规支付能力直接推断。
即使旧版本可以拉起签约流程,也建议在完成充分的回归测试后,升级到支付宝官方当前推荐的稳定版本。需要考虑的因素包括:
- Android 新系统版本带来的兼容性变化。
- 支付宝客户端交互协议的调整。
- 安全修复及稳定性改进。
- 应用商店对隐私、安全和 SDK 合规要求的变化。
升级前应重点回归支付拉起、取消支付、未安装支付宝客户端、网络异常、异步通知、混淆配置和签名校验等场景。
注意事项
- 不要在 Android 端保存商户私钥或生成商户签名。
- 不要将支付宝账号授权和代扣签约当作同一种能力。
- 不要只根据
resultStatus更新支付或签约状态。 - 服务端接口、产品权限和客户端 SDK 都要与目标业务场景匹配。
- 如果官方文档没有明确说明
15.7.9支持目标签约产品,应先在沙箱或测试商户环境中验证,再决定是否上线。 - 判断时应以目标产品当前的官方接入文档及其 SDK 最低版本说明为准。
备注:内容仅供参考。
