Search code examples
phphttpshttp-headerspayflowpro

Creating HTTPS connection to Paypal server with PHP 5


I am trying to integrate payflow pro with an existing website.

There is no SDK for PHP, and integration with PHP will require the use of the Payflow HTTPS interface. The dev guide (https://cms.paypal.com/cms_content/AU/en_AU/files/developer/PP_WPPPF_HTTPSInterface_Guide.pdf) says that I will need to write code that creates an HTTPS connection to the Paypal servers. What method should I use to do this, and how can I submit HTTPS requests once a connection has been established?


Solution

  • I was finally able to find an example here: https://ppmts.custhelp.com/app/answers/detail/a_id/618

    <?
    $submiturl = "https://pilot-payflowpro.paypal.com/transaction:443/";
    
    $plist="USER=****&VENDOR=****&PARTNER=****&PWD=****&TENDER=C&" .
            "TRXTYPE=A&ACCT=5105105105105100&" .
            "EXPDATE=1209&STREET= 123 MainSt.&CVV2=123&AMT=1.00";
    
    $request_id = date('YmdGis');
    $user_agent = "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)";
    
    // Here's your custom headers; adjust appropriately for your setup:
    $headers[] = "Content-Type: text/namevalue";    // either text/namevalue or text/xml
    $headers[] = "X-VPS-Timeout: 30";
    $headers[] = "X-VPS-VIT-OS-Name: Linux";        // Name of your Operating System (OS)
    $headers[] = "X-VPS-VIT-OS-Version: RHEL 4";    // OS Version
    $headers[] = "X-VPS-VIT-Client-Type: PHP/cURL"; // Language you are using
    $headers[] = "X-VPS-VIT-Client-Version: 0.01";  // For your info
    $headers[] = "X-VPS-VIT-Client-Architecture: x86";  // For your info
    $headers[] = "X-VPS-VIT-Integration-Product: MyApplication";  // For your info,  application name
    $headers[] = "X-VPS-VIT-Integration-Version: 0.01"; // Application version
    $headers[] = "X-VPS-Request-ID: " . $request_id;
    
    $user_agent = "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)";
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $submiturl);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);
    curl_setopt($ch, CURLOPT_HEADER, 1); // tells curl to include headers in response
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // return into a variable
    curl_setopt($ch, CURLOPT_TIMEOUT, 45); // times out after 45 secs
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); // this line makes it work under https
    curl_setopt($ch, CURLOPT_POSTFIELDS, $plist); //adding POST data
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,  2); //verifies ssl certificate
    curl_setopt($ch, CURLOPT_FORBID_REUSE, TRUE); //forces closure of connection when done
    curl_setopt($ch, CURLOPT_POST, 1); //data sent as POST
    
    // $info = curl_getinfo($ch); //grabbing details of curl connection
    
    $result = curl_exec($ch);
    $headers = curl_getinfo($ch);
    curl_close($ch);
    echo $result;
    ?>