PHP - No puedo enviar variables por socket

 
Vista:
sin imagen de perfil

No puedo enviar variables por socket

Publicado por Juan Jesus (6 intervenciones) el 15/03/2018 19:53:17
Buen día a todos, de antemano muchas gracias por la ayuda brindada a este mensaje, presento a continuación la situación en la que me encuentro:


Una ip me esta enviando unas variables por socket a una direccion que yo le proporcione (http://misitio.com/car/index.php), pero en este archivo no recibo la informacion y me envia esta informacion:

1
2
3
4
HTTP/1.1 400 Bad Request Date: Thu, 15 Mar 2018 18:51:28 GMT Server: Apache/2 Content-Length: 226 Connection: close Content-Type: text/html; charset=iso-8859-1
Bad Request
 
Your browser sent a request that this server could not understand.

Que puedo realizar para poder recibir la información correctamente?, o que procedimiento debo seguir, tengo el archivo (http://misitio.com/car/index.php) en un hosting linux...
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 1.071
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

No puedo enviar variables por socket

Publicado por Yamil Bracho (888 intervenciones) el 15/03/2018 20:26:20
No entiendo muy bien la conexion pero si acceso externo es via socket entonces tu proframa PHP debe fungir como server socket y tu cliente debe econectarse via socket es decir con la direccion y el puerto donde esta tu PHP escuchando un puerto y no atraves de una URL de http
o implemengtar algo del protocolo HTPP en tu servidor PHP
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve
Val: 3.943
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

No puedo enviar variables por socket

Publicado por xve (6935 intervenciones) el 15/03/2018 20:31:30
Hola Juan, nos puedes compartir el código para verlo?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

No puedo enviar variables por socket

Publicado por Juan Jesus (6 intervenciones) el 15/03/2018 23:15:37
Claro con gusto, este es el codigo que tengo para recibir las variables...

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
<?php
    // mandamos llamar para la conexion
    require('conexion.php');
 
    // variables recividas por el metodo post
    $folio = $_POST["cl_folio"];
    $concepto = $_POST["t_concepto"];
    $referencia = $_PSOT["cl_referencia"];
    $fechapago = $_POST["dt_fechaPago"];
    $nlstatus = $_POST["nl_status"];
    $tipopago = $_POST["nl_tipoPago"];
    $monto = $_POST["dl_monto"];
    $Hash = $_POST["hash"];
 
   // variable para el dato pago
    $status1="PAGADO";
    // variable para saber la hora del pago
    $hora= date("H:i:s");
   //finncion para la encriptacion y desencriptacion de la llave primaria
function SignData($text, $privateKeyFile)
{
	$private_cert = $privateKeyFile;
 	$f = fopen($private_cert,"r+");
    if($f)
    $private_key = fread( $f, filesize($private_cert) );
    else
              return "";
    fclose($f);
    $private_key = openssl_get_privatekey($private_key);
    if(openssl_private_encrypt(md5($text), $crypt_text, $private_key))
    {
	return base64_url_encode($crypt_text);
    }
	return "";
}
//ATAR para generar HASH con llave publica
function SignDataInv($text, $publicKeyFile)
{
	$public_cert = $publicKeyFile;
 	$f = fopen($public_cert,"r+");
    if($f)
    $public_key = fread( $f, filesize($public_cert) );
    else
    return "";
    fclose($f);
    $public_key = openssl_get_publickey($public_key);
    if(openssl_public_encrypt(md5($text), $crypt_text, $public_key))
    {
	return base64_url_encode($crypt_text) . "\n";
    }
	return "";
}
 
function VerifyData($crypt_text, $plaintext, $publicKeyFile)
{
    $public_cert = $publicKeyFile;
    $s = fopen($public_cert,"r+");
    if($s)
    $public_key = fread( $s, filesize($publicKeyFile));
    else
    return false;
    fclose($s);
    $res = openssl_get_publickey($public_key);
	if(openssl_public_decrypt(base64_url_decode($crypt_text), $decrypt, $res))
    {
	if($decrypt == md5($plaintext))
    return true;
	else
	return false;
    }
	return false;
}
 
function base64_url_encode($input) {
    return strtr(base64_encode($input), '+/=', '-_,');
}
 
function base64_url_decode($input) {
    return base64_decode(strtr($input, '-_,', '+/='));
}
  // variable para tomar las variables post y concatenarlas
	  $plaintext= $folio."|".$concepto."|".$referencia."|".$monto."|".$fechapago."|".$tipopago."|".$nlstatus."|";
 
	   // variable para verificar los datos si son correctos almacenar 
 
	if(VerifyData($Hash,$plaintext,"./Public_key.pem") )
				{
    // sentencia para actualizar los datos cuando se cumpla la condicion
    $queryi="UPDATE recibosalumnos SET status = '$status1',fechaPagoRecibo = '$fechapago', tipoPagoRecibo = '$tipopago',statusPagoRecibo = '$nlstatus',hora_pago='$hora' WHERE recibosalumnos.numeroRecibo = '$folio'";
	$resultado = $conexion->query($queryi);
	if($resultado){
	 echo"<script type=\"text/javascript\">alert('Pago realizado correctamente'); window.location='https://misitio.net/ordenar.php';</script>";
	}else{
     echo"<script type=\"text/javascript\">alert('Error al almacenar en la base de datos'); window.location='https://misitio.net/ordenar.php';</script>";
	}
 
	}
	else
	{
	// mensaje para cuando no se reciven los datos completos 			
	echo"<script type=\"text/javascript\">alert('Error al recibir los datos en el sistema web'); window.location='https://misitio.net/ordenar.php';</script>";
	}
 
?>


ASI ES COMO LO TENGO NO SE QUE ME HAGA FALTA

y el cliente me envia la informacion por POST socket
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 1.071
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

No puedo enviar variables por socket

Publicado por Yamil Bracho (888 intervenciones) el 15/03/2018 23:26:38
Prueba en vez de $_POST usa HTTP_RAW_POST_DATA

$raw_data = $GLOBALS['HTTP_RAW_POST_DATA'];
parse_str( $raw_data, $_POST );

print_r( $_POST );
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

No puedo enviar variables por socket

Publicado por Juan Jesus (6 intervenciones) el 15/03/2018 23:29:24
En cada variable ponto el post data? o con una sola sentencia me obtiene todas las variables?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

No puedo enviar variables por socket

Publicado por Juan Jesus (6 intervenciones) el 16/03/2018 00:32:17
Envio el codigo reescrito y sigo teniendo el mismo problema:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
<?php
    // mandamos llamar para la conexion
    require('conexion.php');
 
    // variables recividas por el metodo post
   /* $folio = $_POST["cl_folio"];
    $concepto = $_POST["t_concepto"];
    $referencia = $_PSOT["cl_referencia"];
    $fechapago = $_POST["dt_fechaPago"];
    $nlstatus = $_POST["nl_status"];
    $tipopago = $_POST["nl_tipoPago"];
    $monto = $_POST["dl_monto"];
    $Hash = $_POST["hash"];*/
 
$raw_data = $GLOBALS['HTTP_RAW_POST_DATA'];
parse_str( $raw_data, $_POST );
 
print_r( $_POST );
 
   // variable para el dato pago
    $status1="PAGADO";
    // variable para saber la hora del pago
    $hora= date("H:i:s");
   //finncion para la encriptacion y desencriptacion de la llave primaria
function SignData($text, $privateKeyFile)
{
	$private_cert = $privateKeyFile;
 	$f = fopen($private_cert,"r+");
    if($f)
    $private_key = fread( $f, filesize($private_cert) );
    else
              return "";
    fclose($f);
    $private_key = openssl_get_privatekey($private_key);
    if(openssl_private_encrypt(md5($text), $crypt_text, $private_key))
    {
	return base64_url_encode($crypt_text);
    }
	return "";
}
//ATAR para generar HASH con llave publica
function SignDataInv($text, $publicKeyFile)
{
	$public_cert = $publicKeyFile;
 	$f = fopen($public_cert,"r+");
    if($f)
    $public_key = fread( $f, filesize($public_cert) );
    else
    return "";
    fclose($f);
    $public_key = openssl_get_publickey($public_key);
    if(openssl_public_encrypt(md5($text), $crypt_text, $public_key))
    {
	return base64_url_encode($crypt_text) . "\n";
    }
	return "";
}
 
function VerifyData($crypt_text, $plaintext, $publicKeyFile)
{
    $public_cert = $publicKeyFile;
    $s = fopen($public_cert,"r+");
    if($s)
    $public_key = fread( $s, filesize($publicKeyFile));
    else
    return false;
    fclose($s);
    $res = openssl_get_publickey($public_key);
	if(openssl_public_decrypt(base64_url_decode($crypt_text), $decrypt, $res))
    {
	if($decrypt == md5($plaintext))
    return true;
	else
	return false;
    }
	return false;
}
 
function base64_url_encode($input) {
    return strtr(base64_encode($input), '+/=', '-_,');
}
 
function base64_url_decode($input) {
    return base64_decode(strtr($input, '-_,', '+/='));
}
  // variable para tomar las variables post y concatenarlas
	  $plaintext= $folio."|".$concepto."|".$referencia."|".$monto."|".$fechapago."|".$tipopago."|".$nlstatus."|";
 
	   // variable para verificar los datos si son correctos almacenar 
 
	if(VerifyData($Hash,$plaintext,"./Public_key.pem") )
				{
    // sentencia para actualizar los datos cuando se cumpla la condicion
    $queryi="UPDATE recibosalumnos SET status = '$status1',fechaPagoRecibo = '$fechapago', tipoPagoRecibo = '$tipopago',statusPagoRecibo = '$nlstatus',hora_pago='$hora' WHERE recibosalumnos.numeroRecibo = '$folio'";
	$resultado = $conexion->query($queryi);
	if($resultado){
	 echo"<script type=\"text/javascript\">alert('Pago realizado correctamente'); window.location='https://misitio.net/ordenar.php';</script>";
	}else{
     echo"<script type=\"text/javascript\">alert('Error al almacenar en la base de datos'); window.location='https://misitio.net/ordenar.php';</script>";
	}
 
	}
	else
	{
	// mensaje para cuando no se reciven los datos completos 			
	echo"<script type=\"text/javascript\">alert('Error al recibir los datos en el sistema web'); window.location='https://misitio.net/ordenar.php';</script>";
	}
 
?>

Y sigo si poder leer las variables

estoy emulando al otro sitio que me envia las variables con este archivo para hacer las pruebas:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
<?php
//FUNCION PARA ENCRIPTAR LA INFORMACION
    function SignData($text, $privateKeyFile)
{
	$private_cert = $privateKeyFile;
 	$f = fopen($private_cert,"r+");
        if($f)
                $private_key = fread( $f, filesize($private_cert) );
        else
              return "";
        fclose($f);
        $private_key = openssl_get_privatekey($private_key);
        if(openssl_private_encrypt(md5($text), $crypt_text, $private_key))
        {
		return base64_url_encode($crypt_text);
        }
	return "";
}
 
function base64_url_encode($input) {
    return strtr(base64_encode($input), '+/=', '-_,');
}
 
function base64_url_decode($input) {
    return base64_decode(strtr($input, '-_,', '+/='));
}
 
 
//FIN DE FUNCION PARA ENCRIPTAR LA INFORMACION
 
 
//INFORMACION PARA LA CONFIRMACION 
    $cl_servicio   = 76;
	$cl_folio      = 10078;
	$t_concepto    = 1;
	$cl_referencia = "18882 PAGO DE COLEGIATURA MARZO";
	$dl_monto      = "0.01";
	$dt_fechaPago  = "20180227";
	$nl_tipoPago   = "01";
	$nl_status     = "01";
 
	//CONCATENAR
	$cadenaDatos = $cl_folio."|".$t_concepto."|".$cl_referencia."|".$dl_monto."|".$dt_fechaPago."|".$nl_tipoPago."|".$nl_status."|";
	//echo $cadenaDatos;
 
	//GENERAR EL HASH
	$vHash_sys 	  = SignData($cadenaDatos, "./Private_key.pem");
	$vHash 		  = $vHash_sys;
 
 
function post_request($url, $data, $referer='') {
 
    // Convert the data array into URL Parameters like a=b&foo=bar etc.
    $data = http_build_query($data);
 
    // parse the given URL
    $url = parse_url($url);
 
    if ($url['scheme'] != 'http') {
        die('Error: Only HTTP request are supported !');
    }
 
    // extract host and path:
    $host = $url['host'];
    $path = $url['path'];
 
    // open a socket connection on port 80 - timeout: 30 sec
    $fp = fsockopen($host, 80, $errno, $errstr, 30);
 
    if ($fp){
 
        // send the request headers:
        fputs($fp, "POST $path HTTP/1.0\r\n");
        fputs($fp, "Host: $host\r\n");
 
        if ($referer != '')
            fputs($fp, "Referer: $referer\r\n");
 
        fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n");
        fputs($fp, "Content-length: ". strlen($data) ."\r\n");
		fputs($fp,"Cache-Control: no-cache\r\n");
		fputs($fp, "\n");
		fputs($fp, $data."\n");
        /*fputs($fp, "Connection: close\r\n\r\n");
        fputs($fp, $data);*/
 
        $result = '';
        while(!feof($fp)) {
            // receive the results of the request
            $result .= fgets($fp, 2048);
        }
    }
    else {
        return array(
            'status' => 'err',
            'error' => "$errstr ($errno)"
        );
    }
 
    // close the socket connection:
    fclose($fp);
 
    // split the result header from the content
    $result = explode("\r\n\r\n", $result, 2);
 
    $header = isset($result[0]) ? $result[0] : '';
    $content = isset($result[1]) ? $result[1] : '';
 
    // return as structured array:
    return array(
        'status' => 'ok',
        'header' => $header,
        'content' => $content
    );
}
 
// Submit those variables to the server
$post_data = array(
    'cl_folio' => $cl_folio,
	't_concepto=' => $t_concepto,
    'cl_referencia' => $cl_referencia,
    'dl_monto' => $dl_monto,
	'dt_fechaPago' => $dt_fechaPago,
	'nl_tipoPago' => $nl_tipoPago,
	'nl_status' => $nl_status,
	'hash' => $vHash
);
 
 
 
 
 
 
// Send a request to example.com 
$result = post_request('http://misitio2.com/and/confirmar.php', $post_data);
 
if ($result['status'] == 'ok'){
 
    // Print headers 
    echo $result['header'];
 
    echo '<hr />';
 
    // print the result of the whole request:
    echo $result['content'];
	 echo '<hr />';
 
	echo http_build_query($post_data);
 
	//echo "<script type=\"text/javascript\">window.location='http://misitio.net/ws/index.php/?".$pro.";</script>";
 
}
else {
    echo 'A error occured: ' . $result['error'];
}
 
?>

estoy un poco desesperado porque no se que me falta, se que puede ser algo muy sencillo pero no se que es....
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

ERROR en el còdigo

Publicado por lucio (1 intervención) el 30/08/2023 02:45:35
Tienes un error en la linea 8:

$referencia = $_PSOT["cl_referencia"];

deberia ser $_POST['variable'];
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve
Val: 3.943
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

No puedo enviar variables por socket

Publicado por xve (6935 intervenciones) el 16/03/2018 07:50:44
Tienes un pequeño error en esta linea:
1
$referencia = $_PSOT["cl_referencia"];
tiene que ser:
1
$referencia = $_POST["cl_referencia"];

Si lo que te comenta Yamil no te ha funcionado, faltaría ver como te envía los valores el cliente...

De todas maneras, he estado revisando exactamente el error 400, y es porque el tipo de dato enviado es erroneo o no lo puede interpretar... yo entiendo que es mas un problema de como te envían los datos que no como tu los recibes!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

No puedo enviar variables por socket

Publicado por Juan Jesus (6 intervenciones) el 16/03/2018 19:51:23
Gracias por tus observaciones, ya esta corregido y sigue el mismo detalle, así es como dicen que me los están enviando mira:

1
cl_folio|cl_referencia|dl_monto|dt_fechaPago|nl_tipoPago|nl_status|hash

y en su documentacion me piden lo siguiente:


Para verificar el hash o forma digital generada , se realizará la misma concatenación de las variables POST recibidas.

Ahora en las variables que dicen que me envian en el contenido me aparece asi:


referencia
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar