sharik709/laravel-authorizenet

此包允许Laravel应用程序轻松使用authorizenet API。

v0.2.3 2021-01-30 20:36 UTC

This package is auto-updated.

Last update: 2024-09-29 05:28:16 UTC


README

此包是基于官方authorizenet包构建的。它是 authorizenet/authorizenet

使用方法

创建Authorize.net客户资料

$user->anet()->createCustomerProfile();

将信用卡信息保存在数据库中存在风险,并且您还必须遵守PCI标准才能在数据库中保存信用卡信息。小型企业不希望有PCI的麻烦。

小型企业只想向客户收费然后结束。为了解决这个问题,Authorize.net提供了acceptjs。这将允许您直接将信用卡详情发送到Authorize.net,然后它们会发送一些称为不透明数据的数据。您需要从不透明数据中提交两个值 'DataValue' 和 'DataDescriptor'。

为了向客户收费,您应该首先通过上述函数在Authorize.net上创建他们的资料。

这样,Authorize.net会将所有卡片和银行详情保存在客户资料中。

稍后,您可以使用客户资料ID获取付款和其他详情。此包允许您简单地调用 $user->anet()->createCustomerProfile() 并准备就绪。

创建付款资料

$user->anet()->createPaymentProfile([
    'dataValue' => $opaqueData->dataValue,
    'dataDescriptor' => $opaqueData->dataDescriptor
], [
    'last_4' => 1234,
    'brand'  => 'VISA',
    'type'   => 'card'
])

付款资料是一种解决在数据库中存储信用卡和银行详情问题的方法。

为了在数据库中保存信用卡或银行详情,您需要遵守PCI标准。对于小型企业来说,这并不是理想的做法。因此,您可以使用付款资料,它是为信用卡或银行生成的唯一ID。您可以将它存储在您的数据库中,并对其信用卡或银行账户进行收费。

为了创建付款资料,您需要设置一个表单。用户将在其中提供卡或银行详情。Authorize.net提供了Accept.js,它将表单中的数据发送到Authorize.net,一旦验证通过,Authorize.net将发送 $opaqueData。然后需要将其发送到您的服务器并处理付款资料的创建。

成功创建付款资料后,您将获得付款资料ID。您可以使用此ID对创建此付款资料的卡或银行账户进行收费,并且您可以无限次地重复使用它,只要它引用有效的信用卡或银行账户。

获取付款资料(获取添加的卡和银行账户)

$paymentMethods = $user->anet()->getPaymentMethods();

这将允许您获取您创建的所有付款方式或付款资料。

要仅获取卡片,您可以使用。

$paymentCards = $user->anet()->getPaymentCardProfiles();

要仅获取银行,您可以使用。

$paymentBanks = $user->anet()->getPaymentBankProfiles();

对付款资料进行收费(收费卡片或银行)

// Amount in cents 
$user->anet()->charge(19000, $paymentProfileId]);

用户可以使用付款资料进行收费。

付款资料是信用卡或银行的唯一ID。请参阅上面的付款资料。

大多数人更喜欢以分的形式保存收费金额。因此,您需要传递要收费的分数,例如 1000 分等于 $10

退款交易

$user->anet()->refund($amount_in_cents, $refsTransId, $payment_profile_id);

$amount_in_cents 是退款金额。

$refsTransId 您在向用户收费时获得此ID

$payment_profile_id 请参阅上面的信息了解更多关于付款资料ID的详细信息。基本上,在这里它意味着对给定的付款资料ID进行退款

开发中

我在生产环境中使用此代码,但请在将其用于生产之前确保它做您期望的事情。

可用方法

$user->anet()->charge(1200, $paymentProfile); // $12

它将在Authorize.net上创建客户资料

$user->anet()->createCustomerProfile();

它将返回Authorize.net的客户资料ID

$user->anet()->getCustomerProfileId();
$user->anet()->getPaymentProfiles();
$user->anet()->createPaymentProfile();

卡片收费

        // $user is your laravel user model
        $response = $user
            ->anet()
            ->card()
            ->setNumbers(4111111111111111)
            ->setCVV(111)
            ->setNameOnCard('John Doe')
            ->setExpMonth(4)
            ->setExpYear(42)
            ->setAmountInCents(1000) // $10
            ->charge();

交易方法

