Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

198
Views
¿Cómo tener un controlador personalizado en lugar de un botón de PayPal en React?

Tengo un sitio web con múltiples formas de pago. Puedo cambiar entre ellos y luego tengo un botón con la etiqueta "Continuar con el pago" que cuando haces clic, hace algo dependiendo del método de pago elegido. La función del controlador se parece a esto:

 const handlePayment = (method) => { if(method === paymentMethods.STRIPE){ // do something } if(method === paymentMethods.PAYPAL){ // do something else } }

El problema es que miré los documentos y siempre se trata de mostrar un botón de PayPal, no quiero un botón de PayPal, quiero abrir el formulario de PayPal directamente desde mi botón, cuando se selecciona un método.

Quiero decir que quiero hacerlo programáticamente. ¿Hay alguna manera de hacer esto? No quiero hacer una solución pirateada ocultando el botón o activando el clic o alguna cosa rara...

El componente React PayPal es solo un envoltorio para JS SDK .

Mi interfaz de usuario se parece a esto: Me gustaría abrir el formulario de pago de PayPal cuando hago clic en Pagar, solo si se selecciona PayPal.

ingrese la descripción de la imagen aquí

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Si usa el SDK de PayPal JS para abrir el pago, debe usar su botón y el usuario debe hacer clic en él. PayPal hace esto intencionalmente para que el botón que se muestra use su marca coherente.

Si desea una alternativa, puede realizar la integración sin JS SDK (solo API REST) y tener su propio botón que redirige a la página de PayPal para su aprobación, que luego regresará a su sitio. Este es un patrón de integración antiguo, para sitios web antiguos, y no se recomienda.

A pesar de sus dudas y de su deseo de no utilizarlo, JS SDK y su botón en un contenedor del tamaño de sus requisitos es, de hecho, la mejor solución disponible.

Según la interfaz de usuario que se muestra, lo que podría optar por hacer es ocultar su botón "Pagar" y reemplazarlo con uno que diga "Pagar con PayPal" cuando se seleccione ese método, que podría verse así (dimensionado para adaptarse a su contenedor): ingrese la descripción de la imagen aquí Aquí hay una muestra de HTML/JS para eso, puede hacer lo mismo desde react-paypal-js:

 <script src="https://www.paypal.com/sdk/js?client-id=test&currency=USD"></script> <div id="paypal-button-container"></div> <script> paypal.Buttons({ fundingSource: paypal.FUNDING.PAYPAL, style: { color: "blue", label: "pay" }, // Set up the transaction createOrder: function(data, actions) { return actions.order.create({ purchase_units: [{ amount: { value: '88.44' } }] }); }, // Finalize the transaction onApprove: function(data, actions) { return actions.order.capture().then(function(orderData) { // Successful capture! For demo purposes: console.log('Capture result', orderData, JSON.stringify(orderData, null, 2)); var transaction = orderData.purchase_units[0].payments.captures[0]; alert('Transaction '+ transaction.status + ': ' + transaction.id + '\n\nSee console for all available details'); // Replace the above to show a success message within this page, eg // const element = document.getElementById('paypal-button-container'); // element.innerHTML = ''; // element.innerHTML = '<h3>Thank you for your payment!</h3>'; // Or go to another URL: actions.redirect('thank_you.html'); }); } }).render('#paypal-button-container'); </script>
about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!