Avisos
Vaciar todo

error en el envío de datos en entorno real  

Página 2 / 2
 
juan pedro
 juan pedro
Usuario activo

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

Citar
Respondido : 10/11/2013 8:23 pm
Pablo Velasco
 Pablo Velasco
Illustrious Member

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.

ResponderCitar
Respondido : 13/11/2013 3:12 pm

Gestor de Contraseñas - VPN Conexión Segura - Gestor 2FA (Segundo Factor de Autenticación

juan pedro
 juan pedro
Usuario activo

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();

ResponderCitar
Respondido : 13/11/2013 5:43 pm
Jordi Sala
 Jordi Sala
Miembro Admin

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

ResponderCitar
Respondido : 14/11/2013 11:18 am

juan pedro
 juan pedro
Usuario activo

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.

ResponderCitar
Respondido : 18/11/2013 12:11 pm
juan pedro
 juan pedro
Usuario activo

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.

ResponderCitar
Respondido : 19/11/2013 1:25 am

wpdoctor-revisa-la-salud-de-tu-wordpress

Pablo Velasco
 Pablo Velasco
Illustrious Member

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.

ResponderCitar
Respondido : 19/11/2013 5:06 pm
juan pedro
 juan pedro
Usuario activo

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.

ResponderCitar
Respondido : 19/11/2013 5:27 pm

Cursos Gratuitos WordPress

mikel
 mikel
Estimable Member

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.

ResponderCitar
Respondido : 19/11/2013 6:41 pm
Página 2 / 2