2012-08-06 22 views
5

He hecho un formulario. Actualmente esta forma hace las siguientes operaciones:enviando el formulario después de la transacción exitosa de dinero de PayPal usando php

  1. cliente rellena el formulario (crea una orden)
  2. hace clic en el botón "Enviar"
  3. todas las entradas de la forma se introducen en una base de datos.

me gustaría cambiarlo a realizar las siguientes operaciones:

  1. cliente rellena el formulario
  2. en el final del formulario hay un cuadro de texto que muestra mucho esta orden tendrá un costo él.
  3. hace clic en el botón "Enviar" (si se acepta el precio)
  4. redirigido a PayPal
  5. si el pago se realiza correctamente -> todas las entradas de la forma se introducen en una base de datos. Else -> echo "transaction failed".

Esto es lo que he hecho hasta ahora:

contenidos "form.php"

<html><head><title>Title</title></head><body> 
<form action="php-form-processor.php" method="post"> 
    <table border="0" cellspacing="5" width = "500"> 
     <tr> 
      <td align="right" width="160">Choose an Item:</td> 
      <td align="left"> 
      <select name="formItem" value="<?=$varItem;?>" class="input_full" > 
       <option value="1">Cheese</option> 
      </select> 
      </td> 
     </tr> 
     <tr bgcolor="#D0E8F5"> 
      <td align="right" >Item count:</td> 
      <td align="left"> 
       <input type="text" name="formItemCount" maxlength="50" value="<?=$varItemCount = 1;?>" class="input_full" /> 
      </td> 
     </tr> 
    </table> 
    <p align="center"> 
    <input type="submit" name="formSubmit" align = "center" value="Submit" /> 
    </p> 
</form></body></html> 

contenidos "php-form-processor.php"

<?php 
if($_POST['formSubmit'] == "Submit") 
{ 
    $varItem = $_POST['formItem']; 
    $varItemCount = $_POST['formItemCount']; 

    //database stuff 
    $username = "..."; 
    $password = "..."; 
    $hostname = "..."; 
// connect and add to the database varItem and varItemCount 
    mysql_query($sql); 
    mysql_close($dbhandle); 
} 
?> 

La forma es mucho más grande pero simplifiqué el flujo de stackoverflow de eso. El precio de un pedido debe cambiar según el valor "varItem" y "varItemCount". Básicamente, quiero agregar la opción "Pagar con PayPal" antes de escribir una orden en la base de datos. P.S. Ya he registrado la cuenta de Sandbox de PayPal y he añadido "Comprador" y un "Vendedor".

¿qué debo hacer ahora?

EDITAR: bien, aquí hay una pequeña guía sobre cómo solucionar el problema. Éstos son algunos consejos:

  • primero, descargar paypal IPN escucha envoltorio: https://github.com/Quixotix/PHP-PayPal-IPN
  • continuación registro de cuenta SandBox más 1 comprador y el vendedor 1 según
  • registrado como vendedor y crear un formulario (con no botón alojado!)
  • lugar el formulario en su página y analizar la identidad o cualquier otra información necesaria a través de la entrada "a medida" (algunos útiles aconseja a se puede encontrar aquí: http://www.devshed.com/c/a/PHP/Creating-a-Paypal-IPN-System-in-PHP-Part-Two/)
  • Ahora coloque redirigir a esta página después de envío de formulario
  • no se olvide de activar IPN en la cuenta del vendedor de payPal e introduzca enlace IPNlistener en un campo de dirección necesaria
  • presentar un formulario de payPal y esperar la respuesta de escucha
  • hecho

proccess entero se ve así:

  1. cliente rellena el formulario
  2. después de enviar el formulario - todas las entradas se escriben en la base de datos + ID + 1 campo adicional llamado "pagado" que representa: 1 - si el cliente pagado por una orden y 0 - si no
  3. cabecera de uso ("Lugar: URL") para volver a dirigir a partir Form_Processing a Paypal_Form
  4. utilice la "sesión" para escribir el ID de pedido en un mensaje de sesión o en la post
  5. presentar la PaypalForm y utilice el campo "personalizado" como carier para nuestra ID de pedido
  6. configure el oyente para actualizar la base de datos de la siguiente manera: si la transacción fue exitosa -> actualice la columna de la base de datos "pagada" a 1 (finalizada). Utilice el ID de campo "a medida" para seleccionar orden necesario es decir .:

$ sql = "ACTUALIZACIÓN paypal_test SET pagado = '1' donde id = '" [a medida ']. "'" $ _ POST.';

Ahora tenemos una base de datos con formularios completados y no completados. Además, puede escribir una lógica que eliminará las órdenes incompletas "viejas". Por esta razón, puede crear una columna adicional llamada "fecha" y luego comparar: if (current_date.days - old_date.days> 7) -> eliminar de DB. ¡Eso es!

+0

Cuál es su pregunta real? Me parece que todavía necesita la confirmación de Paypal en esta transacción (su paso 5). ¿Estás usando el mecanismo de IPN para esto? –

+0

Asegúrese de estar comprobando el importe pagado por la persona: puede modificar las variables POST de entrada con algún pirateo de cliente para que alguien pueda pagar $ 1 por un artículo de $ 100 y, a menos que lo compruebe, podría salirse con la suya. PayPal responderá con la cantidad si recuerdo correctamente. También asegúrese de que este sea el tipo correcto de transacción (creo que "Aceptación de pago web" pero hay muchas diferentes como "eCheque" que no representan una transacción completada - el IPN envía todas las notificaciones, incluidos los reembolsos) – williamvicary

+0

no hay tiempo suficiente para editar el comentario, así crearé uno nuevo pronto – Alex

Respuesta

0

no aceptaría lo que el PayPal segundo palo le está dando, que es una manera descuidada de la comprobación de la autenticación del usuario y espera que el usuario haga clic en el botón "volver al sitio web". En su lugar, use el IPN (https://www.paypal.com/ipn/) y asegúrese de publicar la respuesta nuevamente en PayPal para su verificación.

Pedido este ejemplo PHP desde PayPal: https://cms.paypal.com/uk/cgi-bin/?cmd=_render-content&content_ID=developer/e_howto_admin_IPNImplementation

+0

¡gracias! su sugerencia de IPN fue útil. Mira "editar" para ver cómo resolví el problema al final. (si quieres ofc);) – Alex

1

Bueno, más o menos ya se ha descrito lo que tiene que hacer:

  • primero: hacer una Javascript onchange, que resume el valor y puestos en el lugar que desee;
  • 2do: haga una comprobación php de los valores después del envío (asegúrese también de comprobar si hay problemas de inyección);
  • 3er: redirigir a PayPal y esperar la respuesta;
  • 4º: de acuerdo con los paypals, la respuesta resuena el resultado;

PD: espero que no está esperando a alguien para volver a escribir en realidad toda la secuencia de comandos para usted;)

Cuestiones relacionadas