PAYATHON 2026

订单码支付demo在哪里下载,GitHub项目是否为支付宝官方

支付小周

结论

https://github.com/alipay/alipay-sdk-php-all 属于 GitHub 的 alipay 组织,可以作为支付宝官方发布的 PHP SDK 源码使用。但这是完整的 SDK 仓库,并非专门为“订单码支付”整理的业务 Demo。

手机网站支付 Demo 中缺少 AopCertification.php,通常是因为 Demo 携带的 SDK 版本较旧,或者经过精简。不要只把新仓库中的几个缺失文件复制到旧 Demo,否则仍可能遇到类依赖、签名逻辑或接口版本不一致等问题。建议整体替换 SDK,同时保留已经验证可用的业务配置和支付调用代码。

为什么手机网站支付 Demo 中没有该文件

手机网站支付 Demo 通常由两部分组成:

  • 手机网站支付的业务示例代码;
  • Demo 发布时配套的 PHP SDK。

Demo 中附带的 SDK 不一定完整,也不会随支付宝 SDK 仓库自动更新。如果订单码支付文档基于较新的 SDK 编写,就可能引用旧 Demo 中没有的文件,例如:

require_once '../aop/AopCertification.php';

这并不表示手机网站支付与订单码支付不能共用 PHP SDK。问题在于项目中的 SDK 版本与参考文档不匹配。

推荐处理方式

1. 从官方入口确认仓库

使用该仓库前,先核对以下信息:

  • 仓库是否确实位于 alipay 组织下;
  • 支付宝开放平台的相关文档是否链接到该仓库;
  • 仓库说明、许可证和发布记录是否完整;
  • 避免使用第三方 Fork、网盘压缩包或来源不明的修改版本。

仓库位于官方组织下,也不代表所有历史分支都适用于当前接口。最终应以支付宝开放平台当前文档指定的 SDK、接口和签名方式为准。

2. 整体引入 SDK

下载完整仓库后,尽量保留 SDK 原有的目录结构,例如:

project/
├── app/
│   └── order_pay.php
└── alipay-sdk/
    ├── aop/
    │   ├── AopClient.php
    │   ├── AopCertification.php
    │   └── request/
    └── ...

加载文件时使用明确的绝对路径,避免脚本执行目录变化后相对路径失效:

<?php

require_once __DIR__ . '/../alipay-sdk/aop/AopClient.php';
require_once __DIR__ . '/../alipay-sdk/aop/AopCertification.php';

如果 SDK 提供统一入口文件或 Composer 自动加载配置,优先使用对应的入口或自动加载机制,不要在业务代码中逐个加载内部类。

项目已经通过 Composer 管理依赖时,通常可以这样加载:

<?php

require_once __DIR__ . '/../vendor/autoload.php';

具体包名和安装命令以支付宝开放平台当前文档或仓库 README 为准,不要参照其他支付产品的示例自行猜测。

3. 迁移已有配置

整体更换 SDK 后,原手机网站支付项目中的业务参数可以保留,但需要重新核对:

<?php

$aop = new AopClient();

$aop->gatewayUrl = 'https://openapi.alipay.com/gateway.do';
$aop->appId = '你的应用 APPID';
$aop->rsaPrivateKey = '应用私钥';
$aop->alipayrsaPublicKey = '支付宝公钥';
$aop->signType = 'RSA2';
$aop->format = 'json';
$aop->charset = 'UTF-8';

这段代码只展示常见的配置结构。实际属性名称和赋值方式必须与下载的 SDK 版本一致。

还需要确认:

  • appId 属于当前接入的支付宝应用;
  • 应用私钥与开放平台上传的应用公钥配套;
  • alipayrsaPublicKey 填写的是支付宝公钥,不是应用公钥;
  • 沙箱网关与正式环境网关没有混用;
  • 应用已经签约并开通订单码支付所需的能力。

4. 使用文档对应的请求类

支付调用应采用订单码支付文档指定的 API 和请求类。不同产品可能使用不同的请求类,不能因为业务含义相近,就直接套用手机网站支付的请求对象。

基本调用结构如下:

<?php

$request = new 文档指定的Request类();

$request->setBizContent(json_encode([
    // 按订单码支付文档填写业务参数
], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES));

$response = $aop->execute($request);

这里没有直接写出具体的 API 类名和业务参数,因为“订单码支付”在不同文档版本或产品方案中可能对应不同接口。请以商户当前签约产品页面提供的接口名称为准,以免误用其他扫码或当面付接口。

不建议只补一个文件

把 AopCertification.php 直接复制到旧版 SDK 中,可能引发以下问题:

  • 该文件依赖的其他类仍然缺失;
  • 新旧版本的命名空间或目录结构不同;
  • AopClient 与认证相关类的方法签名不一致;
  • 签名、证书或公钥模式的处理逻辑不匹配;
  • 后续升级时难以确认代码来源和版本。

如果必须继续使用旧 SDK,应先查看文档是否提供兼容旧版本的调用方式,不要根据报错逐个补文件。

排查加载失败

更换 SDK 后,如果仍提示找不到文件,可以先检查实际路径:

<?php

$sdkFile = __DIR__ . '/../alipay-sdk/aop/AopCertification.php';

if (!is_file($sdkFile)) {
    throw new RuntimeException('SDK 文件不存在:' . $sdkFile);
}

require_once $sdkFile;

Linux 环境区分文件名大小写,名称必须完全一致。例如:

AopCertification.php

不能写成:

aopCertification.php

还要确认 ../ 是按当前脚本位置解析,还是按运行时工作目录解析。使用 __DIR__ 通常更可靠。

注意事项

  • 不要把手机网站支付 Demo 当成完整 SDK;
  • 不要混用多个版本的 aop 目录;
  • 不要通过修改 SDK 内部的签名和验签代码来绕过错误;
  • 不要将私钥、应用证书和配置文件提交到 GitHub;
  • 正式上线前,分别验证下单、支付结果查询、异步通知验签和重复通知处理;
  • 如果文档要求使用证书模式,需要完整配置应用公钥证书、支付宝公钥证书和支付宝根证书,不能只添加 AopCertification.php。

可以使用该仓库中的完整 SDK,但应整体接入,并确保 SDK 版本、订单码支付文档和应用签约能力互相匹配。

备注:内容仅供参考。