我打电话给沙盒进行购买。一旦它验证数据来自带有curl的PayPal,这些必须偿还数据,但我返回了SSL连接错误。他们已经改变了TLSv1_2但仍然把CURLOPT_SSLVERSION放在TLSv1_2对我不起作用。
$raw_post_data = file_get_contents('php://input');
// Los separamos en un array
$raw_post_array = explode('&',$raw_post_data);
// Separamos cada uno en un array de variable y valor
$myPost = array();
foreach($raw_post_array as $keyval){
$keyval = explode("=",$keyval);
if(count($keyval) == 2)
$myPost[$keyval[0]] = urldecode($keyval[1]);
}
// Nuestro string debe comenzar con cmd=_notify-validate
$req = 'cmd=_notify-validate';
if(function_exists('get_magic_quotes_gpc')){
$get_magic_quotes_exists = true;
}
foreach($myPost as $key => $value){
// Cada valor se trata con urlencode para poder pasarlo por GET
if($get_magic_quotes_exists == true && get_magic_quotes_gpc() == 1) {
$value = urlencode(stripslashes($value));
} else {
$value = urlencode($value);
}
//Añadimos cada variable y cada valor
$req .= "&$key=$value";
}
$ch = curl_init('https://www.sandbox.paypal.com/cgi-bin/webscr');
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_SSLVERSION, 'CURL_SSLVERSION_TLSv1_2');
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $req);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_FORBID_REUSE, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Connection: Close'));
if( !($res = curl_exec($ch)) ) {
// Ooops, error. Deberiamos guardarlo en algún log o base de datos para examinarlo después.
$info = curl_getinfo($ch);
if($info!=false){
$error="Problemas con la llamada a curl_exec ".curl_error($ch)." ".$info["ssl_verify_result"];
$ddf = fopen('error.log','a');
fwrite($ddf,"[".date("r")."] Error 4: $error'r'n");
fclose($ddf);
curl_close($ch);
exit;
}else{
$error="Problemas con la llamada a curl_exec ".curl_error($ch);
$ddf = fopen('error.log','a');
fwrite($ddf,"[".date("r")."] Error 4: $error'r'n");
fclose($ddf);
curl_close($ch);
exit;
}
}
curl_close($ch);
if (strcmp ($res, "VERIFIED") == 0) {
我做错了什么?我必须添加一些东西吗?谢谢。
CURLOPT_SSLVERSION需要一个整数,而不是一个字符串。有关详细信息,请参见 function.curl-setopt。基本上你会像这样设置CURLOPT_SSLVERSION:
curl_setopt($ch, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2);
或者,如果您的 PHP 版本未定义此 curl 常量(从 PHP 5.5.19 和 5.6.3 开始可用),您也可以使用整数值:
curl_setopt($ch, CURLOPT_SSLVERSION, 6);