deck john
deck john

Reputation: 647

soap api with betfair

It's my first time using the SOAP API by BetFair I have created one XML file and one file that will call that file. I am not understanding how can I call this and get an output. I have created the XML file below:

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
    <login xmlns="http://www.betfair.com/publicapi/v3/BFGlobalService/">
        <request>
            <locationId xmlns="">0</locationId>
            <username xmlns="">usrname</username>
            <password xmlns="">password</password>
            <productId xmlns="">18</productId>            
            <vendorSoftwareId xmlns="">0</vendorSoftwareId>
        </request>
    </login>
</soap:Body>
</soap:Envelope>

Now to call this file I have also created one php file to do this. BetFair has given this link for the login api: https://api.betfair.com/global/v3/BFGlobalService.wsdl

<?php
    $get_data = file_get_contents("http://pixelonsell.com/dev2/betfair/login.xml");
    $b = html_entity_decode($get_data);
    $data= urlencode($b);
    print_r($data);
    $client = new SoapClient("https://api.betfair.com/global/v3/BFGlobalService.wsdl");
    $result = $client->LoginReq($data);

    print_r($result);
?>

I don't know why it's not working; can you help me out with this? Thank you in advance.

Upvotes: 0

Views: 718

Answers (1)

Justin
Justin

Reputation: 4853

I would avoid using a dedicated SOAP library; in my experience they often don't work because of inconsistencies in the ways different servers implement the SOAP specification. Use a simple HTTP/HTTPS library instead, with the following headers

SOAPAction: urn:login 
Content-Length: #{myContentLength}
Content-Type: text/xml
User-Agent: #{myUserAgent}

and the following payload (assuming you're using the Free API):

<SOAP-ENV:Envelope xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <SOAP-ENV:Body>
    <m:login xmlns:m="https://api.betfair.com/global/v3/BFGlobalService">
      <m:request>
        <username>#{myUsername}</username>
        <password>#{myPassword}</password>
        <locationId>0</locationId>
        <vendorSoftwareId>0</vendorSoftwareId>
        <productId>82</productId>
      </m:request>
    </m:login>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

It looks to me like you're using the wrong namespace for the login element; should be 'https://api.betfair.com/..' not 'http://www.betfair.com/..'.

Good luck.

Upvotes: 1

Related Questions