suwseo/authorizenet

Authorize.Net 的 PHP SDK

dev-master 2023-02-13 21:15 UTC

This package is auto-updated.

Last update: 2024-09-14 01:14:41 UTC


README

Travis CI Status Scrutinizer Code Quality Packagist Stable Version

要求

  • PHP 5.6+
  • cURL PHP 扩展
  • JSON PHP 扩展
  • 一个 Authorize.Net 账户(见下文 注册与配置 部分)
  • 支持 TLS 1.2 的 libcurl 和 OpenSSL 版本(或其等效版本)

从旧版本迁移

自 2018 年 8 月以来,Authorize.Net API 已重组,以更关注商家。已弃用 Authorize.Net AIM、ARB、CIM、交易报告和 SIM 类,以支持 net\authorize\api。要查看与已弃用功能对应的新功能的完整映射列表,请参阅 MIGRATING.md

贡献

  • 如果您需要有关 Authorize.Net 功能的信息或澄清,请创建一个带有您问题的 issue。您还可以搜索 Authorize.Net 开发者社区中与您问题相关的讨论。
  • 在创建 pull request 之前,请阅读 贡献指南

TLS 1.2

Authorize.Net API 只支持使用 TLS 1.2 安全协议进行连接。请确保将所有必要的组件升级以支持 TLS 1.2。保持这些组件的最新状态,以减轻新安全漏洞的风险。

要测试当前安装是否能够使用 TLS 1.2 与我们的服务器通信,请运行以下 PHP 代码并检查输出中的 TLS 版本

<?php
    $ch = curl_init('https://apitest.authorize.net/xml/v1/request.api');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_VERBOSE, true);
    $data = curl_exec($ch);
    curl_close($ch);

如果 curl 无法连接到我们的 URL(如前面的示例所示),则很可能您的系统无法使用 TLS 1.2 连接,或者未安装受支持的加密密钥。要验证您的连接 确实 支持的 TLS 版本,请运行以下 PHP 代码

<?php 
$ch = curl_init('https://www.howsmyssl.com/a/check');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$data = curl_exec($ch);
curl_close($ch);

$json = json_decode($data);
echo "Connection uses " . $json->tls_version ."\n";

安装

Composer

我们建议使用 Composer。(注意:我们从不推荐您覆盖新的 secure-http 默认设置)根据以下示例更新您的 composer.json 文件,然后运行 composer update 以更新此特定版本。

{
  "require": {
  "php": ">=5.6",
  "authorizenet/authorizenet": "2.0.2"
  }
}

通过 Composer 安装后,不要忘记在您的脚本或引导文件中要求其自动加载器

require 'vendor/autoload.php';

自定义 SPL 自动加载器

作为替代,我们提供了一个自定义的 SPL 自动加载器,您可以从 PHP 文件中引用它

require 'path/to/anet_php_sdk/autoload.php';

此自动加载器仍然需要存在 vendor 目录及其所有依赖项。但是,这在 composer 无法在给定的系统上运行的情况下是一个可能的解决方案。您可以在本地或其他系统上运行 composer 来构建目录,然后复制 vendor 目录到所需的系统。

注册与配置

使用此 SDK 和 Authorize.Net API 需要在 Authorize.Net 系统上有一个账户。您可以在设置部分找到这些详细信息。如果您目前没有生产 Authorize.Net 账户,请 注册沙箱账户

身份验证

要使用 Authorize.Net API 进行身份验证,请使用您的账户的 API 登录 ID 和交易密钥。如果您没有这些凭据,请从商家界面获取它们。对于生产账户,商家界面位于 https://account.authorize.net/,对于沙箱账户,位于 https://sandbox.authorize.net

在您获取凭证后,将它们加载到您的代码中相应的变量中。以下示例代码展示了如何在API请求中设置凭证。

设置API凭证以进行API请求

...

use net\authorize\api\contract\v1 as AnetAPI;

...

$merchantAuthentication = new AnetAPI\MerchantAuthenticationType();
$merchantAuthentication->setName("YOURLOGIN");
$merchantAuthentication->setTransactionKey("YOURKEY");

...

$request = new AnetAPI\CreateTransactionRequest();
$request->setMerchantAuthentication($merchantAuthentication);

...

您绝不应该在网站公开可访问部分的PHP文件中直接包含您的登录ID和交易密钥。更好的做法是在常量文件中定义这些,然后在代码的适当位置引用这些常量。

