PAYATHON 2026

订单码支付能否继续使用当面付 DEMO 和原 SDK?

支付小周

结论

旧版“当面付 DEMO”不能直接用作订单码支付的接入示例。两者可能会使用支付宝开放平台 SDK 的相同基础能力,如请求封装、RSA2 签名和网关调用,但具体的产品流程、接口名称、业务参数和证书要求可能不同。

判断旧 DEMO 中的 SDK 能否继续使用,不能只看它是否用于“当面付”,还要确认它是否具备以下能力:

  • 支持订单码支付对应的 API;
  • 支持 RSA2;
  • 支持应用公钥证书模式;
  • 能正确加载应用证书、支付宝公钥证书和支付宝根证书;
  • 该版本仍在官方文档的支持范围内。

只要缺少其中一项,就应改用订单码支付接入文档当前推荐的官方 SDK,不必为了保留旧 DEMO 而继续使用过时版本。

为什么不能直接使用当面付 DEMO

DEMO 展示的是某个产品在特定时间点的完整调用流程,SDK 则是调用开放平台接口的基础工具,两者并不是同一个概念。

旧版当面付 DEMO 通常包含:

  • 当面付产品对应的接口调用;
  • 当时适用的请求参数;
  • 普通公钥模式或旧版证书配置;
  • 轮询、撤销、退款等配套逻辑;
  • 已固定版本的 SDK 依赖。

如果订单码支付使用了不同的 API、业务字段或签约权限,即使底层请求仍然发往同一个支付宝网关,也不能只修改几个参数就继续运行。尤其是在接口明确要求使用证书模式时,仅配置支付宝公钥字符串的旧 DEMO 无法完成所需的验签。

旧 DEMO 的工程结构和异常处理方式可以参考,但接口调用代码不宜直接复制。

为什么可能找不到独立的订单码支付 DEMO

没有独立 DEMO,并不表示 SDK 不支持这项业务。开放平台通常由 SDK 处理通用能力,具体的请求参数和业务流程则写在接口文档或产品接入指南中。

接入时应以当前控制台和官方接口文档为准,重点核对:

  1. 应用是否已开通订单码支付产品;
  2. 当前应用可以调用哪些接口;
  3. 接口要求使用普通公钥模式还是证书模式;
  4. 必填业务参数及其格式;
  5. 沙箱环境是否支持该产品;
  6. 支付成功后的查询、退款和异步通知流程。

如果文档没有提供完整工程,可以使用官方 SDK 的通用客户端,根据接口文档创建对应的 Request 对象并提交请求。

如何选择 SDK

新项目应使用官方文档当前给出的 SDK 坐标和初始化方式。

不要根据旧博客、旧压缩包或 DEMO 目录中的 JAR 文件判断该用哪个版本。出现多个 SDK 版本不代表需要全部安装,通常只需选择一个与当前开发语言和接入模式匹配的版本。

选择前应检查:

  • Maven、Gradle、NuGet、Composer 或 npm 包是否来自官方渠道;
  • SDK 是否包含目标接口对应的 Request 和 Response 类;
  • 初始化配置是否支持证书路径;
  • 文档示例中的构造方法是否与所选版本一致;
  • 项目中是否同时引入了多个版本的支付宝 SDK。

如果找不到目标接口的 Request 类,通常是 SDK 版本太旧,或者选错了 SDK 包。此时升级官方 SDK,一般比手工拼接请求更稳妥。

证书模式需要准备什么

证书模式通常需要准备:

  • 应用私钥;
  • 应用公钥证书;
  • 支付宝公钥证书;
  • 支付宝根证书;
  • 应用 app_id;
  • RSA2 签名方式。

证书模式并不是在请求参数中增加一个“证书开关”。SDK 需要根据证书计算序列号,使用对应的私钥签名,并依据支付宝证书验证响应签名。

证书文件必须来自当前应用的开放平台配置。不要混用其他应用、沙箱环境或历史应用生成的证书。

