MercadoPago\Net\MPResponse::__construct(): Argument #2 ($content) must be of type array, null given #486
-
Olá! Tou usando o sdk 3.0.0 com PHP 8.1 e laravel 10 para criar preferência que seria usada no checkout, porém quando chamo o
Meu código: use MercadoPago\Client\Payment\PaymentClient;
use MercadoPago\MercadoPagoConfig;
use MercadoPago\Client\Preference\PreferenceClient;
class MercadoPagoController extends AppBaseController
{
/**
* @throws Throwable
* @throws HttpException
*/
protected function authenticate()
{
$mpAccessToken = getSelectedPaymentGateway('mercado_pago_access_token');
MercadoPagoConfig::setAccessToken($mpAccessToken);
}
/**
* @throws HttpException
* @throws HttpException|Throwable
*/
protected function createReferenceRequest($item, $payer): array
{
$paymentMethods = [
"excluded_payment_methods" => array(["id" => "pec"]),
"installments" => 12,
"default_installments" => 1
];
$backUrls = array(
'success' => route('mercadopago.success'),
'failure' => route('mercadopago.failed')
);
$request = [
"items" => array($item),
"payer" => $payer,
"payment_methods" => $paymentMethods,
"back_urls" => $backUrls,
"statement_descriptor" => strtoupper(getAppName()),
"external_reference" => $item->id ?? "",
"expires" => false,
"auto_return" => 'approved',
];
return $request;
}
/**
* @throws HttpException
* @throws HttpException|Throwable
*/
public function createPaymentPreference(
string $title,
string $description,
string $currency,
float $price,
int $itemId = null
) {
$this->authenticate();
$user = getLogInUser();
$item = array(
"id" => $itemId ?? "",
"title" => $title,
"description" => $description,
"currency_id" => $currency,
"quantity" => 1,
"unit_price" => $price
);
if (isset($itemId)) {
$item['id'] = (string) $itemId;
}
$payer = array(
"name" => $user->first_name,
"surname" => $user->last_name,
"email" => $user->email,
"phone" => $user->contact
);
$request = $this->createReferenceRequest($item, $payer);
$client = new PreferenceClient();
$preference = $client->create($request); //<---------- ERRO AQUI
return $preference->id;
}
} A variável {
"items":[
{
"id":"3",
"title":"Plano Platinum",
"description":"PlanId 3, Frequ\u00eancia Mensal, subscriptionId 3",
"currency_id":"BRL",
"quantity":1,
"unit_price":59.1
}
],
"payer":{
"name":"Marcelino",
"surname":"Borges",
"email":"[email protected]",
"phone":"8199999-9999"
},
"payment_methods":{
"excluded_payment_methods":[
{
"id":"pec"
}
],
"installments":12,
"default_installments":1
},
"back_urls":{
"success":"http:\/\/localhost:8000\/admin\/mercadopago-payment-success",
"failure":"http:\/\/localhost:8000\/admin\/mercadopago-payment-failed"
},
"statement_descriptor":"NOME_DO_APP",
"external_reference":"",
"expires":false,
"auto_return":"approved"
} Tou seguindo essa documentação AQUI. E tou considerando que o Pelo que entendi tá estourando o erro aqui: Revisei minhas funções várias vezes, mas não consegui identificar se foi algo errado que eu fiz, mas não parece ter sido isso. Conseguem me ajudar? Obrigado! |
Beta Was this translation helpful? Give feedback.
Replies: 3 comments 4 replies
-
Olá @marcelino-borges, tudo bem? Não consegui reproduzir o seu caso mesmo usando o payload que você passou. Poderia por favor testar com a versão 8.2 do PHP? Obrigado! |
Beta Was this translation helpful? Give feedback.
-
@marcelino-borges estive com o mesmo problema por aqui. E vi que o Curl n tava sendo executado, pois me faltava o certificado SSL.
|
Beta Was this translation helpful? Give feedback.
-
Criada nova versão do SDK (3.0.1) com a sugestão de solução. |
Beta Was this translation helpful? Give feedback.
@marcelino-borges estive com o mesmo problema por aqui. E vi que o Curl n tava sendo executado, pois me faltava o certificado SSL.
Pra resolver fiz isso em createHttpRequestOptions (src/mercadopago/Net/MPDefaultHttpClient.php) eu passo como false a verificação. Mas provisoriamente, pois vou instalar um certificado.