PAYATHON 2026

支付宝登录、支付和分享是否使用同一个SDK?

支付老李

结论

支付宝登录、支付和分享不能简单视为使用同一个 SDK。

在部分移动端接入方案中,支付宝登录(授权)和支付可能由同一个支付宝客户端 SDK 提供,但两者属于不同的开放平台产品,使用的接口、签名参数和服务端流程也不同。分享功能是否包含在同一 SDK 中,要看应用平台、分享方式以及支付宝开放平台当时提供的组件,不能用支付接口代替。

因此,需要在支付宝开放平台分别确认并开通:

  • 支付宝登录所需的授权或会员能力;
  • 对应的支付产品;
  • 分享所需的分享组件、URL Scheme、Universal Link 或其他开放能力。

为什么不能只看 SDK 文件

SDK 只是客户端的调用工具,不代表应用已经获得相应的业务权限。即使登录和支付使用同一个客户端依赖,调用链仍然不同:

  • 登录用于获取用户授权,通常需要将授权码发送到服务端,再换取访问令牌。
  • 支付需要服务端创建并签名支付请求,然后由客户端拉起支付宝。
  • 分享用于唤起支付宝或构造分享内容,不应使用支付订单参数。
  • 各项能力可能需要单独完成应用审核、签约、权限申请和回调配置。

“是否使用同一个 SDK”和”是否使用同一个业务接口”是两个问题。客户端依赖可能相同,业务接口则必须分开处理。

推荐的接入方式

1. 在开放平台分别确认能力

先确定应用类型和运行平台,例如 Android、iOS、Web 或小程序,再检查当前应用是否已经获得授权登录、支付和分享所需的权限。

不同应用类型、开放平台产品和 SDK 版本的支持范围可能不同,具体应以当前控制台及对应版本的官方接入文档为准。

2. 服务端分别实现登录和支付

应用私钥和敏感签名逻辑不应保存在客户端。

服务端至少应分别提供:

POST /api/alipay/auth-info
POST /api/alipay/auth/callback
POST /api/alipay/order
POST /api/alipay/payment/notify

各接口的用途如下:

  • /auth-info 生成授权请求参数;
  • /auth/callback 使用授权码换取访问令牌,并完成账号绑定;
  • /order 创建订单,返回签名后的支付字符串;
  • /payment/notify 接收支付异步通知并验签。

分享通常不需要生成支付订单。如果分享内容包含动态页面或短链接,可以由服务端生成受控的分享 URL。

3. 客户端分别调用对应接口

下面的 Android 示例只说明调用结构。具体类名和方法是否可用,应以项目实际使用的支付宝 SDK 版本为准。

ExecutorService executor = Executors.newSingleThreadExecutor();

executor.execute(() -> {
    PayTask alipay = new PayTask(activity);

    // authInfo 必须由服务端按支付宝授权规则生成
    Map<String, String> result = alipay.authV2(authInfo, true);

    activity.runOnUiThread(() -> {
        handleAlipayAuthResult(result);
    });
});

支付调用需要与授权调用分开:

ExecutorService executor = Executors.newSingleThreadExecutor();

executor.execute(() -> {
    PayTask alipay = new PayTask(activity);

    // orderInfo 必须由服务端创建并签名
    Map<String, String> result = alipay.payV2(orderInfo, true);

    activity.runOnUiThread(() -> {
        handleAlipayPayResult(result);
    });
});

授权和支付虽然可能通过同一个 PayTask 类发起,但 authInfo 与 orderInfo 的生成规则、业务参数和结果处理方式不同,不能混用。

分享功能建议封装成独立接口:

public interface AlipayShareService {
    void shareText(String text);
    void shareUrl(String title, String description, String url);
}

具体实现取决于当前分享能力的官方接入方式。如果所用的支付宝 SDK 没有提供分享接口,可以使用受支持的第三方分享组件或官方允许的跳转方式,但不要自行拼接文档中没有说明的私有 Scheme。

结果处理注意事项

客户端返回结果只能用于页面展示,最终业务状态需要由服务端确认。

在支付场景中,应以服务端验签后的异步通知或主动查询结果为准,不能只根据客户端的 resultStatus 发货或增加余额。

在授权场景中,客户端应将授权码发送到服务端,由服务端换取令牌。应用私钥、长期访问令牌和完整签名逻辑都不应放在客户端。

还需要注意以下问题:

  • Android 和 iOS 的依赖包、回调配置及跳转机制可能不同。
  • 同一 SDK 的不同版本可能增加或删除接口,升级前应检查迁移说明。
  • 登录、支付和分享需要使用各自独立的错误码处理逻辑。
  • 应用包名、签名、Bundle ID、URL Scheme 或 Universal Link 必须与开放平台登记的信息一致。
  • 不要同时引入多个包含重复类的支付宝 SDK,以免出现依赖冲突或打包失败。
  • 通过第三方分享框架间接接入支付宝时,还要核对该框架依赖的支付宝组件版本。

底层 SDK 依赖可以共享,但登录、支付和分享仍需作为三套独立的业务流程设计,分别申请权限并完成安全校验。

备注:内容仅供参考。