2011-09-02 11 views
7

Sto tentando di verificare le informazioni pdt paypal.CURL Richiesta problema

Ho generato il mio modulo di prova e l'ho inviato. L'IT ha funzionato e ha restituito anche le informazioni.

Ho provato la stessa cosa facendo richiesta di arricciatura. Ma la mia richiesta è di ritornare vuota per me.

mia forma mockup:

<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> 

mio CURL Codice 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:

ON tracking error ricciolo ho trovato seguente messaggio:

SSL: nome soggetto certificato 'www.sandbox.paypal.com' non corrisponde destinazione nome host 'sandbox.paypal.com'

+0

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

+0

KoolKabin; si prega di aggiornare questa domanda se abbiamo contribuito alla vostra soluzione. – Robert

risposta

8

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

Motivo: il certificato per www.sandbox.paypal.com non è valido per sandbox.paypal.com.
Effettua lo stesso cambiamento anche nell '"azione" del modulo.

+0

Questo è genio! – almaruf

0

inviarlo come stringa:

$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

no luck ......... – KoolKabin

6

dovete dire non curl per verificare il certificato SSL. Questo può essere fatto impostando un'opzione cURL:

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 

Maggiori informazioni qui:

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

+1

Non sempre è sufficiente. In alcuni Envs, devi disabilitare anche CURLOPT_SSL_VERIFYHOST. –

2

curl_setopt ($ ch, CURLOPT_SSL_VERIFYPEER, 0);

benché quanto sopra funziona, è sconsigliato.

come disse Robert

Cambio:

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

A:

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

21

In effetti, è possibile disattivare solo la verifica HOST peer. In alcuni PHP versione/cURL, semplicemente disabilitando PEER non è sufficiente:

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); 

Dalla documentazione:

CURLOPT_SSL_VERIFYHOST: 1 per verificare l'esistenza di un nome comune nella il certificato SSL peer. 2 per verificare l'esistenza di un nome comune e verificare che corrisponda al nome host fornito. Negli ambienti di produzione il valore di questa opzione deve essere mantenuto a 2 (valore predefinito ).

Problemi correlati