Hola
Entro en mi web, intento hacer una compra con pago con tarjeta y me da error en el envío de datos. No sé si es problema en el html
Hola,
Sobre el código que has pegado:
class SHA { var $A, $B, $C, $D, $E; var $ta, $tb, $tc, $td, $te; var $K0_19, $K20_39, $K40_59, $K60_79; var $buffer; var $buffsize; var $totalsize; function SHA () { $this->init(); }
este no se corresponde con el del artículo que te ha indicado Jordi, sino que parece una versión antigua del mismo.
Previa copia de seguridad de tus archivos te recomiendo que utilices los que vienen en nuestro artículo del blog.
Ayer hice lo que indica el video del artículo que comentas. Cree una forma de pago desde el principio usando los archivos que especifica.
Pego aquí el código completo que viene en ese fichero, modificado con los datos reales
El problema continúa
f("order_id").'&option=com_virtuemart&Itemid=77';
$urlKO = JURI::base().'index.php?option=com_content&view=article&id=73';
$urlMerchant= JURI::base().'administrator/components/com_virtuemart/notificacion_ser.php'; // Para poder definir una URL del comercio es necesario usar PHP5
$descripcion = 'Compra productos en ediciones entricíclopes';
// No es posible usar PHP4 para poder enviar en la firma la url del comercio.
$order = '000'.$db->f("order_id");
$amount=$db->f("order_total")*100;
$message = $amount.$order.$code.$currency.$tipoOperacion.$urlMerchant.$clave;
$signature = strtoupper(sha1($message));
//Para que no vaya al cobro cuando se está en la página de detalles del pedido
if( $page == "checkout.thankyou" ) {
?>
<form name="form" action="" method="post">
<input type="hidden" name="Ds_Merchant_Amount" value="" />
<input type="hidden" name="Ds_Merchant_Currency" value="" />
<input type="hidden" name="Ds_Merchant_Order" value="" />
<input type="hidden" name="Ds_Merchant_ProductDescription" value="" />
<input type="hidden" name="Ds_Merchant_Titular" value="first_name ?> last_name ?>" />
<input type="hidden" name="Ds_Merchant_MerchantCode" value="" />
<input type="hidden" name="Ds_Merchant_MerchantURL" value="" />
<input type="hidden" name="Ds_Merchant_UrlOK" value="" />
<input type="hidden" name="Ds_Merchant_UrlKO" value="" />
<input type="hidden" name="Ds_Merchant_MerchantName" value="" />
<input type="hidden" name="Ds_Merchant_MerchantSignature" value="" />
<input type="hidden" name="Ds_Merchant_Terminal" value="" />
<input type="hidden" name="Ds_Merchant_TransactionType" value="" />
document.forms.form.submit();
Hola juan pedro,
Es extraño que se muestre el error incluso configurando de otra forma. ¿Has comprobado que tengas activa la pasarela de pago, en algunos casos cuando no hay movimiento durante 3 meses el propio banco la desactiva?
¿Te muestra el mismo código de error que nos facilitaste?
Saludos
El error es el mismo.
Desde redsys me escriben correos para decirme que aún no he hecho las pruebas en el entorno real. No puedo hacerlas mientras me siga dando este error.
La pasarela de pago es para ing direct.
No sé qué tocar.
Hola
Una amiga le ha echado un vistazo al código. Me comenta que hay una llamada a sha1
pero esa funcion no existe. Hemos probado a hacer la llamada con sha (sin número), no da error, el resultado es ok, pero no solicita los números de la tarjeta.
Hemos probado también a modificar esta línea de código:
$message = $amount.$order.$code.$currency.$clave; $signature = strtoupper(sha1($message));
Pero nada, sigue el mismo error. Según los manuales de sermepa es un error de signature SIS0042.
También pone esto:
La firma electrónica del comercio se deberá calcular de la forma siguiente si está configurado con el tipo de clave SHA1 completo en el TPV Virtual SIS (a través de su entidad financiera podrá confirmar el tipo de clave definido en su comercio):
Digest=SHA-1(Ds_Merchant_Amount + Ds_Merchant_Order +Ds_Merchant_MerchantCode + DS_Merchant_Currency + CLAVE SECRETA)
Esta línea (digest) no aparece por ninguna parte en el código del modo de pago con tarjeta.
No sé si todos estos datos os sirven de algo para orientarme. Espero que sí.
Gracias.
Un saludo.
Hola,
La función sha1 es propia de php, por lo que no es necesaria crearla. En otras webs que utilizan esta pasarela funciona sin problemas, por lo que el código deberías dejarlo como está.
Por lo que te comentan de Redsys, diría que el problema está en que tienes puesto un código para el entorno real y estás utilizando los datos de prueba. Tienes que tener en cuenta que Redsys no te dejará cambiar al entorno real hasta que detecten que hayas realizado prueba. El cambio de entorno lo tendrás que solicitar a la entidad bancaria.
En el código que has pegado se ve en las primeras líneas lo siguiente:
// $url_tpvv='sis-t.redsys.es:25443/sis/realizarPago'; // URL de Sermepa para entorno de pruebas. $url_tpvv='sis.sermepa.es/sis/realizarPago'; // URL de Sermepa para entorno real
Con esto estás utilizando el entorno real. Para utilizar el entorno de pruebas tendrás que poner lo siguiente:
$url_tpvv='sis-t.redsys.es:25443/sis/realizarPago'; // URL de Sermepa para entorno de pruebas. // $url_tpvv='sis.sermepa.es/sis/realizarPago'; // URL de Sermepa para entorno real
Una vez que hayas realizado las pruebas con los números de tarjeta que te hayas dado puedes solicitar el paso al entorno real. Te darán una nueva contraseña que deberás configurar en el código anterior y podrás dejar estas líneas como al inicio.
Vuelve a revisar el tutorial porque en él se explica esto.
Hola.
La fase de entorno de pruebas quedó atrás hace algunas semanas. Ya se hicieron las pruebas y todo fue bien. Los problemas los está dando ahora en el entorno real. Redsys ya me dio las claves para entorno real, que no te las dan hasta que no finalizas las pruebas. No se pueden poner datos de entorno real hasta que no se supera la fase de pruebas.
Salud.
Ese código puede dar errores en muchos sitios, así a botepronto: Si el código del pedido no son nueve números, si usas más de dos decimales en los precios...
El if( $page == "checkout.thankyou" ) tampoco es buena, ya que si el pago falla y se quiere reintentar desde el histórico de pedidos no se mostrará la opción de pagar.
En cualquier caso el error 0042 normalmente es que algún dato se envía mal. En la página que muestra el botón mira el código fuente y verás lo que ese código pone realmente en los campos del formulario y si es correcto o no.