nizerin/alipay-sdk

There is no license information available for the latest version (1.0.0) of this package.

支付宝(蚂蚁金服)开放平台第三方 PHP SDK,基于官方 3.3.1 版本。

1.0.0 2019-05-25 06:53 UTC

This package is auto-updated.

Last update: 2022-09-24 10:35:54 UTC


README

🐜 支付宝开放平台(又称:蚂蚁金服开放平台)第三方 PHP SDK,基于官方 3.3.1 版本。

❤️ 本项目 GitHub ,目前已在公司产品应用,运行在数百台客户服务器内。

🎉 百度小程序第三方 PHP SDK

为什么不用官方

官方 SDK 本 SDK 链接
无 Composer 集成,自动加载依赖第三方 PHP 框架 lotusphp 集成 Packagist
代码不严谨,各种 Warning 持续构建,Notice 也不放过 Build Status
零单元测试 99% 测试覆盖率 Coverage Status
代码风格、命名风格鱼龙混杂 PSR1 + PSR2 StyleCI
弃用特性残留 已根据官方文档移除
奇葩测试文件残留 已移除 讨论帖
几乎零 PHPDoc 持续补充中 对比图
请求类居然没有抽象基类或接口 抽象基类,公共方法统一化 AbstractAlipayRequest
异常和错误处理不统一 所有错误都将以异常的形式抛出,确保返回数据可靠 Exceptions
需手动根据接口名拼接请求类名 请求类工厂,根据 API 名直接创建请求类 AlipayRequestFactory
耦合度高,难以升级或替换 几乎完全解耦,任意替换签名 / 密钥 / 响应 甚至 HTTP 客户端 AopClient

主要目的

  • 集成 Composer。
  • 降低 PHP 依赖至 5.4。
  • 移除官方 SDK 内 lotusphp 依赖。
  • 整理代码风格使其符合 PSR-1PSR-2
  • 增加单元测试。
  • 兼容 PHP 7.2,替换 MCrypt 为 OpenSSL
  • 移除官方 API 文档内 已弃用 特性。
  • 移除难以拓展的调试、日志等特性,以便于集成第三方框架和扩展包。
  • 移除编码转换特性,统一使用 UTF-8
  • 其它优化,持续进行中 ...

目前,开源圈内已有不少质量不错的支付宝「支付」相关扩展包;而支付宝「小程序」推出不久,目前仍处于公测阶段。此项目的初衷并不是 Yet another,而是填补小程序 API 的空缺,文档和示例也将会有所侧重。

小试牛刀

如何使用

  1. Composer 安装。

    composer require nizerin/alipay-sdk:

    Composer 中国镜像近期处于维护状态;若无法安装,建议使用原版 Packagist 或使用 Laravel-China 镜像

  2. 创建 AlipayKeyPair 实例。

    $keyPair = \Alipay\Key\AlipayKeyPair::create(
        '应用私钥',
        '支付宝公钥',
    );

    AlipayKeyPair 用于存储应用私钥、支付宝公钥;两份密钥将分别用于与支付宝服务器通信时,生成请求签名、验证响应签名等。

  3. 创建 AopClient 实例。

    $aop = new \Alipay\AopClient('APP_ID', $keyPair);

    AopClient 通常情况会贯穿整条业务,除非你须要在同一套代码内处理多个商户号/小程序,否则只需在初始化阶段创建一次即可。

  4. 根据业务需要,创建 AlipayRequest 实例。

    $request = (new \Alipay\AlipayRequestFactory)->create('点号连接的API名称', [
        '请求参数名' => '对应参数值',
        // ...
    ]);

    另外,你也可以不使用请求类工厂,就像官方文档那样,手动创建请求类。

    例如:

    $request = new \Alipay\Request\AlipaySystemOauthTokenRequest();
    $request->setCode('authcode');
  5. 发送请求,获得响应数据。

    $result = $aop->execute($request)->getData();

    所有错误(包括但不限于网络通信异常、数据格式异常、支付宝服务器返回的错误)都会被转换为异常,请注意捕捉。

  6. 更多实例,请移步 examples 目录。

    最后,官方 SDK 内 AopClient::pageExecute() 被分离为 pageExecuteUrlpageExecuteFormAopClient::sdkExecute()AopClient::execute() 方法名保持不变,参数和返回值有所改动。

注意事项

  • 请不要依赖任何在官方 SDK 内被标注为 private 的属性,它们可能已在迭代中被修改或废弃。
  • 请不要依赖任何在官方 API 文档内被标注为 已废弃 的特性,它们可能已在迭代中被废弃或移除。
  • 本 SDK 只适用于目前正在开发或即将开始开发的项目;由于将会采取相对激进的态度开发,所以请勿尝试将原有代码迁移至本 SDK。
  • 本 SDK 已移除所有编码转换特性;请确保执行上传文件请求时,文件编码为 UTF-8 而非 GBK

实用工具

可执行文件位于 bin 目录下,点此查看 详细说明

其它资源

已知 Issue

OpenSSL 在 Win32 平台需要配置 openssl.cnf 路径,参见 OpenSSL 安装 - PHP 手册

在本 SDK 内,也可通过自定义 $configargs 参数来自定义此文件路径,而不需要配置环境变量;参见 examples/keys/generate.php

目前已知以下方法依赖于此配置文件:

  • 生成密钥对:AlipayKeyPair::generate()
  • 将私钥资源转换为字符串:AlipayPrivateKey::toString()

感谢

感想

最后,一点感想。

作为一个名不见经传的小白,不敢妄言阿里的工程师技术欠佳;但可以确定的是,官方提供的 PHP SDK 绝对不是用心之作。

做开放平台,对待第三方开发者是这样的态度,怎能做到与微信比肩?

硬广,欢迎关注我们的产品:

68747470733a2f2f692e6c6f6c692e6e65742f323031382f30372f32342f356235366464613736623262612e706e67