当您成功运行 $user->anet()->charge($amount, $paymentProfile) 时,您将获得以下方法:

  • getTransactionResponse

    • getResponseCode
    • setResponseCode
    • getRawResponseCode
    • setRawResponseCode
    • getAuthCode
    • setAuthCode
    • getAvsResultCode
    • setAvsResultCode
    • getCvvResultCode
    • setCvvResultCode
    • getCavvResultCode
    • setCavvResultCode
    • getTransId
    • setTransId
    • getRefTransID
    • setRefTransID
    • getTransHash
    • setTransHash
    • getTestRequest
    • setTestRequest
    • getAccountNumber
    • setAccountNumber
    • getEntryMode
    • setEntryMode
    • getAccountType
    • setAccountType
    • getSplitTenderId
    • setSplitTenderId
    • getPrePaidCard
    • setPrePaidCard
    • addToMessages
    • issetMessages
    • unsetMessages
    • getMessages
    • setMessages
    • addToErrors
    • issetErrors
    • unsetErrors
    • getErrors
    • setErrors
    • addToSplitTenderPayments
    • issetSplitTenderPayments
    • unsetSplitTenderPayments
    • getSplitTenderPayments
    • setSplitTenderPayments
    • addToUserFields
    • issetUserFields
    • unsetUserFields
    • getUserFields
    • setUserFields
    • getShipTo
    • setShipTo
    • getSecureAcceptance
    • setSecureAcceptance
    • getEmvResponse
    • setEmvResponse
    • getTransHashSha2
    • setTransHashSha2
    • getProfile
    • setProfile
    • getNetworkTransId
    • setNetworkTransId
    • jsonSerialize
    • set
  • getProfileResponse

  • getRefId

  • getMessages

  • getSessionToken

周期性支付或订阅

您可以使用以下任何一种方法来获取订阅类的实例,该实例允许您管理订阅。它们都是相同的,因为想要确保它们适合您的环境上下文。

    $user->anet()->subs();
    $user->anet()->subscription();
    $user->anet()->recurring();

您可以通过以下方法创建、更新、取消和获取订阅:

1. 创建订阅

$response = $user->anet()->subs()->create([
    'name'  => 'Sample Subscription',
    'startDate' => '2022-03-12',
    'totalOccurrences' => 12,
    'trialOccurrences' => 1,
    'intervalLength' => 30,
    'intervalLengthUnit' => 'days',
    'amountInDollars' => 10, // $10
    'trialAmountInDollars' => 0, // $0
    'cardNumber' => 4111111111111111,
    'cardExpiry' => '2038-12',
    'invoiceNumber' => 1232434243,
    'subscriptionDescription' => 'Some services will be provided some how.',
    'customerFirstName' => 'john',
    'customerLastName' => 'doe'
]);

$response 将为您提供订阅 ID 以及有关订阅的必要详细信息。

2. 更新订阅

$response = $user->anet()->subs()->update($subscriptionId, [
    'cardNumber' => 4111111111111111,
    'cardExpiry' => '2022-12'
]);

3. 取消订阅

$response = $user->anet()->subs()->cancel($subscriptionId);

4. 获取一个订阅

$response = $user->anet()->subs()->get($subscriptionId);

5. 获取带有筛选器的所有订阅

$options = [
    'orderBy' => 'id',
    'orderDescending' => false,
    'limit' => 300, // Default is 1000
    'offset' => 2, // Default is 1
    'searchType' => 'subscriptionActive', // subscriptionActive, subscriptionInactive. Default is subscriptionActive
];
$response = $user->anet()->subs()->getList($options);

如果您不想使用筛选器,则不要传递任何选项数组。它将使用默认设置并给出您的列表。

6. 获取订阅的状态

$response = $user->anet()->subs()->getStatus($subscriptionId);

许可证

MIT

安装步骤

步骤 1

执行 composer require sharik709/laravel-authorizenet

步骤 2

如果您正在使用 laravel 5.5 或更高版本,则不需要注册服务提供程序。如果您正在使用 5.4 或更低版本,则需要在您的 config/app.php 中的 providers 数组中注册服务提供程序。

ANet/AuthorizeNetServiceProvider::class

步骤 3

在您的 .env 文件中,您需要定义以下键

AUTHORIZE_NET_LOGIN_ID=
AUTHORIZE_NET_CLIENT_KEY=
AUTHORIZE_NET_TRANSACTION_KEY=

您可以从 authorize.net 的沙箱或实时帐户中获取上述信息。最好在您的 .env.example 文件中也定义上述键

步骤 4

此包需要一张表来存储卡片配置文件 ID 和其他信息。因此,您需要运行迁移以迁移此包的表。

php artisan migrate

步骤 5

为了使 anet() 方法在您的用户模型上可用,您需要将 ANet\Traits\ANetPayments 特性添加到您的模型中。

use ANet\Traits\ANetPayments;

class User extends Model {
    use ANetPayments;
}