Bueno espero esten bien
Pues tengo un pequeño problema con el ipn de paypal cuando un usuario realiza el pago y esta verificada y completada la transaccion necesito que me actualice unos campos en mi base de datos y que me inserte el ID de la transaccion pero al final no hace nada de nada y siempre recibo el pago.. les dejo el codigo para que echen un vistazo PD. Estoy desesperado
![Golpeado](http://static.forosdelweb.com/fdwtheme/images/smilies/pelea.png)
ESTE ES EL BOTON
Código PHP:
Ver original<div class = "boton">
<?php //Variable para guardar la ruta hacia la clase Class.PayPalEWP.php
$cert_id = 'LLW2ULUAYYKUS'; //Id del certificado
include("Class.PayPalEWP.php"); //Ruta hacia la clase
$paypal = new PayPalEWP();
$paypal->setTempFileDirectory("tmp"); // HAY que crear una carpeta tmp en el directorio de la clase
$paypal->setCertificate("my-pubcert.pem", "my-prvkey.pem");
$paypal->setPayPalCertificate("paypal_cert_pem.txt");
$paypal->setCertificateID($cert_id);
'cmd' => '_xclick',
'cert_id' => $cert_id,
'custom' => $row_BotonPaypal['id_principal'] , //Por si quieres añadir algún dato más
'item_name' => 'Cuenta premium en Clasificados Online', // Nombre del objeto que vendemos
'currency_code' => 'USD', //Tipo de moneda
'amount' => '0.01', //Precio
'lc' => 'ES', //Idioma
'no_note' => '1', //1-0 Mostrar cuadro de texto
'no_shipping' => '1',
'return' => 'http://clasificadosonline.comxa.com/return.php', //Url de retorno a la que nos devuelve paypal al comprar (incluido en el tuto)
'cancel_return' => 'http://clasificadosonline.comxa.com', //Url a la que nos devuelve al cancelar la compra
'notify_url' => 'http://clasificadosonline.comxa.com/ipn.php', //Url de notificación dónde se realiza el IPN (incluido en el tuto)
'cbt' => 'Texto Voler a mi página',
);
?>
<form action="https://www.paypal.com/cgi-bin/webscr" method="POST" name= "form1">
<input type="hidden" name="cmd" value="_s-xclick"><input type="hidden" name="cmd" value="_s-xclick">
<table width="296" border="1">
<tr>
<td>Inserte la clave de registro de su PRODUCTO</td>
<td><span id="sprytextfield1">
<input name="id_PRODUCTO" id ="id_PRODUCTO" type="text" />
<span class="textfieldRequiredMsg">recuerde que tiene que rellenar este campo.</span><span class="textfieldInvalidFormatMsg">Su codigo es solamente en numeros.</span></span></td>
</tr>
</table>
<input type="hidden" name="encrypted" value="-----BEGIN PKCS7-----<?php echo $paypal->encryptButton($boton1); ?>-----END PKCS7-----"/>
<input type="image" src="https://www.paypal.com/es_XC/i/btn/btn_buynowCC_LG.gif" border="0" name="submit" alt="PayPal, la forma más segura y rápida de pagar en línea.">
<img alt="" border="0" src="https://www.paypal.com/es_XC/i/scr/pixel.gif" width="1" height="1"></p></div>
</form>
ESTE ES EL IPN
Código PHP:
Ver original<?php require_once('Connections/clasi.php'); ?>
<?php
// STEP 1: Read POST data
// reading posted data from directly from $_POST causes serialization
// issues with array data in POST
// reading raw POST data from input stream instead.
$raw_post_array = explode('&', $raw_post_data); foreach ($raw_post_array as $keyval) {
}
// read the post from PayPal system and add 'cmd'
$req = 'cmd=_notify-validate';
$get_magic_quotes_exists = true;
}
foreach ($myPost as $key => $value) {
} else {
}
$req .= "&$key=$value";
}
// STEP 2: Post IPN data back to paypal to validate
$ch = curl_init('https://www.paypal.com/cgi-bin/webscr'); curl_setopt($ch, CURLOPT_HTTP_VERSION
, CURL_HTTP_VERSION_1_1
);
// In wamp like environments that do not come bundled with root authority certificates,
// please download 'cacert.pem' from "http://curl.haxx.se/docs/caextract.html" and set the directory path
// of the certificate as shown below.
// curl_setopt($ch, CURLOPT_CAINFO, dirname(__FILE__) . '/cacert.pem');
// error_log("Got " . curl_error($ch) . " when processing IPN data");
echo "error con el ipn";
}
// STEP 3: Inspect IPN validation result and act accordingly
if (strcmp ($res['status'], "VERIFIED") == 0) { if($payment_status=='Completed'){
$query_txnid=mysql_query("SELECT txn_id FROM log WHERE txn_id='".$txn_id."'"); if($payment_amount=='0.01' && $payment_currency=='USD'){
//ADD txn_id A DB
$insertSQL = sprintf("INSERT INTO log (txn_id, email) VALUES (%s, %s)", GetSQLValueString($txn_id , "text"),
GetSQLValueString( $payer_email, "text"));
//ACTUALIZAR PREMIUM A 1
$query_ConsulLocal = "UPDATE principal SET premium='1' WHERE id_principal='".$PRODUCTO_id."'";
}
}
}
}
// assign posted variables to local variables
$item_name = $_POST['item_name'];
$item_number = $_POST['item_number'];
$payment_status = $_POST['payment_status'];
$payment_amount = $_POST['mc_gross'];
$payment_currency = $_POST['mc_currency'];
$txn_id = $_POST['txn_id'];
$receiver_email = $_POST['receiver_email'];
$payer_email = $_POST['payer_email'];
} else if (strcmp ($res, "INVALID") == 0) { // log for manual investigation
}
?>
espero me ayuden