在沙盒环境和生产环境之间切换

Authorize.Net维护一个完整的沙盒环境,用于测试和开发。沙盒环境是我们生产环境的精确副本,具有模拟的交易授权和结算。默认情况下,此SDK配置为使用沙盒环境。要切换到生产环境,请替换执行方法中的环境常量。例如

// For PRODUCTION use
$response = $controller->executeWithApiResponse(\net\authorize\api\constants\ANetEnvironment::PRODUCTION);

每个环境的API凭证都不同,因此在切换环境时,请务必切换到适当的凭证。

SDK使用示例和示例代码

要开始使用此SDK,强烈建议您下载我们的示例代码存储库

在该存储库中,我们提供了我们API所有常见用途的全面示例代码

此外,您可以在我们的API参考指南中找到我们API的结构详情和示例

API参考指南提供了特定请求所需信息的示例以及这些信息将如何格式化。使用这些示例,您可以轻松确定使用此SDK将信息包含在请求中所需的方法。

构建和测试SDK

AuthorizeNet SDK的集成测试位于tests目录中。这些测试主要针对SDK开发。但是,您也可以浏览它们以找到更多各种API的使用示例。

  • 运行composer update --dev以加载PHPUnit测试库。
  • phpunit.xml.dist文件复制到phpunit.xml,并在常量字段中输入您的商户凭证。
  • 运行vendor/bin/phpunit以运行测试套件。

您可能想要禁用沙盒账户的电子邮件。

测试指南

为了帮助您测试自己的代码,Authorize.Net维护了一个全面的测试指南,其中包括用于测试的信用卡号码和用于从沙盒环境生成特定响应的特殊触发器。

日志记录

SDK生成一个带有对敏感数据(如信用卡、到期日期)的掩码的日志。提供的日志级别是debuginfowarnerror。添加use \net\authorize\util\LogFactory;。Logger可以使用$logger = LogFactory::getLog(get_class($this));进行初始化。默认日志文件phplog在当前文件夹中生成。后续的日志追加到同一文件中,除非执行文件夹更改,并生成新的日志文件。

使用示例

  • 记录字符串消息$logger->debug("发送'XML'请求类型");
  • 记录xml字符串$logger->debug($xmlRequest);
  • 使用格式化记录$logger->debugFormat("整数:%d,浮点数:%f,Xml-请求:%s\n", array(100, 1.29f, $xmlRequest));

自定义敏感标签

当第一次执行调用记录器的代码时,会生成AuthorizedNetSensitiveTagsConfig.json的本地副本。开发人员可以稍后编辑本地文件以重新配置哪些被掩码以及哪些可见。(不要编辑SDK中的JSON)。

  • 对于 sensitiveTags 数组的每个元素,
    • tagName 字段对应对象中属性的名字,或者应该完全隐藏的xml标签(如果没有指定替换,则显示 XXXX )或进行掩码处理(例如,显示信用卡号的最后4位)。
    • pattern[注意]replacement[注意] 可以留空 "",如果默认值将被使用(如 Log.php 中定义)。pattern 提供用于识别的regex,而 replacement 定义可见部分。
    • disableMask 可以设置为 true 以允许日志完全显示对象中的该属性,或者在xml字符串中的标签。
  • sensitiveStringRegexes[注意] 包含信用卡regex列表。因此,如果信用卡号尚未被掩码,它将被完全掩码。
  • 在定义regex时要注意非ascii字符(参考 手册),例如,使用 "pattern": "(\\p{N}+)(\\p{N}{4})" 而不是 "pattern": "(\\d+)(\\d{4})"。同时请注意,使用了 \\ 转义序列。

注意: 对于任何regex,不应定义起始或结束的 '/' 或任何其他分隔符。代码中添加了 '/' 分隔符和unicode标志。

交易哈希升级

Authorize.Net 正在淘汰基于MD5的 transHash 元素,转而使用基于SHA-512的 transHashSHA2。控制MD5哈希选项的商户界面设置不再可用,并且 transHash 元素将在稍后确定的日期停止返回值。有关如何使用 transHashSHA2 的信息,请参阅 [交易哈希升级指南](https://developer.authorize.net/support/hash_upgrade/)。

许可证

此仓库根据专有许可证分发。请参阅提供的 LICENSE.txt 文件。