Java 初始化示例

以下代码只演示证书模式下的客户端初始化。具体的 Request 类和 biz_content 字段必须以订单码支付接口文档为准,不能套用当面付接口的参数。

import com.alipay.api.AlipayClient;
import com.alipay.api.AlipayConfig;
import com.alipay.api.DefaultAlipayClient;

public class AlipayClientFactory {

    public static AlipayClient createClient() throws Exception {
        AlipayConfig config = new AlipayConfig();

        config.setServerUrl("https://openapi.alipay.com/gateway.do");
        config.setAppId("YOUR_APP_ID");
        config.setPrivateKey("YOUR_APPLICATION_PRIVATE_KEY");
        config.setFormat("json");
        config.setCharset("UTF-8");
        config.setSignType("RSA2");

        config.setAppCertPath("/secure/alipay/appCertPublicKey.crt");
        config.setAlipayPublicCertPath("/secure/alipay/alipayCertPublicKey_RSA2.crt");
        config.setRootCertPath("/secure/alipay/alipayRootCert.crt");

        return new DefaultAlipayClient(config);
    }
}

调用订单码支付接口时,再使用官方文档指定的请求类:

AlipayClient alipayClient = AlipayClientFactory.createClient();

// 使用订单码支付文档指定的 Request 类型。
// 不要直接照搬旧当面付 DEMO 中的 Request 类和 biz_content。
//
// XxxRequest request = new XxxRequest();
// request.setBizContent(...);
// XxxResponse response = alipayClient.certificateExecute(request);

示例使用 XxxRequest,是为了避免虚构订单码支付的接口名称。实际接入时,必须将它替换为控制台或官方文档列出的 Request 类型。不同 SDK 版本的证书执行方法和构造方法可能有所区别,应以对应版本的官方示例为准。

推荐的接入步骤

  1. 在支付宝开放平台确认应用已经签约并开通订单码支付能力。
  2. 查看该产品的最新接口文档,记录准确的 API 名称、必填参数和签名要求。
  3. 按照文档选择当前受支持的官方 SDK,并只保留一个明确版本。
  4. 在应用配置中完成密钥或证书设置,下载与该应用匹配的三份证书。
  5. 完成 SDK 客户端初始化,确认程序可以正常读取证书文件。
  6. 根据接口文档构造订单码支付请求,不要复用旧 DEMO 的业务参数。
  7. 根据接口返回值判断业务结果,不能只凭 HTTP 状态认定支付成功。
  8. 补充订单查询、关闭、退款和异步通知验签,完成整个交易流程。
  9. 上线前再次核对正式应用的 app_id、网关和证书配置。

常见问题

客户端可以创建,但调用时提示签名或证书错误

先检查以下项目:

  • 应用私钥是否与应用公钥证书匹配;
  • 三份证书是否属于同一个应用和环境;
  • app_id 是否配置正确;
  • 是否误将支付宝公钥字符串当作支付宝公钥证书使用;
  • 证书路径是否可读;
  • 是否使用了 RSA2;
  • SDK 是否确实通过证书模式执行请求。

旧 DEMO 能运行,为什么新接口不能运行

旧 DEMO 能运行,只能说明旧接口和旧配置有效。它不能证明应用拥有订单码支付权限,也不能证明旧 SDK 包含新接口所需的模型。需要分别检查产品签约状态、接口权限、SDK 版本和证书配置。

是否可以保留旧 DEMO 的代码

日志、HTTP 配置、订单存储和异常处理等通用代码可以保留,但以下部分建议替换:

  • SDK 依赖;
  • 客户端初始化;
  • Request 和 Response 类型;
  • biz_content;
  • 支付结果判断;
  • 通知验签逻辑。

不要同时保留普通公钥模式和证书模式两套配置,再由程序在运行时猜测该用哪一套。这样很容易造成证书、私钥和应用不匹配。

备注:内容仅供参考。