简体   繁体   English

Paypal PDT无法使用CURL

[英]Paypal PDT not working using CURL

Paypal returns to the site and gives the transaction ID, now using CURL to post data it just isnt working, can anyone help me. Paypal返回网站并提供交易ID,现在使用CURL发布数据它不起作用,任何人都可以帮助我。 It isnt printing the success message.i have searched stack overflow, and still nothing. 它不打印成功消息。我已经搜索了堆栈溢出,但仍然没有。

    $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);

I can see no "success message" - nor any attempt to output anything after the curl request, the only thing that struck me - and others may well disagree - is that there is nothing in the options to specifically deal with https communications which, in my experience, require other options to be set. 我看不到“成功消息” - 也没有任何尝试在卷曲请求之后输出任何内容,唯一让我感到惊讶的是 - 其他人可能不同意 - 是选项中没有任何内容专门处理https通信,其中根据我的经验,需要设置其他选项。 I've not dealt with the PayPal api before so this might provide nothing of use, but..... 我之前没有处理过PayPal api,所以这可能没什么用,但.....

try downloading a copy of cacert.pem - google is your friend. 尝试下载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>';
?>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM