Laravel - Paypal SDK

CassioDevito
Colaborador
Colaborador

Boa dia.

 

Estou a utilizar o laravel como framework.
Estou a tentar seguir o guia do SDK da Paypal https://github.com/paypal/PayPal-PHP-SDK

Tal como este tutorial para implementar no laravel : https://medium.com/justlaravel/how-to-integrate-paypal-payment-gateway-in-laravel-695063599449

 

Contudo sempre que tento efetuar autenticação aparece-me o seguinte erro:

 

PayPal \ Exception \ PayPalConnectionException (401)
Got Http response code 401 when accessing https://api.sandbox.paypal.com/v1/invoicing/invoices.
 
Meu controller de teste:
 
<?php

namespace App\Http\Controllers\Site;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

use PayPal\Api\Address;
use PayPal\Api\BillingInfo;
use PayPal\Api\Cost;
use PayPal\Api\Currency;
use PayPal\Api\Invoice;
use PayPal\Api\InvoiceAddress;
use PayPal\Api\InvoiceItem;
use PayPal\Api\MerchantInfo;
use PayPal\Api\PaymentTerm;
use PayPal\Api\Phone;
use PayPal\Api\ShippingInfo;

use PayPal\Auth\OAuthTokenCredential;
use PayPal\Rest\ApiContext;

class PaypalController extends Controller
{
    private $_api_context;

    public function __construct()
    {
        /** PayPal api context **/
        $paypal_conf = \Config::get('paypal');
        $this->_api_context = new ApiContext(new OAuthTokenCredential(
            $paypal_conf['client_id'],
            $paypal_conf['secret'])
        );
        $this->_api_context->setConfig($paypal_conf['settings']);
    }

    public function teste(){
        $invoice = new Invoice();
        // ### Invoice Info
        // Fill in all the information that is
        // required for invoice APIs
        $invoice
            ->setMerchantInfo(new MerchantInfo())
            ->setBillingInfo(array(new BillingInfo()))
            ->setNote("Medical Invoice 16 Jul, 2013 PST")
            ->setPaymentTerm(new PaymentTerm())
            ->setShippingInfo(new ShippingInfo());
        // ### Merchant Info
        // A resource representing merchant information that can be
        // used to identify merchant
        $invoice->getMerchantInfo()
            ->setEmail("email")
            ->setFirstName("Dennis")
            ->setLastName("Doctor")
            ->setbusinessName("Medical Professionals, LLC")
            ->setPhone(new Phone())
            ->setAddress(new Address());
        $invoice->getMerchantInfo()->getPhone()
            ->setCountryCode("001")
            ->setNationalNumber("5032141716");
        // ### Address Information
        // The address used for creating the invoice
        $invoice->getMerchantInfo()->getAddress()
            ->setLine1("1234 Main St.")
            ->setCity("Portland")
            ->setState("OR")
            ->setPostalCode("97217")
            ->setCountryCode("US");
        // ### Billing Information
        // Set the email address for each billing
        $billing = $invoice->getBillingInfo();
        $billing[0]
            ->setEmail("email");
        $billing[0]->setBusinessName("Jay Inc")
            ->setAdditionalInfo("This is the billing Info")
            ->setAddress(new InvoiceAddress());
        $billing[0]->getAddress()
            ->setLine1("1234 Main St.")
            ->setCity("Portland")
            ->setState("OR")
            ->setPostalCode("97217")
            ->setCountryCode("US");
        // ### Items List
        // You could provide the list of all items for
        // detailed breakdown of invoice
        $items = array();
        $items[0] = new InvoiceItem();
        $items[0]
            ->setName("Sutures")
            ->setQuantity(100)
            ->setUnitPrice(new Currency());
        $items[0]->getUnitPrice()
            ->setCurrency("USD")
            ->setValue(5);
        // #### Tax Item
        // You could provide Tax information to each item.
        $tax = new \PayPal\Api\Tax();
        $tax->setPercent(1)->setName("Local Tax on Sutures");
        $items[0]->setTax($tax);
        // Second Item
        $items[1] = new InvoiceItem();
        // Lets add some discount to this item.
        $item1discount = new Cost();
        $item1discount->setPercent("3");
        $items[1]
            ->setName("Injection")
            ->setQuantity(5)
            ->setDiscount($item1discount)
            ->setUnitPrice(new Currency());
        $items[1]->getUnitPrice()
            ->setCurrency("USD")
            ->setValue(5);
        // #### Tax Item
        // You could provide Tax information to each item.
        $tax2 = new \PayPal\Api\Tax();
        $tax2->setPercent(3)->setName("Local Tax on Injection");
        $items[1]->setTax($tax2);
        $invoice->setItems($items);
        // #### Final Discount
        // You can add final discount to the invoice as shown below. You could either use "percent" or "value" when providing the discount
        $cost = new Cost();
        $cost->setPercent("2");
        $invoice->setDiscount($cost);
        $invoice->getPaymentTerm()
            ->setTermType("NET_45");
        // ### Shipping Information
        $invoice->getShippingInfo()
            ->setFirstName("Sally")
            ->setLastName("Patient")
            ->setBusinessName("Not applicable")
            ->setPhone(new Phone())
            ->setAddress(new InvoiceAddress());
        $invoice->getShippingInfo()->getPhone()
            ->setCountryCode("001")
            ->setNationalNumber("5039871234");
        $invoice->getShippingInfo()->getAddress()
            ->setLine1("1234 Main St.")
            ->setCity("Portland")
            ->setState("OR")
            ->setPostalCode("97217")
            ->setCountryCode("US");
        // ### Logo
        // You can set the logo in the invoice by providing the external URL pointing to a logo
        $invoice->setLogoUrl('https://www.paypalobjects.com/webstatic/i/logo/rebrand/ppcom.svg');
        // For Sample Purposes Only.
        $request = clone $invoice;
        try {
            // ### Create Invoice
            // Create an invoice by calling the invoice->create() method
            // with a valid ApiContext (See bootstrap.php for more on `ApiContext`)
            $invoice->create($this->_api_context);
        } catch (Exception $ex) {
            // NOTE: PLEASE DO NOT USE RESULTPRINTER CLASS IN YOUR ORIGINAL CODE. FOR SAMPLE ONLY
            ResultPrinter::printError("Create Invoice", "Invoice", null, $request, $ex);
            exit(1);
        }
        // NOTE: PLEASE DO NOT USE RESULTPRINTER CLASS IN YOUR ORIGINAL CODE. FOR SAMPLE ONLY
        ResultPrinter::printResult("Create Invoice", "Invoice", $invoice->getId(), $request, $invoice);
        return $invoice;

    }
}
 
