2011-09-02 25 views
7

Estoy tratando de verificar la información de paypal pdt.CURL Solicitud de problema

He generado mi formulario de maqueta y lo he enviado. IT trabajó y devolvió la información también.

He intentado lo mismo haciendo la solicitud curl. Pero mi solicitud cur está volviendo en blanco para mí.

mi forma de maqueta:

<form method="post" action="https://sandbox.paypal.com/cgi-bin/webscr"> 
    <input type="hidden" name="cmd" value="_notify-synch"/> 
    <input type="hidden" name="at" value="-----"/> 
    <input type="hidden" name="tx" value="-----"/> 
    <input type="submit" value="Test"/> 
</form> 

mi rizo Código REQ:

$arrData = array(
    'tx' => '----', 
    'cmd' => '_notify-synch', 
    'at' => '-----' 
); 
    $ch = curl_init('https://sandbox.paypal.com/cgi-bin/webscr'); 
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1) ; 
    curl_setopt($ch, CURLOPT_POST, 1); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $arrData); 
    $strCurlResult = curl_exec($ch); 
    curl_close($ch); 
    return $strCurlResult; 

EDIT:

en el seguimiento de error rizo he encontrado siguiente mensaje:

SSL: Título del certificado 'www.sandbox.paypal.com' no coincide con el nombre de host de destino 'sandbox.paypal.com'

+0

posible dupe: http://stackoverflow.com/questions/1776827/php-curl-paypal-sandbox –

+0

KoolKabin; por favor actualice esta pregunta si contribuimos a su solución. – Robert

Respuesta

8

Cambio: $ ch = curl_init ('https://sandbox.paypal.com/ cgi-bin/webscr ');
Para: $ ch = curl_init ('https://www.sandbox.paypal.com/cgi-bin/webscr');

Motivo: el certificado de www.sandbox.paypal.com no es válido para sandbox.paypal.com.
Haga el mismo cambio en la "acción" de su formulario, por cierto.

+0

¡Esto es genio! – almaruf

0

enviarlo como cadena:

$arrData = array(
    'tx' => '----', 
    'cmd' => '_notify-synch', 
    'at' => '-----' 
); 

$fields_string = ""; 

foreach($arrData as $key=>$value) 
    $fields_string .= $key.'='.$value.'&'; 

rtrim($fields_string,'&'); 

$ch = curl_init('https://sandbox.paypal.com/cgi-bin/webscr'); 
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1) ; 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields_string); 
$strCurlResult = curl_exec($ch); 
curl_close($ch); 
return $strCurlResult; 
+0

sin suerte ......... – KoolKabin

6

es necesario decirle no rizo para verificar el certificado SSL. Esto se puede hacer mediante el establecimiento de una opción de cURL:

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 

Más información aquí:

http://php.net/manual/en/function.curl-setopt.php

+1

No siempre es suficiente. En algunos envs, también tiene que deshabilitar CURLOPT_SSL_VERIFYHOST. –

2

curl_setopt ($ ch, CURLOPT_SSL_VERIFYPEER, 0);

aunque el anterior funciona no es recomendable.

como Robert dijo

Cambio:

$ ch = curl_init ('https://sandbox.paypal.com/cgi-bin/webscr');

Para:

$ ch = curl_init ('https: //www.sandbox.paypal.com/cgi-bin/webscr ');

21

De hecho, solo puede deshabilitar la verificación HOST de igual. En alguna versión de PHP/CURL, simplemente desactivando PEER no es suficiente:

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); 

A partir de los documentos:

opción CURLOPT_SSL_VERIFYHOST: 1 para comprobar la existencia de un nombre común en el certificado SSL del otro. 2 para verificar la existencia de un nombre común y también verificar que coincida con el nombre de host provisto. En entornos de producción , el valor de esta opción debe mantenerse en 2 (valor predeterminado ).

Cuestiones relacionadas