Paypal PDT无法使用CURL

时间:2015-09-02 22:51:50

标签: php curl paypal

Paypal返回网站并提供交易ID,现在使用CURL发布它不起作用的数据,任何人都可以帮助我。它没有打印成功消息。我已经搜索了堆栈溢出,但仍然没有。

    $tx = $_GET['tx'];
            $ID = $_GET['cm'];
            $currency = $_GET['cc'];
            $identity = '0iMIW7w4OXAed9Tvz6l9fpUY8B-E_WtE3toU7sT5gIzDJc9uPUgt9sVCN30'; 


              // Further processing
              // Init cURL

                // Init cURL
                $request = curl_init();

                // Set request options
                $url = 'https://www.sandbox.paypal.com/cgi-bin/webscr';
                $fields = array(    
                    'cmd' => '_notify-synch',
                    'tx' => $tx,
                    'at' => $identity,
                );
                curl_setopt($request,CURLOPT_URL, $url);
                curl_setopt($request,CURLOPT_POST, count($fields));
                curl_setopt($request,CURLOPT_POSTFIELDS, http_build_query($fields));
                curl_setopt($request,CURLOPT_RETURNTRANSFER, TRUE);
                curl_setopt($request,CURLOPT_HEADER, FALSE);

                // Execute request and get response and status code
                $response = curl_exec($request);
                $status   = curl_getinfo($request, CURLINFO_HTTP_CODE);

                // Close connection
                curl_close($request);

1 个答案:

答案 0 :(得分:3)

我看不到“成功消息” - 也没有任何尝试在卷曲请求之后输出任何东西,唯一令我震惊的事情 - 其他人可能不同意 - 是选项中没有任何内容专门处理https通信根据我的经验,这需要设置其他选项。我之前没有处理过PayPal api,所以这可能没什么用,但是......

尝试下载cacert.pem的副本 - 谷歌是你的朋友。

<?php
    $tx = $_GET['tx'];
    $ID = $_GET['cm'];
    $currency = $_GET['cc'];
    $identity = '0iMIW7w4OXAed9Tvz6l9fpUY8B-E_WtE3toU7sT5gIzDJc9uPUgt9sVCN30';

    /* Use the full path to your own cacert.pem, download from the interwebs if you do not have a copy */
    $cacert = 'c:/wwwroot/cacert.pem'; 

    $url = 'https://www.sandbox.paypal.com/cgi-bin/webscr';
    $fields = array(    
        'cmd'   => '_notify-synch',
        'tx'    => $tx,
        'at'    => $identity,
    );

    $request = curl_init();
    curl_setopt($request,CURLOPT_URL, $url);

    if( parse_url( $url,PHP_URL_SCHEME )=='https' ){
        curl_setopt( $request, CURLOPT_SSL_VERIFYPEER, FALSE ); /* set to true once you get this working */
        curl_setopt( $request, CURLOPT_SSL_VERIFYHOST, 2 );
        curl_setopt( $request, CURLOPT_CAINFO, realpath( $cacert ) );
    }


    /* this should be true or false not count($fields): in this case true*/
    /*curl_setopt($request,CURLOPT_POST, count( $fields ) );*/
    curl_setopt($request,CURLOPT_POST, true );
    curl_setopt($request,CURLOPT_POSTFIELDS, http_build_query( $fields ) );
    curl_setopt($request,CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($request,CURLOPT_HEADER, FALSE);

    /* Quite often requests get rejected for no useragent */
    curl_setopt($request,CURLOPT_USERAGENT, 'paypal-mozilla-chrome-useragent' );
    curl_setopt($request, CURLINFO_HEADER_OUT, TRUE );


    $response = curl_exec($request);
    $status   = curl_getinfo($request, CURLINFO_HTTP_CODE);

    curl_close($request);
    /* See what the curl request has retrieved */
    echo '<pre>',print_r( $response, true ),$status,'</pre>';
?>