Ir para o conteúdo

Billing (3DS Support)

O helper Billing normaliza os dados opcionais de faturação para uma compra. Para não enviar billing, passe [] explicitamente em preparePurchase($amount, []).

Ele cobre:

  • campos obrigatórios de faturação;
  • endereço de entrega;
  • telefones;
  • identificação e histórico da conta;
  • indicação de atividade suspeita;
  • correspondência entre endereço de faturação e entrega.

Exemplo rápido com Billing::from()

Use from() quando os dados já estão num array:

use Erilshk\Sisp\Billing;

$billing = Billing::from([
    'email' => 'user@mail.com',
    'country' => '132',
    'city' => 'Praia',
    'address' => 'Achada Santo António',
    'postalCode' => '7600',
    'mobilePhone' => '9911122',
]);

O objeto pode ser enviado diretamente:

$vinti4->preparePurchase(1500, $billing);

Para obter o array normalizado:

$data = $billing->toArray();

Exemplo completo com chaining

$billing = Billing::make()
    ->email('user@mail.com')
    ->country('132')
    ->city('Praia')
    ->address('Achada Santo António')
    ->address2('Bloco B, Apt 10')
    ->address3('Próximo ao mercado')
    ->postalCode('7600')
    ->state('01')
    ->shipCountry('132')
    ->shipAddress('Rua de Entrega, 45')
    ->shipCity('Praia')
    ->shipPostalCode('7601')
    ->shipState('01')
    ->mobilePhone('238', '9911122')
    ->workPhone('238', '2612345')
    ->accountId('123456')
    ->accountInfo([
        'chAccAgeInd' => '05',
        'chAccChange' => '20230101',
        'chAccDate' => '20220101',
        'chAccPwChange' => '20230201',
        'chAccPwChangeInd' => '05',
        'suspiciousAccActivity' => '01',
    ])
    ->addressMatchesShipping(false)
    ->suspicious(false);

make() é indicado quando os dados são adicionados de forma gradual. toArray() remove campos vazios.


Campos obrigatórios

Campo SISP Nome amigável Tipo Descrição
email email string E-mail do titular
billAddrCountry country string País em código numérico, como 132
billAddrCity city string Cidade de faturação
billAddrLine1 address string Endereço principal
billAddrPostCode postalCode string Código postal

billAddrCountry usa 132 por padrão. Se informar billing, forneça email, cidade, morada e código postal. Para não enviar dados 3DS adicionais, passe [] em preparePurchase().

Campos opcionais de faturação

Campo SISP Nome amigável Método
billAddrLine2 address2 address2()
billAddrLine3 address3 address3()
billAddrState state state()

Endereço de entrega

Campo SISP Nome amigável Método
shipAddrCountry shipCountry shipCountry()
shipAddrCity shipCity shipCity()
shipAddrLine1 shipAddress shipAddress()
shipAddrPostCode shipPostalCode shipPostalCode()
shipAddrState shipState shipState()

Use addressMatchesShipping(true) quando o endereço de entrega corresponde ao endereço de faturação. O valor enviado será Y; para false, será N.


Telefones

$billing
    ->mobilePhone('238', '9911122')
    ->workPhone('238', '2612345');

A estrutura final é:

[
    'cc' => '238',
    'subscriber' => '9911122',
]

Ao usar Billing::from(), também pode passar apenas o número. Nesse caso, a biblioteca usa 238 como código padrão.

Billing::from([
    'phone' => '9911122',
    // Ou: 'mobilePhone' => ['cc' => '238', 'subscriber' => '9911122'],
]);

Para +2389911122 ou números de outros países, informe cc e subscriber separadamente. A classe retira caracteres não numéricos, mas não interpreta automaticamente um prefixo internacional; +2389911122 passado como uma string inteira duplicaria o indicativo.


Dados da conta

acctID

Identifica a conta do cliente no sistema do comerciante:

$billing->accountId('CLIENTE-123');

O limite validado pela requisição é 64 caracteres.

acctInfo

$billing->accountInfo([
    'chAccAgeInd' => '05',
    'chAccDate' => '20220101',
    'chAccChange' => '20230101',
    'chAccPwChange' => '20230201',
    'chAccPwChangeInd' => '05',
]);

Quando não informados, chAccAgeInd, chAccPwChangeInd e suspiciousAccActivity recebem valores padrão.

As datas de acctInfo são enviadas como fornecidas; use o formato YYYYMMDD. created_at e updated_at não são aliases de Billing::from() e serão ignorados. Mapeie campos do seu $user explicitamente para as chaves SISP. fromUser() permanece apenas para compatibilidade.

Atividade suspeita

$billing->suspicious(true);

true define suspiciousAccActivity como 02; false define como 01.


Nomes amigáveis e nomes SISP

Billing::from() aceita os dois formatos:

Billing::from([
    'country' => '132',
    'billAddrCity' => 'Praia',
    'address' => 'Plateau',
    'billAddrPostCode' => '7600',
    'email' => 'user@mail.com',
]);

Campos desconhecidos são ignorados.

Um payload 3DS já no formato SISP também pode ser passado diretamente:

$billing = Billing::from([
    'email' => 'cliente@example.cv',
    'billAddrCountry' => '132',
    'billAddrCity' => 'Praia',
    'billAddrLine1' => 'Rua Principal, 1',
    'billAddrPostCode' => '7600',
    'addrMatch' => 'N',
    'mobilePhone' => ['cc' => '238', 'subscriber' => '9912345'],
    'acctInfo' => ['chAccDate' => '20220328'],
]);

Para dados da sua aplicação, faça o mapeamento com nomes explícitos:

$billing = Billing::from([
    'email' => $user['email'],
    'city' => $user['city'],
    'address' => $user['address'],
    'postalCode' => $user['postal_code'],
    'accountId' => (string) $user['id'],
    'mobilePhone' => ['cc' => '238', 'subscriber' => $user['phone']],
]);

Nesse exemplo, $user['phone'] deve conter o número local, sem +238. O Billing não garante que os valores recebidos correspondem a um telefone, país ou endereço válidos: essa verificação pertence à aplicação.