wordpress forms – Enviar la publicación a la base de datos y luego redirigirla a PayPal

Pregunta:

Estoy tratando de enviar los datos del formulario a la base de datos y luego enviar al cliente a PayPal, que usará IPN para enviar una respuesta.

Ahora mismo tengo el formulario enviándolo a la base de datos, tengo el IPN funcionando, mi problema es la parte de redireccionamiento. Quiero que todo se haga con el clic de un botón …

Mi formulario simplemente se envía a la página actual donde valida los datos y los agrega a la base de datos. Parece que no puedo usar el encabezado porque los datos ya se han enviado al encabezado.

Cuáles son mis opciones / soluciones. La solución más simple sería la mejor, pero estoy abierto a cualquier cosa en este momento.

Para una tarea tan simple, pensaría que habría una solución simple …

Aquí está mi código que imprime el formulario:

function display_form() { ?>
        <div class="culis-module">
            <form action="<?php echo str_replace( '%7E', '~', $_SERVER['REQUEST_URI']); ?>" method="post">      
                <div class="clearfix culis-module-body">
                    <?php 
                    if ( $_POST['culis_add_listing'] == 'Y' && $this->no_errors()) { 
                        $this->addto_db();
                        ?><div class="alert alert-success"><button type="button" class="close" data-dismiss="alert">x</button> <?php _e('Thank You, your company will be listed as soon as payment is processed.')?></div><?php 
                    }

                    if ( $_POST['culis_add_listing'] == 'Y' && !$this->no_errors()) { 
                        $this->prepare_fields('saved'); 
                    } 
                    else {
                        $this->prepare_fields();
                    }?>
                </div>
                <div class="modal-footer">  
                    <button class="btn btn-primary" type="submit" name="culis_add_listing" value="Y">Submit</button>
                    <button class="btn" type="submit" name="form_reset" value="Y">Clear</button>
                </div>
            </form>
        </div>
    <?php 
    }

Actualización: aquí hay un ejemplo de lo que estoy tratando de hacer https://stackoverflow.com/a/6753281/1445460

Respuesta:

No estoy seguro de cómo me encontré con esta pregunta un año después, pero como no tiene respuesta …

En lugar de autoenviar el formulario y luego redirigirlo a Paypal, puede usar la URL de PayPal como acción de su formulario, pero use Ajax para guardar los datos del formulario antes de enviarlo a Paypal. También puede utilizar la respuesta Ajax para preparar el formulario antes de enviarlo, por ejemplo, rellenando algunos campos ocultos

He aquí un ejemplo:

myform.php :

<form id="myform" method="post" action="<?php echo $paypal_url; ?>">
   <input type="text" ...>
   <input type="hidden" name="my-hidden-field" id="my-hidden-field" value="this is hidden"> 
   ...other form fields...
</form>

saveform.php : procesa la solicitud Ajax y devuelve una respuesta que se puede usar para manipular el formulario antes de enviarlo

<?php 
  if (!empty($_POST)) {
     //save $_POST data to the database
     ...
     //also, fill some data as response
     $response = array('my_hidden_field' => 'this is now filled in');
     //next line returns the response
     echo json_encode($response);  
  }

myform.js : envía los datos del formulario a saveform.php antes de enviarlos a paypal

$j = jQuery.noConflict();

$j(document).ready(function() {
    $j('#myform').submit(submit_myform);
});

function submit_myform() {
    if (!myform_is_valid()) {
        window.location.href = "#myform"; 
        return false;//prevent normal browser submission, to display validation errors
    } else {
        $j.ajax({
           url: 'saveform.php',
           type: 'POST',
           data: $j(this).serialize(),
           dataType:'json', //data type of Ajax response expected from server
           success: myform_success //callback to handle Ajax response and submit to Paypal
        });
       return false;//prevent normal browser submission, since the form is submitted in the callback
   } 
}

function myform_is_valid() {
    $valid = true;
    //validate data; if there's a validation error, set $valid=false and display errors on page
    ...
    return $valid;
}

function myform_success(response) {
    //this is called whenever the ajax request returns a "200 Ok" http header
    //manipulate the form as you wish
    $j('#my-hidden-field').val(response.my_hidden_field);
    //submit the form (to the form's action attribute, i.e $paypal_url)
    document.forms['myform'].submit(); 
}

En lugar de la llamada jquery.ajax, también puede usar la más corta:

$j.post('saveform.php',$j('#myform').serialize(),myform_success,"json")

Leave a Comment

Your email address will not be published. Required fields are marked *

web tasarım