larium / credit-card

信用卡作为值对象。

2.0.0 2023-04-17 15:06 UTC

This package is auto-updated.

Last update: 2024-09-17 18:29:22 UTC


README

Coverage Status Build Status Scrutinizer Code Quality

信用卡作为值对象

安装

您可以使用Composer安装此库

有关如何安装Composer的信息,您可以在这里找到这里

命令行

在项目的根目录下运行控制台

$ composer require "larium/credit-card":"@stable"

Composer.json

在您的composer.json文件中包含require行

{
	"require": {
    	"larium/credit-card": "@stable"
    }
}

并在项目根目录下从控制台运行

$ composer update

之后,您必须从Composer要求自动加载文件。

<?php
require_once 'vendor/autoload.php';

用法

创建信用卡对象

<?php
use Larium\CreditCard\CreditCard;
use Larium\CreditCard\CreditCardValidator;

require_once 'vendor/autoload.php';

$data = array(
    'holderName'=> 'John Doe',
    'month'     => 1,
    'year'      => date('Y') + 1,
    'brand'     => CreditCard::VISA,
    'number'    => '4532875311640795',
    'cvv'       => '123',
);

$card = new CreditCard($data);

echo $card->getBrand(); # visa
//Auto uppercase holder name.
echo $card->getHolderName(); # JOHN DOE

$card = $card->withNumber('5284911033259148');
echo $card->getBrand(); # master

在信用卡对象中添加令牌

<?php
use Larium\CreditCard\CreditCard;
use Larium\CreditCard\CreditCardValidator;
use Larium\CreditCard\Token;

require_once 'vendor/autoload.php';

$data = array(
    'holderName' => 'John Doe',
    'month'     => 1,
    'year'      => date('Y') + 1,
    'brand'     => CreditCard::VISA,
    'number'    => '4532875311640795',
    'cvv'       => '123',
);

$card = new CreditCard($data);

# ... use credit card to obtain a token reference from a remote payment gateway.

$token = new Token('0123456789');

$card = $card->withToken($token);

# Now, credit card will use token for future payments
# and will mask any sensitive data as number and cvv.
echo $card->getCvv(); # null
echo $card->getNumber(); # XXXX-XXXX-XXXX-0795
echo $card->getToken(); # 0123456789

在某些情况下,我们需要使用临时令牌来完成支付。许多支付网关支持有限时间的令牌,它代表一张卡或一种支付方式。

<?php
use Larium\CreditCard\Token;

require_once 'vendor/autoload.php';

$token = new Token('0123456789', new DateTime('15 minutes'));
$token->isExpired() # false

$token = new Token('0123456789', new DateTime('15 minutes ago'));
$token->isExpired() # true

验证信用卡

use Larium\CreditCard\CreditCard;
use Larium\CreditCard\CreditCardValidator;

require_once 'vendor/autoload.php';

$data = array(
    'holderName'=> 'John Doe',
    'month'     => 1,
    'year'      => date('Y') + 1,
    'brand'     => CreditCard::VISA,
    'number'    => '4532875311640795',
    'cvv'       => '123',
);

$card = new CreditCard($data);

$validator = new CreditCardValidator();
$errors = $validator->validate($card);
$valid = count($errors) === 0; # true

$card = $card->withNumber('1');
$error = $validator->validate($card);

print_r($errors);
/*
Array
(
    [number] => not a valid number
    [brand] => not valid card type
)
*/

验证信用卡的令牌

<?php

use Larium\CreditCard\CreditCard;
use Larium\CreditCard\CreditCardValidator;
use Larium\CreditCard\Token;

require_once 'vendor/autoload.php';

$card = new CreditCard();
$token = new Token('0123456789');
$card = $card->withToken($token);
$validator = new CreditCardValidator(CreditCardValidator::CONTEXT_TOKEN);
$errors = $validator->validate($card);
$valid = count($errors) === 0; # true

$token = new Token('0123456789', new DateTime('15 minutes ago'));
$card = $card->withToken($token);
$validator->setContext(CreditCardValidator::CONTEXT_TOKEN);
$validator->validate($card);
$validator->getErrors();
/*
Array
(
    [token] => token has been expired
)
*/