卷曲沙盒PayPal php


Curl sandbox paypal php

我打电话给沙盒进行购买。一旦它验证数据来自带有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);