pfeurean/authorizenet

Authorize.Net 的官方 PHP SDK(包含 BluePay 补丁)

1.9.6a 2018-05-17 20:15 UTC

README

Travis CI Status Scrutinizer Code Quality Packagist

需求

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

TLS 1.2

Authorize.Net API 只支持使用 TLS 1.2 安全协议的连接。此 SDK 使用 libcurlOpenSSL(或等效加密库)与 Authorize.Net API 进行通信。确保您拥有支持 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": "~1.9.6"
  }
}

通过 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 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));

自定义敏感标签

当代码首次调用 logger 时,会生成 AuthorizedNetSensitiveTagsConfig.json 的本地副本。开发人员可以稍后编辑该本地文件以重新配置应屏蔽的内容和可见的内容。(不要编辑 SDK 中的 JSON)。

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

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

许可

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