订单码支付能否继续使用当面付 DEMO 和原 SDK?
结论
旧版“当面付 DEMO”不能直接用作订单码支付的接入示例。两者可能会使用支付宝开放平台 SDK 的相同基础能力,如请求封装、RSA2 签名和网关调用,但具体的产品流程、接口名称、业务参数和证书要求可能不同。
判断旧 DEMO 中的 SDK 能否继续使用,不能只看它是否用于“当面付”,还要确认它是否具备以下能力:
- 支持订单码支付对应的 API;
- 支持
RSA2; - 支持应用公钥证书模式;
- 能正确加载应用证书、支付宝公钥证书和支付宝根证书;
- 该版本仍在官方文档的支持范围内。
只要缺少其中一项,就应改用订单码支付接入文档当前推荐的官方 SDK,不必为了保留旧 DEMO 而继续使用过时版本。
为什么不能直接使用当面付 DEMO
DEMO 展示的是某个产品在特定时间点的完整调用流程,SDK 则是调用开放平台接口的基础工具,两者并不是同一个概念。
旧版当面付 DEMO 通常包含:
- 当面付产品对应的接口调用;
- 当时适用的请求参数;
- 普通公钥模式或旧版证书配置;
- 轮询、撤销、退款等配套逻辑;
- 已固定版本的 SDK 依赖。
如果订单码支付使用了不同的 API、业务字段或签约权限,即使底层请求仍然发往同一个支付宝网关,也不能只修改几个参数就继续运行。尤其是在接口明确要求使用证书模式时,仅配置支付宝公钥字符串的旧 DEMO 无法完成所需的验签。
旧 DEMO 的工程结构和异常处理方式可以参考,但接口调用代码不宜直接复制。
为什么可能找不到独立的订单码支付 DEMO
没有独立 DEMO,并不表示 SDK 不支持这项业务。开放平台通常由 SDK 处理通用能力,具体的请求参数和业务流程则写在接口文档或产品接入指南中。
接入时应以当前控制台和官方接口文档为准,重点核对:
- 应用是否已开通订单码支付产品;
- 当前应用可以调用哪些接口;
- 接口要求使用普通公钥模式还是证书模式;
- 必填业务参数及其格式;
- 沙箱环境是否支持该产品;
- 支付成功后的查询、退款和异步通知流程。
如果文档没有提供完整工程,可以使用官方 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 版本的证书执行方法和构造方法可能有所区别,应以对应版本的官方示例为准。
推荐的接入步骤
- 在支付宝开放平台确认应用已经签约并开通订单码支付能力。
- 查看该产品的最新接口文档,记录准确的 API 名称、必填参数和签名要求。
- 按照文档选择当前受支持的官方 SDK,并只保留一个明确版本。
- 在应用配置中完成密钥或证书设置,下载与该应用匹配的三份证书。
- 完成 SDK 客户端初始化,确认程序可以正常读取证书文件。
- 根据接口文档构造订单码支付请求,不要复用旧 DEMO 的业务参数。
- 根据接口返回值判断业务结果,不能只凭 HTTP 状态认定支付成功。
- 补充订单查询、关闭、退款和异步通知验签,完成整个交易流程。
- 上线前再次核对正式应用的
app_id、网关和证书配置。
常见问题
客户端可以创建,但调用时提示签名或证书错误
先检查以下项目:
- 应用私钥是否与应用公钥证书匹配;
- 三份证书是否属于同一个应用和环境;
app_id是否配置正确;- 是否误将支付宝公钥字符串当作支付宝公钥证书使用;
- 证书路径是否可读;
- 是否使用了
RSA2; - SDK 是否确实通过证书模式执行请求。
旧 DEMO 能运行,为什么新接口不能运行
旧 DEMO 能运行,只能说明旧接口和旧配置有效。它不能证明应用拥有订单码支付权限,也不能证明旧 SDK 包含新接口所需的模型。需要分别检查产品签约状态、接口权限、SDK 版本和证书配置。
是否可以保留旧 DEMO 的代码
日志、HTTP 配置、订单存储和异常处理等通用代码可以保留,但以下部分建议替换:
- SDK 依赖;
- 客户端初始化;
- Request 和 Response 类型;
biz_content;- 支付结果判断;
- 通知验签逻辑。
不要同时保留普通公钥模式和证书模式两套配置,再由程序在运行时猜测该用哪一套。这样很容易造成证书、私钥和应用不匹配。
备注:内容仅供参考。
