0

这是我第一次使用 BetFair 的 SOAP API,我创建了一个 XML 文件和一个将调用该文件的文件。我不明白如何调用它并获得输出。我在下面创建了 XML 文件:

<?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>

现在要调用这个文件,我还创建了一个 php 文件来执行此操作。必发已为登录 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);
?>

我不知道为什么它不起作用;你能帮我解决这个问题吗?先感谢您。

4

1 回答 1

1

我会避免使用专用的 SOAP 库;根据我的经验,由于不同服务器实现 SOAP 规范的方式不一致,它们通常不起作用。改用简单的 HTTP/HTTPS 库,带有以下标头

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

和以下有效负载(假设您使用的是免费 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>

在我看来,您为登录元素使用了错误的命名空间;应该是 ' https://api.betfair.com/ ..' 而不是 ' http://www.betfair.com/ ..'。

祝你好运。

于 2013-06-23T13:05:36.480 回答