{"id":28849,"date":"2021-06-21T10:34:00","date_gmt":"2021-06-21T07:34:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=28849"},"modified":"2021-10-18T03:58:03","modified_gmt":"2021-10-18T00:58:03","slug":"integracao-do-gateway-de-pagamento-do-paypal-em-php-usando-a-api-rest-do-paypal","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/pt-pt\/integracao-do-gateway-de-pagamento-do-paypal-em-php-usando-a-api-rest-do-paypal\/","title":{"rendered":"Integra\u00e7\u00e3o do gateway de pagamento do PayPal em PHP usando a API REST do PayPal"},"content":{"rendered":"<p>O PayPal \u00e9 um dos gateways de pagamento mais confi\u00e1veis \u200b\u200bda Internet. \u00c9 amplamente utilizado em sites para aceitar pagamentos online. No entanto, a documenta\u00e7\u00e3o da API do PayPal n\u00e3o \u00e9 f\u00e1cil de entender. Para um desenvolvedor que vai integrar o gateway de pagamento do PayPal pela primeira vez, levar\u00e1 muitas horas para ter sucesso. Passei uma quantidade absurda de horas lendo a documenta\u00e7\u00e3o da API do PayPal. E depois perceba que n\u00e3o h\u00e1 necessidade de ler a documenta\u00e7\u00e3o do Paypal em profundidade para integr\u00e1-lo.<\/p>\n<p>Neste artigo, estudamos como integrar um gateway de pagamento do PayPal usando a API REST do PayPal. Usaremos a biblioteca GitHub fornecida pelo Omnipay. Omnipay fornece uma maneira limpa e f\u00e1cil de integrar diferentes gateway de pagamento em seu aplicativo da web. Sua estrutura de c\u00f3digo tamb\u00e9m \u00e9 limpa e eficiente. Os desenvolvedores adorariam.<\/p>\n<h3>Obtenha o ID e o segredo do cliente do PayPal<\/h3>\n<p>Para integra\u00e7\u00e3o do PayPal no site, primeiro voc\u00ea precisa criar um aplicativo REST API em uma conta de desenvolvedor do PayPal. Depois de criar o aplicativo, voc\u00ea obter\u00e1 o ID do cliente e o segredo do cliente que ser\u00e3o exigidos nas pr\u00f3ximas etapas.<\/p>\n<p>Para criar o aplicativo REST API, acesse sua <a href=\"https:\/\/developer.paypal.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">conta de desenvolvedor do PayPal<\/a> e fa\u00e7a login no painel.<\/p>\n<p>No painel do desenvolvedor, clique no menu &#8216;Meus aplicativos e credenciais&#8217;. Clique no bot\u00e3o &#8216;Criar aplicativo&#8217; na se\u00e7\u00e3o de aplicativos da API REST.<\/p>\n<p>Na pr\u00f3xima etapa, preencha o nome do aplicativo e voc\u00ea obter\u00e1 seu ID e segredo do cliente. No meu caso, na captura de tela abaixo, posso ver as credenciais do sandbox. No seu caso, podem ser credenciais ativas. Ou voc\u00ea tamb\u00e9m pode tentar com suas credenciais de sandbox.<\/p>\n<p><a href=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20133-6081c0b5d3a93.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-20133-6081c0b5d3a93.png\" alt=\"Integra\u00e7\u00e3o do gateway de pagamento do PayPal em PHP usando a API REST do PayPal\" ><\/a><\/p>\n<h3>Instala\u00e7\u00e3o da biblioteca e configura\u00e7\u00e3o b\u00e1sica<\/h3>\n<p>Como eu disse, usaremos o <a href=\"https:\/\/github.com\/thephpleague\/omnipay-paypal\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Omnipay<\/a> para integra\u00e7\u00e3o da API REST do PayPal. Precisamos primeiro instalar suas bibliotecas usando o Composer. Execute o comando abaixo para instalar as bibliotecas.<\/p>\n<pre><code>composer require league\/omnipay omnipay\/paypal<\/code><\/pre>\n<p>Depois de instalar a biblioteca, crie um arquivo de configura\u00e7\u00e3o onde armazenamos nossas credenciais de API, gravamos a conex\u00e3o do banco de dados e inicializamos o gateway.<\/p>\n<p><strong>config.php<\/strong><\/p>\n<pre><code>&lt;?php\nrequire_once \"vendor\/autoload.php\";\n\u00a0\nuse OmnipayOmnipay;\n\u00a0\ndefine('CLIENT_ID', 'PAYPAL_CLIENT_ID_HERE');\ndefine('CLIENT_SECRET', 'PAYPAL_CLIENT_SECRET_HERE');\n\u00a0\ndefine('PAYPAL_RETURN_URL', 'YOUR_SITE_URL\/success.php');\ndefine('PAYPAL_CANCEL_URL', 'YOUR_SITE_URL\/cancel.php');\ndefine('PAYPAL_CURRENCY', 'USD'); \/\/ set your currency here\n\u00a0\n\/\/ Connect with the database\n$db = new mysqli('localhost', 'MYSQL_DB_USERNAME', 'MYSQL_DB_PASSWORD', 'MYSQL_DB_NAME'); \n\u00a0\nif ($db-&gt;connect_errno) {\n\u00a0\u00a0\u00a0\u00a0die(\"Connect failed: \". $db-&gt;connect_error);\n}\n\u00a0\n$gateway = Omnipay::create('PayPal_Rest');\n$gateway-&gt;setClientId(CLIENT_ID);\n$gateway-&gt;setSecret(CLIENT_SECRET);\n$gateway-&gt;setTestMode(true); \/\/set it to 'false' when go live<\/code><\/pre>\n<p>Aqui, passei o par\u00e2metro &#8216;Paypal_Rest&#8217; para o m\u00e9todo de cria\u00e7\u00e3o do Omnipay. O Omnipay em segundo plano chama a API REST do PayPal enquanto faz o pagamento por meio dele.<\/p>\n<p>Em seguida, crie um formul\u00e1rio simples onde um usu\u00e1rio pode inserir o valor. Para fins de demonstra\u00e7\u00e3o, mantenho apenas um campo no formul\u00e1rio. Voc\u00ea pode estender o formul\u00e1rio de acordo com sua necessidade.<\/p>\n<p><strong>form.html<\/strong><\/p>\n<pre><code>&lt;form action=\"charge.php\" method=\"post\"&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;input type=\"text\" name=\"amount\" value=\"20.00\" \/&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;input type=\"submit\" name=\"submit\" value=\"Pay Now\"&gt;\n&lt;\/form&gt;<\/code><\/pre>\n<p>Quando o pagamento for conclu\u00eddo, devemos salvar os detalhes da transa\u00e7\u00e3o na tabela do banco de dados. Crie uma tabela de banco de dados executando a consulta SQL abaixo.<\/p>\n<pre><code>CREATE TABLE `payments` (\u00a0`id` int(11) NOT NULL AUTO_INCREMENT,\n\u00a0`payment_id` varchar(255) NOT NULL,\n\u00a0`payer_id` varchar(255) NOT NULL,\n\u00a0`payer_email` varchar(255) NOT NULL,\n\u00a0`amount` float(10,2) NOT NULL,\n\u00a0`currency` varchar(255) NOT NULL,\n\u00a0`payment_status` varchar(255) NOT NULL,\n\u00a0PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=latin1;<\/code><\/pre>\n<p>Esta tabela n\u00e3o cont\u00e9m nenhuma chave estrangeira, pois \u00e9 apenas para fins de demonstra\u00e7\u00e3o. O usu\u00e1rio pode adicionar uma coluna user_id nesta tabela para fazer refer\u00eancia ao pagamento com o usu\u00e1rio.<\/p>\n<h3>Integra\u00e7\u00e3o do gateway de pagamento do PayPal em PHP usando a API REST do PayPal<\/h3>\n<p>Ao usar a API REST do PayPal, o usu\u00e1rio redirecionar\u00e1 para o PayPal para concluir o pagamento. Depois de fazer o pagamento, o usu\u00e1rio redirecionar\u00e1 de volta ao nosso aplicativo com base no status de sucesso ou falha. Definimos esses URLs no <code>config.php<\/code>arquivo acima.<\/p>\n<p>Assim que o usu\u00e1rio redirecionar de volta ao nosso aplicativo com resposta de sucesso, precisamos executar o pagamento em nosso arquivo PHP, que \u00e9 o <code>success.php<\/code>nosso caso. Tamb\u00e9m armazenamos as informa\u00e7\u00f5es de pagamento ap\u00f3s a execu\u00e7\u00e3o do pagamento usando a API REST do PayPal. Portanto, nosso c\u00f3digo ser\u00e1 o seguinte.<\/p>\n<p><strong>charge.php<\/strong><\/p>\n<pre><code>&lt;?php\nrequire_once 'config.php';\n\u00a0\nif (isset($_POST['submit'])) {\n\u00a0\n\u00a0\u00a0\u00a0\u00a0try {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$response = $gateway-&gt;purchase(array(\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'amount' =&gt; $_POST['amount'],\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'currency' =&gt; PAYPAL_CURRENCY,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'returnUrl' =&gt; PAYPAL_RETURN_URL,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'cancelUrl' =&gt; PAYPAL_CANCEL_URL,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0))-&gt;send();\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if ($response-&gt;isRedirect()) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$response-&gt;redirect(); \/\/ this will automatically forward the customer\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0} else {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ not successful\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0echo $response-&gt;getMessage();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0} catch(Exception $e) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0echo $e-&gt;getMessage();\n\u00a0\u00a0\u00a0\u00a0}\n}<\/code><\/pre>\n<p><strong>success.php<\/strong><\/p>\n<pre><code>&lt;?php\nrequire_once 'config.php';\n\u00a0\n\/\/ Once the transaction has been approved, we need to complete it.\nif (array_key_exists('paymentId', $_GET) &amp;&amp; array_key_exists('PayerID', $_GET)) {\n\u00a0\u00a0\u00a0\u00a0$transaction = $gateway-&gt;completePurchase(array(\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'payer_id'\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 =&gt; $_GET['PayerID'],\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'transactionReference' =&gt; $_GET['paymentId'],\n\u00a0\u00a0\u00a0\u00a0));\n\u00a0\u00a0\u00a0\u00a0$response = $transaction-&gt;send();\n\u00a0\n\u00a0\u00a0\u00a0\u00a0if ($response-&gt;isSuccessful()) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ The customer has successfully paid.\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$arr_body = $response-&gt;getData();\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$payment_id = $arr_body['id'];\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$payer_id = $arr_body['payer']['payer_info']['payer_id'];\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$payer_email = $arr_body['payer']['payer_info']['email'];\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$amount = $arr_body['transactions'][0]['amount']['total'];\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$currency = PAYPAL_CURRENCY;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$payment_status = $arr_body['state'];\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ Insert transaction data into the database\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$isPaymentExist = $db-&gt;query(\"SELECT * FROM payments WHERE payment_id = '\".$payment_id.\"'\");\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if($isPaymentExist-&gt;num_rows == 0) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$insert = $db-&gt;query(\"INSERT INTO payments(payment_id, payer_id, payer_email, amount, currency, payment_status) VALUES('\". $payment_id .\"', '\". $payer_id .\"', '\". $payer_email .\"', '\". $amount .\"', '\". $currency .\"', '\". $payment_status .\"')\");\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0echo \"Payment is successful. Your transaction id is: \". $payment_id;\n\u00a0\u00a0\u00a0\u00a0} else {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0echo $response-&gt;getMessage();\n\u00a0\u00a0\u00a0\u00a0}\n} else {\n\u00a0\u00a0\u00a0\u00a0echo 'Transaction is declined';\n}<\/code><\/pre>\n<p><strong>cancel.php<\/strong><\/p>\n<pre><code>&lt;h3&gt;User is canceled the payment.&lt;\/h3&gt;<\/code><\/pre>\n<h3>Envie informa\u00e7\u00f5es do produto para o PayPal<\/h3>\n<p>No c\u00f3digo acima, estamos enviando o valor a pagar no PayPal. Voc\u00ea tamb\u00e9m pode enviar informa\u00e7\u00f5es sobre o produto. Seus clientes podem ver os detalhes desses produtos na p\u00e1gina de pagamento antes de efetuar um pagamento.<\/p>\n<p>Para enviar as informa\u00e7\u00f5es do produto, voc\u00ea precisa passar a matriz &#8216;itens&#8217; para o <code>purchase<\/code>\u00a0m\u00e9todo a seguir.<\/p>\n<pre><code>$response = $gateway-&gt;purchase(array(\n\u00a0\u00a0\u00a0\u00a0'amount' =&gt; $_POST['amount'],\n\u00a0\u00a0\u00a0\u00a0'items' =&gt; array(\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0array(\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'name' =&gt; 'Course Subscription',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'price' =&gt; $_POST['amount'],\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'description' =&gt; 'Get access to premium courses.',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'quantity' =&gt; 1\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0),\n\u00a0\u00a0\u00a0\u00a0),\n\u00a0\u00a0\u00a0\u00a0'currency' =&gt; PAYPAL_CURRENCY,\n\u00a0\u00a0\u00a0\u00a0'returnUrl' =&gt; PAYPAL_RETURN_URL,\n\u00a0\u00a0\u00a0\u00a0'cancelUrl' =&gt; PAYPAL_CANCEL_URL,\n))-&gt;send();<\/code><\/pre>\n<p>Aqui, passei os detalhes do produto estaticamente. Voc\u00ea deve torn\u00e1-lo din\u00e2mico dependendo do seu produto.<\/p>\n<p>Espero que voc\u00ea conhe\u00e7a a integra\u00e7\u00e3o do gateway de pagamento do PayPal em PHP. Eu gostaria de ouvir suas opini\u00f5es ou 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\/aceite-pagamentos-com-cartao-de-credito-usando-paypal-payments-pro-em-php\/\" title=\"Aceite pagamentos com cart\u00e3o de cr\u00e9dito usando o PayPal Payments Pro em PHP\">Aceite pagamentos com cart\u00e3o de cr\u00e9dito usando o PayPal Payments Pro em PHP<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/pt-pt\/aceite-pagamentos-com-cartao-de-credito-usando-authorize-net-payment-gateway-em-php\/\" title=\"Aceitar pagamento com cart\u00e3o de cr\u00e9dito usando o gateway de pagamento Authorize.net em PHP\">Aceitar pagamento com cart\u00e3o de cr\u00e9dito usando o gateway de pagamento Authorize.net em PHP<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/pt-pt\/um-guia-para-integracao-do-stripe-em-sites-com-php\/\" title=\"Um guia para integra\u00e7\u00e3o do Stripe em sites com PHP\">Um guia para integra\u00e7\u00e3o do Stripe em sites com PHP<\/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>Neste post, mostramos como integrar o gateway de pagamento do PayPal em PHP usando a API REST do PayPal. Usando o PayPal, voc\u00ea pode aceitar pagamento online de seus clientes<\/p>\n","protected":false},"author":1,"featured_media":20134,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[278],"tags":[848],"class_list":["post-28849","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-php-9","tag-affiai-pt-pt"],"_links":{"self":[{"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/posts\/28849","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=28849"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/posts\/28849\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/media\/20134"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/media?parent=28849"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/categories?post=28849"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/tags?post=28849"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}