Alguém pode ajudar-me?
 
Cumprimentos.
Login to Me Too
1 SOLUÇÃO ACEITA

Soluções aceitas
Solved

PSS_Lídia
Funcionário do PayPal
Funcionário do PayPal

Olá @CassioDevito

 

Boa noite!

 

Pelas informações que nos passou, a conta a ser usada, não possui tal habilitação para o recurso utilizado.

O que se faz necessário uma análise na conta PayPal que vai receber os pagamentos por essa integração.

 

Não consegui identificar se a conta que vai receber os pagamentos é ou não do Brasil, então aqui vai algumas dicas:

 

Se a conta PayPal for brasileira, não recomendamos a utilização do SDK, pois se trata de uma integração usada fora do Brasil.

Aqui neste link, tem as formas que você pode integrar usando uma conta PayPal brasileira.

E aqui, você pode acessar as documentações que usamos no Brasil.

 

Agora se a conta PayPal não for brasileira, indico que entre em contato com o Paypal do País da conta, para que possa validar a utilização do recurso.

Aqui, você pode solicitar um suporte do PayPal americano, para que possam lhe instruir certinho.

 

Espero ter ajudado!

Piscadela do Smiley

 

Exibir solução no post original

Login to Me Too
2 RESPOSTAS 2
Solved

PSS_Lídia
Funcionário do PayPal
Funcionário do PayPal

Olá @CassioDevito

 

Boa noite!

 

Pelas informações que nos passou, a conta a ser usada, não possui tal habilitação para o recurso utilizado.

O que se faz necessário uma análise na conta PayPal que vai receber os pagamentos por essa integração.

 

Não consegui identificar se a conta que vai receber os pagamentos é ou não do Brasil, então aqui vai algumas dicas:

 

Se a conta PayPal for brasileira, não recomendamos a utilização do SDK, pois se trata de uma integração usada fora do Brasil.

Aqui neste link, tem as formas que você pode integrar usando uma conta PayPal brasileira.

E aqui, você pode acessar as documentações que usamos no Brasil.

 

Agora se a conta PayPal não for brasileira, indico que entre em contato com o Paypal do País da conta, para que possa validar a utilização do recurso.

Aqui, você pode solicitar um suporte do PayPal americano, para que possam lhe instruir certinho.

 

Espero ter ajudado!

Piscadela do Smiley

 

Login to Me Too

rmatipico
Colaborador
Colaborador
In sandbox, I am trying to confirm a payment returned via Javascript CHECKOUT SDK and I am getting this error:
 
HTTP/1.1 401 Unauthorized
Cache-Control: max-age=0, no-cache, no-store, must-revalidate
Content-Length: 244
Content-Type: application/json
Date: Tue, 25 Feb 2020 21:12:21 GMT
Paypal-Debug-Id: 63c8a5f2a7393
 
{"name":"AUTHENTICATION_FAILURE","message":"Authentication failed due to invalid authentication credentials or a missing Authorization header.","links":[{"href":"https://developer.paypal.com/docs/api/overview/#error","rel":"information_link"}]}
 
Ccording to
https://www.paypal-community.com/t5/Sandbox-Environment/quot-Authorization-failed-due-to-insufficien...
I should just create a new APP. I did it but the error persists.
Nobody at Paypal support from Brazil seems to know what I am talking about.
Any ideas?
Thanks.
Login to Me Too

Haven't Found your Answer?

It happens. Hit the "Login to Ask the community" button to create a question for the PayPal community.