wws-aslan/authorizenet-php-sdk

Authorize.Net的官方PHP SDK

2.1.1 2024-05-28 23:34 UTC

This package is auto-updated.

Last update: 2024-09-29 00:18:24 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请求之前,请阅读贡献指南

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 字段对应于对象中属性或应该完全隐藏(如果没有指定替换,则显示 XXXX)或需要屏蔽(例如,显示信用卡号码的最后四位)的 xml 标签的名称。
    • pattern[注]replacement[注] 可以留为 "",如果默认值将被使用(如 Log.php 中定义)。pattern 提供用于识别正则表达式,而 replacement 定义可见部分。
    • disableMask 可以设置为 true,以允许日志完全显示对象中的属性或 XML 字符串中的标签。
  • sensitiveStringRegexes[注] 包含信用卡正则表达式的列表。因此,如果信用卡号码尚未被屏蔽,则将完全屏蔽。
  • 定义正则表达式时,请注意非 ASCII 字符(参考 手册)。例如,使用 "pattern": "(\\p{N}+)(\\p{N}{4})" 而不是 "pattern": "(\\d+)(\\d{4})"。此外,请注意使用 \\ 转义序列。

注: 对于任何正则表达式,不应定义起始或结束的 '/' 或任何其他分隔符。代码中已添加 '/' 分隔符和 unicode 标志。

交易哈希升级

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

许可证

此存储库在专有许可证下分发。请参阅提供的 LICENSE.txt 文件。