es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Tarjeta de débito o crédito de PayPal no se muestra cuando se proporciona un valor vacío.

Estoy haciendo una integración de PayPal pero tengo un problema: en el código de abajo, si $(“#DonorEmailID”).val() está vacío, el formulario ya no se renderiza.

paypal.Buttons({
    style: {
        layout: 'vertical',
        shape: 'rect',
        height: 36
    },
    createOrder: function (data, actions) {
        return actions.order.create({
            //https://developer.paypal.com/docs/checkout/integration-features/standard-card-fields/
            payer: {
                email_address: $("#DonorEmailID").val(),
                phone: {
                    phone_type: 'MOBILE',
                    phone_number: {
                        national_number: '14082508100'
                    }
                }
            },
            application_context: {
                shipping_preference: 'NO_SHIPPING'
            },
            purchase_units: [{
                description: getPurchaseDescription(),
                amount: {
                    value: $("#Amount").val()
                }
            }]
        });
    },
});

Video de demostración: https://www.screencast.com/t/xdENMuUbcbWu
¿Hay alguna forma de agregar la propiedad email_address a payer de forma condicional? ¿O tienes otra solución para este problema?

Gracias.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Sí, hay una forma de añadir la propiedad email_address de manera condicional al pagador. Una opción podría ser verificar si el campo de correo electrónico está vacío antes de crear la orden y solo incluir la propiedad email_address si no está vacío. Aquí tienes un ejemplo de cómo podría implementarse:

    createOrder: function (data, actions) {
      var payer = {
        phone: {
          phone_type: "MOBILE",
          phone_number: {
            national_number: "14082508100"
          }
        },
        application_context: {
          shipping_preference: 'NO_SHIPPING'
        }
      };
    
      var donorEmail = $("#DonorEmailID").val();
      if (donorEmail) {
        payer.email_address = donorEmail;
      }
    
      return actions.order.create({
        payer: payer,
        purchase_units: [{
          description: getPurchaseDescription(),
          amount: {
            value: $("#Amount").val()
          }
        }]
      });
    }
    

    Alternativamente, podrías intentar añadir un valor predeterminado para la propiedad email_address si el campo está vacío, para que el formulario siga mostrándose. Por ejemplo:

    createOrder: function (data, actions) {
      return actions.order.create({
        payer: {
          email_address: $("#DonorEmailID").val() || 'test@example.com',
          phone: {
            phone_type: "MOBILE",
            phone_number: {
              national_number: "14082508100"
            }
          },
          application_context: {
            shipping_preference: 'NO_SHIPPING'
          }
        },
        purchase_units: [{
          description: getPurchaseDescription(),
          amount: {
            value: $("#Amount").val()
          }
        }]
      });
    }
    

    Ten en cuenta que en este caso, la propiedad email_address siempre tendrá un valor (ya sea la entrada del usuario o el valor predeterminado), lo cual puede que no sea ideal para tu caso de uso.

Comments are closed.