Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 83
  • Last Modified:

Symfony2 > Accept incomming XML connection

I am busy implementing a third-party credit card payment API (paygate.co.za payXML) and the API submits an XML string to a URL that I specify, which I have set up to a route that calls a Controller function. I am not sure exactly how the API sends the XML string back, but it does not look like it is a normal POST.

Inside the controller function (which I have set up to catch the XML post) I have a set a up a test that writes "TEST" to a file. When I run the controller function manually by browsing the the route, then "TEST" gets written to the file. However, when I try to execute the controller function by initiating a curl_exec() to the route (submitting an XML string) nothing happens, the file remains blank so I am assuming that the controller function does not execute.

I have ensured that the URL I am submitting to via cURL is correct. I have also ensured that the route is not behind a firewall and is publically accessible without requiring authentication.

curl_error($oCurl); is empty and when I try print curl_exec($oCurl); the controller function [in which I execute the curl_exec()] never stops running.

Code extract from the controller function (which attempts to execute the other controller function by initiating a cURL connection to its route):

$url = "http://localhost:90/pmb/web/app_dev.php/payNotify";

$xml = <<<XML
<?xml version="1.0" encoding="utf-8"?>  
<test>
    <subtest id="test">Test</subtest>
</test>
XML;

    $headers = array(
        "Content-type: text/xml",
        "Content-length: " . strlen($xml),
        "Connection: close",
    );

    $oCurl = curl_init(); 
    curl_setopt($oCurl, CURLOPT_URL,$url);
    curl_setopt($oCurl, CURLOPT_SSL_VERIFYPEER, false); 
    curl_setopt($oCurl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($oCurl, CURLOPT_TIMEOUT, 120);
    curl_setopt($oCurl, CURLOPT_POST, 1);
    curl_setopt($oCurl, CURLOPT_POSTFIELDS, $xml);
    curl_setopt($oCurl, CURLOPT_HTTPHEADER, $headers);

    $response = curl_exec($oCurl); 
    if(curl_errno($oCurl))
        print curl_error($oCurl);
    else
        curl_close($oCurl);
    die("Testing");

Open in new window


Is there anything that I need to set up and in Symfony in order to accept a connection of this nature and route it to the required Controller function? Also, after I have succeeded in getting my Controller function to accept the connection? How would I access the incomming XML string?
0
Magnanimity0
Asked:
Magnanimity0
1 Solution
 
hieloCommented:
I suspect you need to read the data from php://input - refer to:
http://www.php.net/manual/en/reserved.variables.httprawpostdata.php#94584

If problems persist, try  "Content-type: text/plain" instead.
0

Featured Post

Free Tool: ZipGrep

ZipGrep is a utility that can list and search zip (.war, .ear, .jar, etc) archives for text patterns, without the need to extract the archive's contents.

One of a set of tools we're offering as a way to say thank you for being a part of the community.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now