Closed felipemarques closed 4 years ago
Se for pra contribuir tambem ... criei um service ... e atraves dele .. usei outra classe do Iugu ... Iugu_APIRequest ... e esta nao gerou erro:
<?php
namespace Modules\AppMobile\Services;
use Iugu;
use Iugu_APIRequest;
use Illuminate\Support\Facades\Redis;
use Modules\LiveWebinar\Entities\Webinar;
use Modules\LiveWebinar\Exceptions\WebinarException;
/**
* Class IuguService
* @package Modules\AppMobile\Services
*/
class IuguService
{
/**
* get payment token from gateway
*
* @param string $number
* @param string $name
* @param string $expirationDate
* @param string $cvv
* @return string
*/
public static function getPaymentToken($number, $name, $expirationDate, $cvv)
{
Iugu::setApiKey( env('IUGU_APIKEY') );
$name = getFirsAndLastName($name, true, true);
$expirationDate = getExpirationDate($expirationDate);
$iugu = new Iugu_APIRequest;
$paymentTokenResult = $iugu->request('POST', 'https://api.iugu.com/v1/payment_token', array(
'account_id' => env('IUGU_ID'),
'method' => 'credit_card',
'test' => true,
'data' => [
'number' => $number,
'verification_value' => $cvv,
'first_name' => $name->firstName,
'last_name' => $name->lastName,
'month' => $expirationDate->month,
'year' => $expirationDate->year
]
));
if (!empty($paymentTokenResult->errors)) {
$errors = $paymentTokenResult->errors;
$errorMessage = '';
if (!is_array($errors)) {
$errorMessage = $errors;
} else {
foreach ($errors as $k => $v) {
$errorMessage .= $k . ' => ' . implode(', ', $v) . PHP_EOL;
}
}
throw new \Exception($errorMessage);
} else {
$creditCardToken = $paymentTokenResult->id;
return $creditCardToken;
}
}
/**
* findCard
*
* @param string $customerId
* @param string $cardId
* @return string|bool
*/
public static function findCard($customerId, $cardId)
{
Iugu::setApiKey( env('IUGU_APIKEY') );
$iugu = new Iugu_APIRequest;
$result = $iugu->request('GET', "https://api.iugu.com/v1/customers/{$customerId}/payment_methods/{$cardId}");
if (isset($result->id)) {
return $result->id;
} else {
return false;
}
}
/**
* listAllCards
*
* @param string $customerId
* @return array|bool
*/
public static function listAllCards($customerId)
{
Iugu::setApiKey( env('IUGU_APIKEY') );
$iugu = new Iugu_APIRequest;
$result = $iugu->request('GET', "https://api.iugu.com/v1/customers/{$customerId}/payment_methods");
return $result;
}
}
Pra usar o service acima é semelhante ao que se usa na lib aqui do GuPayment.. porem:
$creditCardToken = IuguService::findCard($user->iugu_id, $gatewayCardId);
Olá @felipemarques obrigado por notar e informar o problema.
E valeu pelo trecho de código também. Vou simular o erro, ajustar no pacote e pegar as dicas do código que enviou.
Abraços
Olá, não consegui simular o que mandou, o retorno do método findCard retorna o seguinte:
Realmente, na linha 58 da biblioteca Iugu em /lib/Iugu/APIChildResource.php existe um print_r:
print_r([$this->mergeParams($key), $this->_parentKeys]);
retornando no HTML da view que requisita $user->findCard() o seguinte:
@gabrielpeixoto outro dev relatou o mesmo problema, consegue dar uma olhada novamente?
@felipemarques este problema está na biblioteca da Iugu, acredito que seria interessante comentar no repositório deles para ver se corrigem ou fazer um PR no repositório. Eles não são nada ativos ou solicitos via github então dependendo da sua urgência acho que vale tentar contato com o suporte via canais oficiais.
Olá Pessoal, já tentei solicitar algumas mudanças no pacote deles, mas eles não fazem mais alterações lá.
Boa noite,
Primeiramente muito obrigado pela sua contribuição. A biblioteca é excelente.
Fiz a instalação e configuração do modulo em um projeto laravel e estou com problemas. O problema esta ao utilizar a function $user->findCard($cardId).
Fiz o rastreamento de um output estranho:
E cheguei no arquivo ./vendor/iugu/lib/Iugu/APIChildResource.php
E agora acabei de descobrir que o erro não é na sua lib .. e sim na lib da Iugu. Observe o ultimo metodo da classe abaixo, o fetch:
Vou entrar em contato no outro repositorio