Closed VictorRabelo closed 3 years ago
Olá @VictorRabelo tem como você colar o trecho de código de seu lado, para eu ver como estão as chamadas?
Bom eu tenho dois arquivos que trata a requisição vinda do front, o primeiro é o App\Traits\UserTrait.php que contém esse método
`public function _userStore($request, $sing) {
try {
$plan = '';
if(!empty($request->type_payment) && $request->type_payment == 'boleto') {
$plan = "PLANO PADRAO BOLETO";
}elseif(!empty($request->type_payment) && $request->type_payment == 'cartao') {
$plan = "PLANO PADRAO";
}
$url = '';
if(isset($request->new_account) && $request->new_account == 'no') {
$user = User::where('cpf', $this->soNumero($request->cpf))->first();
if(!empty($user)):
// Criar cliente no Iugu
//$user->createAsIuguCustomer();
if($sing):
if($request->type_payment == 'cartao' && isset($request->credit_card) && is_array($request->credit_card)) {
$invoice = $user->singSubscription($plan, $request->type_payment, $request->credit_card);
if($invoice->status == 'paid') {
$this->activateAccount($user);
}
$url = $invoice->secure_url;
}else{
$invoice = $user->singSubscription($plan, $request->type_payment);
if($invoice->status == 'paid') {
$this->activateAccount($user);
}
$url = $invoice->secure_url;
}
endif;
if(empty($url)):
return response()->json(['status' => false, 'error' => 'Ocorreu um erro ao processar o pedido!'], 400);
endif;
return response()->json(['status' => true, 'user' => $user, 'url' => $url, 'message' => 'Recebemos seus dados com sucesso, e você será redirecionado!'], 200);
endif;
}else{
$data = $this->prepareData($request);
if(User::where('cpf', $data['cpf'])->first()) {
return response()->json(['status' => false, 'error' => 'Já existe esse CPF cadastrado!'], 400);
}
$user = User::where('email', trim($request->email))->first();
if(empty($user)) {
$user = User::create($data);
$user->role()->create([
'role' => 'guest'
]);
}
if($user):
if($sing):
if($request->type_payment == 'cartao' && isset($request->credit_card) && is_array($request->credit_card)) {
$invoice = $user->singSubscription($plan, $request->type_payment, $request->credit_card);
if($invoice->status == 'paid') {
$this->activateAccount($user);
}
$url = $invoice->secure_url;
}else{
$invoice = $user->singSubscription($plan, $request->type_payment);
if($invoice->status == 'paid') {
$this->activateAccount($user);
}
$url = $invoice->secure_url;
}
endif;
if(empty($url)):
return response()->json(['status' => false, 'error' => 'Ocorreu um erro ao processar o pedido!'], 400);
endif;
return response()->json(['status' => true, 'user' => $user, 'url' => $url, 'message' => 'Recebemos seus dados com sucesso, e você será redirecionado!'], 200);
else:
return response()->json(['status' => false, 'error' => 'Existe um erro, fale com o administrador!'], 400);
endif;
}
} catch (\Exception $e) {
return response()->json(['status' => false, 'error' => $e->getMessage()], 400);
}
}`
PS: a variável $invoice recebe uma função que não esta retornando nada.
E o segundo é App\Models\User.php que contem esse trecho de código em especifico pois é o trecho que não está retornando nada, `public function singSubscription($plan, $type, $credit_card = null) { $qtdDiasAteVencimento = 3; $payable_with = '';
if($type == 'boleto') {
$payable_with = "bank_slip";
}elseif($type == 'cartao') {
$payable_with = "credit_card";
}
$subscriptionBuilder = $this->newSubscription($plan, $plan, [], ['payable_with' => $payable_with]);
if($type == 'boleto') {
$subscriptionBuilder->daysToExpire($qtdDiasAteVencimento );
}
$options = [
'name' => $this->name,
'street' => $this->rua,
'district' => $this->bairro,
'cpf_cnpj' => $this->cpf,
'zip_code' => $this->cep,
'number' => $this->numero,
];
$creditCardToken = null;
if(!empty($credit_card)) {
$creditCardToken = $this->getToken($credit_card);
}
$signature = $subscriptionBuilder->create($creditCardToken, $options);
if ($signature) {
$invoice = null;
if ($signature && isset($signature['recent_invoices'])):
foreach ($signature->recent_invoices as $invoiceData):
$invoice = $invoiceData;
endforeach;
endif;
return $invoice;
} else {
$erros = $subscriptionBuilder->getLastError();
if (is_array($erros)) {
// array
} else {
// string
}
}
}`
Uma dica. Aqui $this->newSubscription($plan, $plan, [], ['payable_with' => $payable_with]);
usa um nome fixo no primeiro parâmetro em vez de $plan
, pois isso aí só serve para quando você tem 2 assinaturas de produtos diferentes no site.
Sobre o erro ainda não consegui identificar, você conseguiria colar o trace completo aqui do erro?
@gabrielpeixoto, Agora está me retornando uma resposta de dd(),
"plan_identifier" => array:1 [ 0 => "não é válido" ]
,
Creio eu que fica mais fácil de resolver esse problema
Ahhh, no iugu tem um identificador do plano, é ele que deve ser passado por parâmetro.
Como está o identificador dos planos em https://alia.iugu.com/receive/plans? Clicando no plano, na página de detalhes mostra o identificador.
Esse valores que você deve passar ali onde passou o "PLANO PADRAO BOLETO"
@gabrielpeixoto Muitooooooo obrigado cara! Sucessos ai
Estou com esse erro(" Error: "Trying to get property 'status' of non-object" ") ao efetuar pagamentos com cartão de crédito, pagamentos com a opção boleto bancário está ok, único problema está no cartão de credito, o erro está vindo da biblioteca, o trecho de código em especifico " $subscriptionIugu = $this->user->createIuguSubscription($this->buildPayload($customer->id)); ", está localizado no caminho " poleto/gu-payment/src/SubscriptionBuilder.php ", que esta dentro do método " create($token = null, array $options = []) "