thiagomeireless/ame-merchant-sdk

用于与AME商户API通信的SDK。

1.0.0 2020-06-03 16:34 UTC

This package is auto-updated.

Last update: 2024-09-19 23:07:46 UTC


README

创建此SDK的目的是为了简化与AME商户API的集成:[AME官网](https://amedigital.github.io/)

依赖关系

  • PHP >= 7.0

示例

examples文件夹包含了每个请求的示例,可以在终端通过php执行。

php examples/1-authentication.php

同时创建了一个Docker环境来简化示例的使用,可以使用以下方式:

  • .env.example文件复制到.env,并填写必要的3个信息。

  • 在项目目录下,执行docker-compose up -d --build

  • 执行docker-compose exec php-fpm bash进入容器

  • 进入examples目录cd examples

  • 执行所需的示例,建议按照顺序执行。例如

    • 在AME中进行认证并将token保存到Redis中:php 1-authentication.php
    • 创建新订单:php 2-create-order.php
    • 等等...

使用示例

用于获取token的认证

<?php

require_once('vendor/autoload.php');

use AmeMerchant\Exceptions\AmeMerchantSdkException;
use AmeMerchant\Requests\AuthenticationRequest;
use Cache; // Algum storage para salvar o token obtido e reutilizar nas próximas requisições

// Cria uma nova request de autenticação
$request = new AuthenticationRequest(
    'USUÁRIO_LIBERADO_PELA_AME',
    'SENHA_LIBERADA_PELA_AME',
    false // flag para informar em qual ambiente a request será realizada. Default: true (produção)
);

try {
    // Executa a request com informação de debug do Guzzle (não utilizar em Produção)
    $response = $request->withDebug()->execute();
    echo "\n\nRESPONSE:\n";
    echo json_encode($response, JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT);
    
    // Salva o token num Cache (ou outro storage de preferência) utilizando o tempo (em segundos) informado pela AME.
    Cache::set('ame-token', $response->getAccessToken(), $response->getExpiresIn());
} catch (AmeMerchantSdkException $e) {
    // Tratar os erros do SDK aqui
    echo "\n############################## ERROR #############################\n#\n";
    echo "# Status Code: {$e->getStatusCode()}\n";
    echo "# Error: {$e->getError()}\n";
    echo "# Description: {$e->getErrorDescription()}\n";
    echo "#\n###################################################################\n";
}

创建新订单

<?php

require_once('vendor/autoload.php');

use AmeMerchant\Data\Attribute;
use AmeMerchant\Data\Item;
use AmeMerchant\Data\Order;
use AmeMerchant\Exceptions\AmeMerchantSdkException;
use AmeMerchant\Requests\CreateOrderRequest;
use Cache; // Algum storage onde o token está salvo

// Token obtido na requisação de autenticação, que pode estar num cache ou algum outro storage.
$token = Cache::get('ame-token');

// Cria itens que foram vendidos nessa ordem
$item = new Item();
$item->setAmount(100)
     ->setDescription('Teste de criação de item')
     ->setQuantity(1);

$item2 = new Item();
$item2->setAmount(250)
      ->setDescription('Criação de outro item')
      ->setQuantity(2);

// Cria o Atributo dessa ordem
$attribute = new Attribute();
$attribute->setCashbackAmountValue(10)
          ->setTransactionChangedCallbackUrl('https://meudominio.com/callback')
          ->setItems([$item, $item2])
          ->setPaymentOnce(true)
          ->setCustomPayload(['teste' => 'testando - 123']);

// Cria a Ordem com os dados criados anteriormente
$order = new Order();
$order->setTitle('Minha primeira ordem.')
      ->setDescription('Criação de ordem para testes.')
      ->setType('PAYMENT')
      ->setAmount(600)
      ->setAttributes($attribute);

try {
    // Cria nova request de criação de ordem em ambiente de homologação.
    $createOrderRequest = new CreateOrderRequest($token, $order, false);

    // Executa a request com o debug do Guzzle ativado.
    $response = $createOrderRequest->withDebug()->execute();

    echo json_encode($response, JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT);
} catch (AmeMerchantSdkException $e) {
    echo "\n############################## ERROR #############################\n#\n";
    echo "# Status Code: {$e->getStatusCode()}\n";
    echo "# Error: {$e->getError()}\n";
    echo "# Description: {$e->getErrorDescription()}\n";
    echo "#\n###################################################################\n";
}

取消尚未捕获的订单

<?php

require_once('vendor/autoload.php');

use AmeMerchant\Exceptions\AmeMerchantSdkException;
use AmeMerchant\Requests\CancelOrderRequest;
use Cache;

$token = Cache::get('ame-token');

try {
    $cancelOrderRequest = new CancelOrderRequest(
        $token,
        'XYZ', //ID da autorização da ordem recebido via callback
    );

    $response = $cancelOrderRequest->withDebug()->execute();

    echo json_encode($response, JSON_THROW_ON_ERROR | JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
} catch (AmeMerchantSdkException $e) {
    echo "\n############################## ERROR #############################\n#\n";
    echo "# Status Code: {$e->getStatusCode()}\n";
    echo "# Error: {$e->getError()}\n";
    echo "# Description: {$e->getErrorDescription()}\n";
    echo "#\n###################################################################\n";
}

捕获订单

<?php

require_once('vendor/autoload.php');

use AmeMerchant\Exceptions\AmeMerchantSdkException;
use AmeMerchant\Requests\CaptureOrderRequest;
use Cache;

$token = Cache::get('ame-token');

try {
    $captureOrderRequest = new CaptureOrderRequest(
        $token,
        'XYZ', //ID da autorização da ordem recebido via callback
    );

    $response = $captureOrderRequest->withDebug()->execute();

    echo json_encode($response, JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
} catch (AmeMerchantSdkException $e) {
    echo "\n############################## ERROR #############################\n#\n";
    echo "# Status Code: {$e->getStatusCode()}\n";
    echo "# Error: {$e->getError()}\n";
    echo "# Description: {$e->getErrorDescription()}\n";
    echo "#\n###################################################################\n";
}

退款已捕获的订单

<?php

require_once('vendor/autoload.php');

use AmeMerchant\Exceptions\AmeMerchantSdkException;
use AmeMerchant\Requests\RefundOrderRequest;
use Cache;

$token = Cache::get('ame-token');

try {
    $refundOrderRequest = new RefundOrderRequest(
        $token,
        'XYZ', //ID da autorização da ordem recebido via callback
        $rand = md5(microtime()), //ID único para identificar esse estorno (geração própria)
        600 //Valor que deve ser estornado
    );

    $response = $refundOrderRequest->withDebug()->execute();

    echo json_encode($response, JSON_THROW_ON_ERROR | JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
} catch (AmeMerchantSdkException $e) {
    echo "\n############################## ERROR #############################\n#\n";
    echo "# Status Code: {$e->getStatusCode()}\n";
    echo "# Error: {$e->getError()}\n";
    echo "# Description: {$e->getErrorDescription()}\n";
    echo "#\n###################################################################\n";
}