{"id":28230,"date":"2021-05-22T17:26:00","date_gmt":"2021-05-22T14:26:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=28230"},"modified":"2021-10-17T16:50:31","modified_gmt":"2021-10-17T13:50:31","slug":"integracion-de-stripe-payment-gateway-en-laravel","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/es\/integracion-de-stripe-payment-gateway-en-laravel\/","title":{"rendered":"Integraci\u00f3n de Stripe Payment Gateway en Laravel"},"content":{"rendered":"<p>Si tiene una tienda en l\u00ednea o alg\u00fan tipo de servicio pago, probablemente deba aceptar pagos con tarjeta de cr\u00e9dito en su solicitud. <a href=\"https:\/\/stripe.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Stripe<\/a> es una de las pasarelas de pago m\u00e1s populares que acepta pagos con tarjeta de cr\u00e9dito o d\u00e9bito en l\u00ednea. Adem\u00e1s, el usuario no necesita salir de su sitio web para realizar el pago con tarjeta. En este art\u00edculo, estudiamos la integraci\u00f3n de la pasarela de pago de Stripe en Laravel.<\/p>\n<p>Para integrar la puerta de enlace Stripe en Laravel, usaremos la biblioteca <a href=\"https:\/\/github.com\/thephpleague\/omnipay\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Omnipay<\/a>, que es popular entre los desarrolladores. Entonces, sin m\u00e1s demora, comencemos con nuestra integraci\u00f3n.<\/p>\n<h3>Obtenga claves de API para la integraci\u00f3n de Stripe<\/h3>\n<p>Al principio, debe crear una <a href=\"https:\/\/dashboard.stripe.com\/login\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">cuenta de Stripe<\/a> si a\u00fan no tiene una. Para integrar la puerta de enlace Stripe, primero debe obtener su clave secreta y publicable. Obtendr\u00e1 estas claves en la p\u00e1gina <strong>Desarrolladores-&gt; Claves API<\/strong>.<\/p>\n<p>Siempre se recomienda probar las transacciones en l\u00ednea primero con las claves de la zona de pruebas y, si todo funciona bien, opte por las claves activas.<\/p>\n<h3>Configuraci\u00f3n b\u00e1sica en Laravel para la integraci\u00f3n de Stripe<\/h3>\n<p>Antes de comenzar a aceptar pagos en l\u00ednea con Stripe, debe realizar una configuraci\u00f3n b\u00e1sica. Necesitaremos claves de banda durante la integraci\u00f3n de la API, as\u00ed que agregue estas claves en el <code>.env<\/code>archivo.<\/p>\n<pre><code>STRIPE_PUBLISHABLE_KEY=PASTE_PUBLISHABLE_KEY\nSTRIPE_SECRET_KEY=PASTE_SECRET_KEY\nSTRIPE_CURRENCY=USD<\/code><\/pre>\n<p>Siempre que agreguemos nuevas constantes en el archivo de entorno, debemos ejecutar el siguiente comando para borrar la cach\u00e9 de configuraci\u00f3n.<\/p>\n<pre><code>php artisan config:cache<\/code><\/pre>\n<p>Cuando se trata de pagos en l\u00ednea, se deben almacenar los detalles de la transacci\u00f3n en la base de datos. Para ello, cree una migraci\u00f3n con el comando:<\/p>\n<pre><code>php artisan make:migration create_payments_table<\/code><\/pre>\n<p>En el archivo de migraci\u00f3n, edite el <code>up<\/code>m\u00e9todo de la siguiente manera:<\/p>\n<pre><code>public function up()\n{\n\u00a0\u00a0\u00a0\u00a0Schema::create('payments', function (Blueprint $table) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$table-&gt;bigIncrements('id');\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$table-&gt;string('payment_id');\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$table-&gt;string('payer_email');\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$table-&gt;float('amount', 10, 2);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$table-&gt;string('currency');\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$table-&gt;string('payment_status');\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$table-&gt;timestamps();\n\u00a0\u00a0\u00a0\u00a0});\n}<\/code><\/pre>\n<p>A continuaci\u00f3n, ejecute el siguiente comando para ejecutar la migraci\u00f3n.<\/p>\n<pre><code>php artisan migrate<\/code><\/pre>\n<p>Necesitaremos un formulario HTML donde el usuario pueda ingresar los detalles de su tarjeta y otra informaci\u00f3n. Cree un <code>payment.blade.php<\/code>archivo y agregue el c\u00f3digo a continuaci\u00f3n.<\/p>\n<pre><code>&lt;link rel=\"stylesheet\" href=\"{{ asset('\/css\/style.css') }}\" \/&gt;\n&lt;script src=\"https:\/\/js.stripe.com\/v3\/\"&gt;&lt;\/script&gt;\n&lt;form action=\"{{ url('charge') }}\" method=\"post\" id=\"payment-form\"&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;div class=\"form-row\"&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;p&gt;&lt;input type=\"text\" name=\"amount\" placeholder=\"Enter Amount\" \/&gt;&lt;\/p&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;p&gt;&lt;input type=\"email\" name=\"email\" placeholder=\"Enter Email\" \/&gt;&lt;\/p&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;label for=\"card-element\"&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Credit or debit card\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;\/label&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;div id=\"card-element\"&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;!-- A Stripe Element will be inserted here. --&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;\/div&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;!-- Used to display form errors. --&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;div id=\"card-errors\" role=\"alert\"&gt;&lt;\/div&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;\/div&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;button&gt;Submit Payment&lt;\/button&gt;\n\u00a0\u00a0\u00a0\u00a0{{ csrf_field() }}\n&lt;\/form&gt;\n&lt;script&gt;\nvar publishable_key = '{{ env('STRIPE_PUBLISHABLE_KEY') }}';\n&lt;\/script&gt;\n&lt;script src=\"{{ asset('\/js\/card.js') }}\"&gt;&lt;\/script&gt;<\/code><\/pre>\n<p>En el archivo blade, incluimos archivos CSS y JS directamente. Puede incluirlo de otra manera seg\u00fan el flujo de su proyecto. Finalmente, defina las rutas de la siguiente manera.<\/p>\n<p><strong>rutas \/ web.php<\/strong><\/p>\n<pre><code>Route::get('\/payment', 'PaymentController@index');\nRoute::post('\/charge', 'PaymentController@charge');<\/code><\/pre>\n<p>Crearemos el controlador <code>PaymentController<\/code>en los siguientes pasos.<\/p>\n<h3>Generar elementos de tarjeta de rayas<\/h3>\n<p>Stripe proporciona sus propios componentes de interfaz de usuario predise\u00f1ados que recopilan datos de tarjetas de clientes de forma segura sin manipular datos confidenciales. Los detalles de la tarjeta se convierten en &#8216;Token&#8217; que luego debe enviarse a sus servidores. Con este &#8216;Token&#8217; puede cobrar a los clientes. Esta es una forma segura ya que su aplicaci\u00f3n no necesita almacenar ni interactuar con los detalles de la tarjeta del cliente.<\/p>\n<p>Es posible que haya notado en el archivo blade que incluimos el <code>card.js<\/code>archivo. Cree este archivo JS en el directorio p\u00fablico y agregue el siguiente c\u00f3digo.<\/p>\n<p><strong>js \/ card.js<\/strong><\/p>\n<pre><code>\/\/ Create a Stripe client.\nvar stripe = Stripe(publishable_key);\n\u00a0\u00a0\n\/\/ Create an instance of Elements.\nvar elements = stripe.elements();\n\u00a0\u00a0\n\/\/ Custom styling can be passed to options when creating an Element.\n\/\/ (Note that this demo uses a wider set of styles than the guide below.)\nvar style = {\n\u00a0\u00a0\u00a0\u00a0base: {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0color: '#32325d',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0fontFamily: '\"Helvetica Neue\", Helvetica, sans-serif',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0fontSmoothing: 'antialiased',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0fontSize: '16px',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'::placeholder': {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0color: '#aab7c4'\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0},\n\u00a0\u00a0\u00a0\u00a0invalid: {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0color: '#fa755a',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0iconColor: '#fa755a'\n\u00a0\u00a0\u00a0\u00a0}\n};\n\u00a0\u00a0\n\/\/ Create an instance of the card Element.\nvar card = elements.create('card', {style: style});\n\u00a0\u00a0\n\/\/ Add an instance of the card Element into the `card-element` &lt;div&gt;.\ncard.mount('#card-element');\n\u00a0\u00a0\n\/\/ Handle real-time validation errors from the card Element.\ncard.addEventListener('change', function(event) {\n\u00a0\u00a0\u00a0\u00a0var displayError = document.getElementById('card-errors');\n\u00a0\u00a0\u00a0\u00a0if (event.error) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0displayError.textContent = event.error.message;\n\u00a0\u00a0\u00a0\u00a0} else {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0displayError.textContent = '';\n\u00a0\u00a0\u00a0\u00a0}\n});\n\u00a0\u00a0\n\/\/ Handle form submission.\nvar form = document.getElementById('payment-form');\nform.addEventListener('submit', function(event) {\n\u00a0\u00a0\u00a0\u00a0event.preventDefault();\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0stripe.createToken(card).then(function(result) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if (result.error) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ Inform the user if there was an error.\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0var errorElement = document.getElementById('card-errors');\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0errorElement.textContent = result.error.message;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0} else {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ Send the token to your server.\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0stripeTokenHandler(result.token);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0});\n});\n\u00a0\u00a0\n\/\/ Submit the form with the token ID.\nfunction stripeTokenHandler(token) {\n\u00a0\u00a0\u00a0\u00a0\/\/ Insert the token ID into the form so it gets submitted to the server\n\u00a0\u00a0\u00a0\u00a0var form = document.getElementById('payment-form');\n\u00a0\u00a0\u00a0\u00a0var hiddenInput = document.createElement('input');\n\u00a0\u00a0\u00a0\u00a0hiddenInput.setAttribute('type', 'hidden');\n\u00a0\u00a0\u00a0\u00a0hiddenInput.setAttribute('name', 'stripeToken');\n\u00a0\u00a0\u00a0\u00a0hiddenInput.setAttribute('value', token.id);\n\u00a0\u00a0\u00a0\u00a0form.appendChild(hiddenInput);\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0\/\/ Submit the form\n\u00a0\u00a0\u00a0\u00a0form.submit();\n}<\/code><\/pre>\n<p>El archivo blade tambi\u00e9n incluye <code>style.css<\/code>archivo. Cree <code>style.css<\/code>dentro de la carpeta p\u00fablica. Este CSS tendr\u00e1 el siguiente c\u00f3digo.<\/p>\n<p><strong>css \/ style.css<\/strong><\/p>\n<pre><code>.StripeElement {\n\u00a0\u00a0\u00a0\u00a0box-sizing: border-box;\n\u00a0\u00a0\u00a0\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0height: 40px;\n\u00a0\u00a0\u00a0\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0padding: 10px 12px;\n\u00a0\u00a0\u00a0\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0border: 1px solid transparent;\n\u00a0\u00a0\u00a0\u00a0border-radius: 4px;\n\u00a0\u00a0\u00a0\u00a0background-color: white;\n\u00a0\u00a0\u00a0\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0box-shadow: 0 1px 3px 0 #e6ebf1;\n\u00a0\u00a0\u00a0\u00a0-webkit-transition: box-shadow 150ms ease;\n\u00a0\u00a0\u00a0\u00a0transition: box-shadow 150ms ease;\n}\n\u00a0\u00a0\n.StripeElement--focus {\n\u00a0\u00a0\u00a0\u00a0box-shadow: 0 1px 3px 0 #cfd7df;\n}\n\u00a0\u00a0\n.StripeElement--invalid {\n\u00a0\u00a0\u00a0\u00a0border-color: #fa755a;\n}\n\u00a0\u00a0\n.StripeElement--webkit-autofill {\n\u00a0\u00a0\u00a0\u00a0background-color: #fefde5 !important;\n}<\/code><\/pre>\n<p>Stripe proporciona diferentes tipos de elementos de interfaz de usuario para crear un formulario de pago con los detalles de la tarjeta de cr\u00e9dito. Lea m\u00e1s sobre esto en su <a href=\"https:\/\/stripe.com\/en-in\/payments\/elements\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">documentaci\u00f3n<\/a>.<\/p>\n<h3>Integraci\u00f3n de Stripe Payment Gateway en Laravel<\/h3>\n<p>Todos configuramos con la configuraci\u00f3n requerida. Ahora podemos seguir adelante e integrar la pasarela de pago de Stripe en Laravel. Ejecute el siguiente comando para instalar la biblioteca Omnipay en su proyecto.<\/p>\n<pre><code>composer require league\/omnipay omnipay\/stripe<\/code><\/pre>\n<p>Para llamar al archivo blade y cobrar la transacci\u00f3n, cree un <code>PaymentController<\/code>usando el comando artisan:<\/p>\n<pre><code>php artisan make:controller PaymentController<\/code><\/pre>\n<p>Como deber\u00edamos almacenar los detalles de la transacci\u00f3n en la base de datos, cree un modelo <code>Payment<\/code>que est\u00e9 asociado con la tabla de pagos en la base de datos.<\/p>\n<pre><code>php artisan make:model Payment<\/code><\/pre>\n<p>Finalmente, <code>PaymentController.php<\/code>tendr\u00e1 el siguiente c\u00f3digo que cobra la transacci\u00f3n e inserta los detalles de la transacci\u00f3n en su base de datos.<\/p>\n<p><strong>PaymentController.php<\/strong><\/p>\n<pre><code>&lt;?php\n\u00a0\u00a0\nnamespace AppHttpControllers;\n\u00a0\u00a0\nuse IlluminateHttpRequest;\nuse OmnipayOmnipay;\nuse AppModelsPayment;\n\u00a0\u00a0\nclass PaymentController extends Controller\n{\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\u00a0\n\u00a0\u00a0\u00a0\u00a0public function charge(Request $request)\n\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if ($request-&gt;input('stripeToken')) {\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$gateway = Omnipay::create('Stripe');\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$gateway-&gt;setApiKey(env('STRIPE_SECRET_KEY'));\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$token = $request-&gt;input('stripeToken');\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$response = $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; env('STRIPE_CURRENCY'),\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'token' =&gt; $token,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0])-&gt;send();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if ($response-&gt;isSuccessful()) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ payment was successful: insert transaction data into the database\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$arr_payment_data = $response-&gt;getData();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$isPaymentExist = Payment::where('payment_id', $arr_payment_data['id'])-&gt;first();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if(!$isPaymentExist)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$payment = new Payment;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$payment-&gt;payment_id = $arr_payment_data['id'];\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$payment-&gt;payer_email = $request-&gt;input('email');\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$payment-&gt;amount = $arr_payment_data['amount']\/100;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$payment-&gt;currency = env('STRIPE_CURRENCY');\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$payment-&gt;payment_status = $arr_payment_data['status'];\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$payment-&gt;save();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return \"Payment is successful. Your payment id is: \". $arr_payment_data['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: display message to customer\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return $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}\n\u00a0\u00a0\u00a0\u00a0}\n}<\/code><\/pre>\n<p>Para el modo sandbox, Stripe proporciona <a href=\"https:\/\/stripe.com\/docs\/testing\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">tarjetas de cr\u00e9dito ficticias<\/a> para probar una transacci\u00f3n.<\/p>\n<p>Una vez que haya terminado con las pruebas del modo sandbox, reemplace sus claves API de prueba con la activa y su aplicaci\u00f3n comenzar\u00e1 a aceptar pagos reales autom\u00e1ticamente.<\/p>\n<p>\u00a1Eso es! Ya ha terminado con la integraci\u00f3n de la pasarela de pago de Stripe en Laravel. Me gustar\u00eda escuchar sus pensamientos y sugerencias en la secci\u00f3n de comentarios a continuaci\u00f3n.<\/p>\n<h4>Art\u00edculos relacionados<\/h4>\n<ul>\n<li><a href=\"https:\/\/themewp.inform.click\/es\/integracion-de-la-pasarela-de-pago-de-paypal-en-laravel\/\" title=\"Integraci\u00f3n de la pasarela de pago de PayPal en Laravel\">Integraci\u00f3n de la pasarela de pago de PayPal en Laravel<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/es\/integracion-de-authorize-net-payment-gateway-en-laravel\/\" title=\"Integraci\u00f3n de Authorize.Net Payment Gateway en Laravel\">Integraci\u00f3n de Authorize.Net Payment Gateway en Laravel<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/es\/integracion-de-la-pasarela-de-pago-paykun-en-laravel\/\" title=\"Integraci\u00f3n de la pasarela de pago PayKun en Laravel\">Integraci\u00f3n de la pasarela de pago PayKun en Laravel<\/a><\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fuente de grabaci\u00f3n:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/artisansweb.net\" class=\"external external_icon\">artisansweb.net<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>En este art\u00edculo, estudiamos la integraci\u00f3n de Stripe Payment Gateway en Laravel. Al usar la puerta de enlace de Stripe, un usuario puede aceptar pagos con tarjeta de cr\u00e9dito en el<\/p>\n","protected":false},"author":1,"featured_media":20112,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[495],"tags":[849],"class_list":["post-28230","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-laravel","tag-affiai-es"],"_links":{"self":[{"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/posts\/28230","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/comments?post=28230"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/posts\/28230\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/media\/20112"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/media?parent=28230"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/categories?post=28230"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/tags?post=28230"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}