{"id":27965,"date":"2021-05-29T13:17:00","date_gmt":"2021-05-29T10:17:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=27965"},"modified":"2021-10-18T04:06:27","modified_gmt":"2021-10-18T01:06:27","slug":"integracao-do-paypal-payments-pro-no-laravel","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/pt-pt\/integracao-do-paypal-payments-pro-no-laravel\/","title":{"rendered":"Integra\u00e7\u00e3o do PayPal Payments Pro no Laravel"},"content":{"rendered":"<p>Eu escrevi um artigo sobre <a href=\"https:\/\/themewp.inform.click\/pt-pt\/aceite-pagamentos-com-cartao-de-credito-usando-paypal-payments-pro-em-php\/\" title=\"aceitar pagamentos com cart\u00e3o de cr\u00e9dito usando o PayPal Payments Pro em PHP\" >aceitar pagamentos com cart\u00e3o de cr\u00e9dito usando o PayPal Payments Pro em PHP<\/a>. Um dos leitores me perguntou como fazer a mesma integra\u00e7\u00e3o no Laravel. Embora o Laravel seja escrito em PHP ao escrever o c\u00f3digo para o Laravel, voc\u00ea deve seguir seus padr\u00f5es. Iniciantes geralmente acham dif\u00edcil converter c\u00f3digo PHP simples no Laravel.<\/p>\n<p>Neste artigo, estudamos como integrar o PayPal Payments Pro e aceitar pagamentos com cart\u00e3o de cr\u00e9dito no Laravel.<\/p>\n<p>Se voc\u00ea administra uma loja online, site de associa\u00e7\u00e3o ou qualquer outro lugar onde deseja receber pagamentos online, o PayPal \u00e9 a op\u00e7\u00e3o segura. Usando o PayPal Payments Pro, voc\u00ea pode aceitar pagamentos online com cart\u00e3o de cr\u00e9dito que v\u00e3o diretamente para sua conta do PayPal.<\/p>\n<p>No momento de escrever este artigo, o PayPal Payments Pro est\u00e1 dispon\u00edvel para comerciantes nos EUA, Reino Unido e Canad\u00e1.<\/p>\n<h3>Come\u00e7ando<\/h3>\n<p>Para come\u00e7ar, voc\u00ea precisa obter as credenciais da API do PayPal. \u00c9 sempre uma boa pr\u00e1tica testar os pagamentos no modo sandbox. Se tudo funcionar conforme o esperado, efetue o pagamento.<\/p>\n<p>Obtenha suas credenciais de sandbox fazendo login na conta de <a href=\"https:\/\/developer.paypal.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">desenvolvedor<\/a> do <a href=\"https:\/\/developer.paypal.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">PayPal<\/a>. Ap\u00f3s o login, v\u00e1 para <strong>SANDBOX-&gt; Contas<\/strong> no menu \u00e0 esquerda e crie uma conta empresarial.<\/p>\n<p>Assim que tiver a conta comercial, atualize seu tipo de conta para &#8216;Business-Pro&#8217;. A integra\u00e7\u00e3o do PayPal Payments Pro requer um tipo de conta &#8216;Business-Pro&#8217;. Clique no link &#8216;Atualizar para Pro&#8217; e o PayPal converter\u00e1 seu tipo de conta para &#8216;Business-Pro&#8217;.<\/p>\n<p><a href=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20427-6081efe66b74b.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20427-6081efe66b74b.png\" alt=\"Integra\u00e7\u00e3o do PayPal Payments Pro no Laravel\" ><\/a><\/p>\n<p>Em seguida, clique na guia &#8216;API Credentials&#8217; e copie suas credenciais.<\/p>\n<p><a href=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20427-6081efe6b9358.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20427-6081efe6b9358.png\" alt=\"Integra\u00e7\u00e3o do PayPal Payments Pro no Laravel\" ><\/a><\/p>\n<p>Abra o <code>.env<\/code>do seu projeto Laravel e adicione as credenciais copiadas nele.<\/p>\n<pre><code>PAYPAL_API_USERNAME=\nPAYPAL_API_PASSWORD=\nPAYPAL_API_SIGNATURE=<\/code><\/pre>\n<p>Adicione a rota para o controlador no <code>web.php<\/code>arquivo. No meu caso, meu percurso \u00e9 o seguinte.<\/p>\n<pre><code>Route::resource('payment', 'PaymentController');<\/code><\/pre>\n<p>Vou usar a biblioteca <a href=\"https:\/\/omnipay.thephpleague.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Omnipay<\/a>, que oferece uma maneira f\u00e1cil de integrar gateways de pagamento. Execute o comando abaixo que instala a biblioteca Omnipay.<\/p>\n<pre><code>composer require league\/omnipay:^3 omnipay\/paypal<\/code><\/pre>\n<h3>Crie um formul\u00e1rio de pagamento<\/h3>\n<p>Ao aceitar um pagamento com cart\u00e3o de cr\u00e9dito, voc\u00ea deve fornecer aos usu\u00e1rios um formul\u00e1rio onde eles podem inserir os detalhes do cart\u00e3o. Vamos projetar o formul\u00e1rio de pagamento usando este <a href=\"https:\/\/codepen.io\/hswd\/pen\/JYvgBW\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">exemplo de c\u00f3digo<\/a>.<\/p>\n<p>Crie uma pasta &#8216;css&#8217; e &#8216;js&#8217; dentro do diret\u00f3rio &#8216;public&#8217; do projeto Laravel. Copie o c\u00f3digo CSS do codepen e adicione-o <code>css\/card.css<\/code>.<\/p>\n<pre><code>@import url(https:\/\/fonts.googleapis.com\/css?family=Roboto:400,900,700,500);\n\u00a0\nbody {\n\u00a0\u00a0padding: 60px 0;\n\u00a0\u00a0background-color: rgba(178,209,229,0.7);\n\u00a0\u00a0margin: 0 auto;\n\u00a0\u00a0width: 600px;\n}\n.body-text {\n\u00a0\u00a0padding: 0 20px 30px 20px;\n\u00a0\u00a0font-family: \"Roboto\";\n\u00a0\u00a0font-size: 1em;\n\u00a0\u00a0color: #333;\n\u00a0\u00a0text-align: center;\n\u00a0\u00a0line-height: 1.2em;\n}\n.form-container {\n\u00a0\u00a0flex-direction: column;\n\u00a0\u00a0justify-content: center;\n\u00a0\u00a0align-items: center;\n}\n.card-wrapper {\n\u00a0\u00a0background-color: #6FB7E9;\n\u00a0\u00a0width: 100%;\n\u00a0\u00a0display: flex;\n\u00a0\n}\n.personal-information {\n\u00a0\u00a0background-color: #3C8DC5;\n\u00a0\u00a0color: #fff;\n\u00a0\u00a0padding: 1px 0;\n\u00a0\u00a0text-align: center;\n}\nh1 {\n\u00a0\u00a0font-size: 1.3em;\n\u00a0\u00a0font-family: \"Roboto\"\n}\ninput {\n\u00a0\u00a0margin: 1px 0;\n\u00a0\u00a0padding-left: 3%;\n\u00a0\u00a0font-size: 14px;\n}\ninput[type=\"text\"]{\n\u00a0\u00a0display: block;\n\u00a0\u00a0height: 50px;\n\u00a0\u00a0width: 97%;\n\u00a0\u00a0border: none;\n}\ninput[type=\"email\"]{\n\u00a0\u00a0display: block;\n\u00a0\u00a0height: 50px;\n\u00a0\u00a0width: 97%;\n\u00a0\u00a0border: none;\n}\ninput[type=\"submit\"]{\n\u00a0\u00a0display: block;\n\u00a0\u00a0height: 60px;\n\u00a0\u00a0width: 100%;\n\u00a0\u00a0border: none;\n\u00a0\u00a0background-color: #3C8DC5;\n\u00a0\u00a0color: #fff;\n\u00a0\u00a0margin-top: 2px;\n\u00a0\u00a0curson: pointer;\n\u00a0\u00a0font-size: 0.9em;\n\u00a0\u00a0text-transform: uppercase;\n\u00a0\u00a0font-weight: bold;\n\u00a0\u00a0cursor: pointer;\n}\ninput[type=\"submit\"]:hover{\n\u00a0\u00a0background-color: #6FB7E9;\n\u00a0\u00a0transition: 0.3s ease;\n}\n#column-left {\n\u00a0\u00a0width: 46.8%;\n\u00a0\u00a0float: left;\n\u00a0\u00a0margin-bottom: 2px;\n}\n#column-right {\n\u00a0\u00a0width: 46.8%;\n\u00a0\u00a0float: right;\n}\n\u00a0\n@media only screen and (max-width: 480px){\n\u00a0\u00a0body {\n\u00a0\u00a0\u00a0\u00a0width: 100%;\n\u00a0\u00a0\u00a0\u00a0margin: 0 auto;\n\u00a0\u00a0}\n\u00a0\u00a0.form-container {\n\u00a0\u00a0\u00a0\u00a0margin: 0 2%;\n\u00a0\u00a0}\n\u00a0\u00a0input {\n\u00a0\u00a0\u00a0\u00a0font-size: 1em;\n\u00a0\u00a0}\n\u00a0\u00a0#input-button {\n\u00a0\u00a0\u00a0\u00a0width: 100%;\n\u00a0\u00a0}\n\u00a0\u00a0#input-field {\n\u00a0\u00a0\u00a0\u00a0width: 96.5%;\n\u00a0\u00a0}\n\u00a0\u00a0h1 {\n\u00a0\u00a0\u00a0\u00a0font-size: 1.2em;\n\u00a0\u00a0}\n\u00a0\u00a0input {\n\u00a0\u00a0\u00a0\u00a0margin: 2px 0;\n\u00a0\u00a0}\n\u00a0\u00a0input[type=\"submit\"]{\n\u00a0\u00a0\u00a0\u00a0height: 50px;\n\u00a0\u00a0}\n\u00a0\u00a0#column-left {\n\u00a0\u00a0\u00a0\u00a0width: 96.5%;\n\u00a0\u00a0\u00a0\u00a0display: block;\n\u00a0\u00a0\u00a0\u00a0float: none;\n\u00a0\u00a0}\n\u00a0\u00a0#column-right {\n\u00a0\u00a0\u00a0\u00a0width: 96.5%;\n\u00a0\u00a0\u00a0\u00a0display: block;\n\u00a0\u00a0\u00a0\u00a0float: none;\n\u00a0\u00a0}\n}<\/code><\/pre>\n<p>Da mesma forma, adicione o c\u00f3digo JavaScript do codepen ao <code>js\/card.js<\/code>arquivo.<\/p>\n<pre><code>$('form').card({\n\u00a0\u00a0\u00a0\u00a0container: '.card-wrapper',\n\u00a0\u00a0\u00a0\u00a0width: 280,\n\u00a0\n\u00a0\u00a0\u00a0\u00a0formSelectors: {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0nameInput: 'input[name=\"first-name\"], input[name=\"last-name\"]'\n\u00a0\u00a0\u00a0\u00a0}\n});<\/code><\/pre>\n<p>Obtenha uma c\u00f3pia <code>jquery.card.js<\/code>deste <a href=\"https:\/\/github.com\/jessepollak\/card\/blob\/master\/dist\/jquery.card.js\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">reposit\u00f3rio GitHub<\/a>. Armazene este arquivo no diret\u00f3rio &#8216;js&#8217;.<\/p>\n<p>Finalmente, no arquivo blade, adicione o c\u00f3digo abaixo.<\/p>\n<pre><code>&lt;link rel=\"stylesheet\" href=\"{{ asset('css\/card.css') }}\"&gt;\n\u00a0\n&lt;form method=\"POST\" action=\"{{ url('ROUTE_HERE') }}\"&gt;\n\u00a0\u00a0\u00a0\u00a0{{ csrf_field() }}\n\u00a0\u00a0\u00a0\u00a0&lt;div class=\"form-container\"&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;div class=\"personal-information\"&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;h1&gt;Payment Information&lt;\/h1&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;\/div&gt; &lt;!-- end of personal-information --&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;input id=\"column-left\" type=\"text\" name=\"first-name\" placeholder=\"First Name\" required=\"required\" \/&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;input id=\"column-right\" type=\"text\" name=\"last-name\" placeholder=\"Surname\" required=\"required\" \/&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;input id=\"input-field\" type=\"text\" name=\"number\" placeholder=\"Card Number\" required=\"required\" \/&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;input id=\"column-left\" type=\"text\" name=\"expiry\" placeholder=\"MM \/ YY\" required=\"required\" \/&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;input id=\"column-right\" type=\"text\" name=\"cvc\" placeholder=\"CCV\" required=\"required\" \/&gt;\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;div class=\"card-wrapper\"&gt;&lt;\/div&gt;\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;input id=\"input-field\" type=\"text\" name=\"streetaddress\" required=\"required\" autocomplete=\"on\" maxlength=\"45\" placeholder=\"Streed Address\"\/&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;input id=\"column-left\" type=\"text\" name=\"city\" required=\"required\" autocomplete=\"on\" maxlength=\"20\" placeholder=\"City\"\/&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;input id=\"column-right\" type=\"text\" name=\"zipcode\" required=\"required\" autocomplete=\"on\" pattern=\"[0-9]*\" maxlength=\"5\" placeholder=\"ZIP code\"\/&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;input id=\"input-field\" type=\"email\" name=\"email\" required=\"required\" autocomplete=\"on\" maxlength=\"40\" placeholder=\"Email\"\/&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;input id=\"input-field\" type=\"text\" name=\"amount\" required=\"required\" autocomplete=\"on\" maxlength=\"40\" placeholder=\"Amount\"\/&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;input id=\"input-button\" name=\"submit\" type=\"submit\" value=\"Submit\"\/&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;\/div&gt;\n&lt;\/form&gt;\n&lt;script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/jquery\/3.4.1\/jquery.min.js\"&gt;&lt;\/script&gt;\n&lt;script src=\"{{ asset('js\/jquery.card.js') }}\"&gt;&lt;\/script&gt;\n&lt;script src=\"{{ asset('js\/card.js') }}\"&gt;&lt;\/script&gt;<\/code><\/pre>\n<p>No c\u00f3digo acima, inclu\u00ed CSS, JS do respectivo diret\u00f3rio. Voc\u00ea deve fornecer o URL de sua rota para a a\u00e7\u00e3o do formul\u00e1rio.<\/p>\n<h3>Integra\u00e7\u00e3o do PayPal Payments Pro no Laravel<\/h3>\n<p>Conclu\u00edmos a configura\u00e7\u00e3o necess\u00e1ria para aceitar pagamentos com cart\u00e3o de cr\u00e9dito. Agora, no controlador, temos que escrever o c\u00f3digo conforme as instru\u00e7\u00f5es do Omnipay. Omnipay facilita a vida do desenvolvedor. Temos que apenas seguir suas instru\u00e7\u00f5es e eles fazem todo o trabalho \u00e1rduo de capturar o pagamento e retornar uma resposta final.<\/p>\n<p><strong>PaymentController.php<\/strong><\/p>\n<pre><code>&lt;?php\n\u00a0\nnamespace AppHttpControllers;\n\u00a0\nuse IlluminateHttpRequest;\nuse OmnipayOmnipay;\n\u00a0\nclass PaymentController extends Controller\n{\n\u00a0\n\u00a0\u00a0\u00a0\u00a0public $gateway;\n\u00a0\n\u00a0\u00a0\u00a0\u00a0public function __construct()\n\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$this-&gt;gateway = Omnipay::create('PayPal_Pro');\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$this-&gt;gateway-&gt;setUsername(env('PAYPAL_API_USERNAME'));\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$this-&gt;gateway-&gt;setPassword(env('PAYPAL_API_PASSWORD'));\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$this-&gt;gateway-&gt;setSignature(env('PAYPAL_API_SIGNATURE'));\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$this-&gt;gateway-&gt;setTestMode(true); \/\/ here 'true' is for sandbox. Pass 'false' when go live\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\n\u00a0\u00a0\u00a0\u00a0public function index()\n\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return view('payment');\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\n\u00a0\u00a0\u00a0\u00a0public function store(Request $request)\n\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$arr_expiry = explode(\"\/\", $request-&gt;input('expiry'));\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$formData = array(\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'firstName' =&gt; $request-&gt;input('first-name'),\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'lastName' =&gt; $request-&gt;input('last-name'),\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'number' =&gt; $request-&gt;input('number'),\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'expiryMonth' =&gt; trim($arr_expiry[0]),\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'expiryYear' =&gt; trim($arr_expiry[1]),\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'cvv' =&gt; $request-&gt;input('cvc')\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0try {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ Send purchase request\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$response = $this-&gt;gateway-&gt;purchase([\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'amount' =&gt; $request-&gt;input('amount'),\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'currency' =&gt; 'USD',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'card' =&gt; $formData\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0])-&gt;send();\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ Process response\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if ($response-&gt;isSuccessful()) {\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ Payment was successful\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$arr_body = $response-&gt;getData();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$amount = $arr_body['AMT'];\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$currency = $arr_body['CURRENCYCODE'];\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$transaction_id = $arr_body['TRANSACTIONID'];\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0echo \"Payment of $amount $currency is successful. Your Transaction ID is: $transaction_id\";\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0} else {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ Payment failed\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0echo \"Payment failed. \". $response-&gt;getMessage();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0} catch(Exception $e) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0echo $e-&gt;getMessage();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0}\n}<\/code><\/pre>\n<p>Aqui no construtor, constru\u00edmos um objeto e passamos as credenciais para ele. Quando um usu\u00e1rio envia um formul\u00e1rio, o controle vai para o m\u00e9todo &#8216;store&#8217;. Nesse m\u00e9todo, o Omnipay chama a API do PayPal em segundo plano, processa o pagamento e d\u00e1 uma resposta final.<\/p>\n<p>V\u00e1 em frente e experimente. Como estamos testando o pagamento no modo sandbox, voc\u00ea precisar\u00e1 de cart\u00f5es de teste. <a href=\"https:\/\/developer.paypal.com\/docs\/classic\/payflow\/payflow-pro\/payflow-pro-testing\/#credit-card-numbers-for-testing\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Clique aqui<\/a> para obter os detalhes do cart\u00e3o de cr\u00e9dito fict\u00edcio. Depois de enviar um formul\u00e1rio, voc\u00ea ver\u00e1 a mensagem de sucesso junto com o ID da transa\u00e7\u00e3o.<\/p>\n<h3>Aceite o pagamento em tempo real com o PayPal Payments Pro<\/h3>\n<p>Assim que seus pagamentos estiverem funcionando com sucesso no modo sandbox, voc\u00ea pode ir para o modo ao vivo. Para isso, voc\u00ea precisa substituir as credenciais do sandbox pelos detalhes ativos no <code>.env<\/code>arquivo. Al\u00e9m disso, passe um valor &#8216;falso&#8217; para o m\u00e9todo setTestMode() no construtor. Isso desativar\u00e1 o modo sandbox e ativar\u00e1 o modo ao vivo.<\/p>\n<p>\u00c9 uma quest\u00e3o de aceitar pagamentos com cart\u00e3o de cr\u00e9dito com o PayPal Payments Pro no Laravel. Eu gostaria de ouvir seus pensamentos e sugest\u00f5es na se\u00e7\u00e3o de coment\u00e1rios abaixo.<\/p>\n<h4>Artigos relacionados<\/h4>\n<ul>\n<li><a href=\"https:\/\/themewp.inform.click\/pt-pt\/authorize-net-payment-gateway-integration-no-laravel\/\" title=\"Authorize.Net Payment Gateway Integration no Laravel\">Authorize.Net Payment Gateway Integration no Laravel<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/pt-pt\/integracao-do-stripe-payment-gateway-no-laravel\/\" title=\"Integra\u00e7\u00e3o do Stripe Payment Gateway no Laravel\">Integra\u00e7\u00e3o do Stripe Payment Gateway no Laravel<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/pt-pt\/integracao-de-gateway-de-pagamento-paypal-no-laravel\/\" title=\"Integra\u00e7\u00e3o de gateway de pagamento PayPal no Laravel\">Integra\u00e7\u00e3o de gateway de pagamento PayPal no Laravel<\/a><\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte de grava\u00e7\u00e3o:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/artisansweb.net\" class=\"external external_icon\">artisansweb.net<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>O PayPal Payments Pro nos permite aceitar pagamentos online com cart\u00e3o de cr\u00e9dito. Neste artigo, mostrarei como integrar o PayPal Payments Pro em Lara<\/p>\n","protected":false},"author":1,"featured_media":21668,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[502],"tags":[848],"class_list":["post-27965","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-laravel","tag-affiai-pt-pt"],"_links":{"self":[{"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/posts\/27965","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/comments?post=27965"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/posts\/27965\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/media\/21668"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/media?parent=27965"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/categories?post=27965"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/tags?post=27965"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}