使用PHP获取TransactionDetails PayPal SOAP API

使用PHP获取TransactionDetails PayPal SOAP API,php,soap,paypal,Php,Soap,Paypal,我被要求使用交易ID通过PayPal API检索买家的电子邮件地址。我可以看到我可以使用GetTransactionDetails函数来实现这一点 我已经设法使用SOAP提供的凭据登录,但是当涉及到运行GetTransactionDetails时,我会出错 这是我的密码: $user = "XXXXXX"; $pass = "XXXXXX"; $sign = "XXXXXX"; $socket_context = stream_context_create(array('http' =>

我被要求使用交易ID通过PayPal API检索买家的电子邮件地址。我可以看到我可以使用GetTransactionDetails函数来实现这一点

我已经设法使用SOAP提供的凭据登录,但是当涉及到运行GetTransactionDetails时,我会出错

这是我的密码:

$user = "XXXXXX";
$pass = "XXXXXX";
$sign = "XXXXXX";

$socket_context = stream_context_create(array('http' => array('protocol_version'  => 1.0)));
$client = new SoapClient("https://www.paypal.com/wsdl/PayPalSvc.wsdl", array('exceptions' => 0,'stream_context' => $socket_context,'trace' => 1)); 

$params = array(
    "Username" => $user, 
    "Password" => $pass, 
    "Signature" => $sign);

$credentials = new stdClass();
$credentials->Credentials = new SoapVar(
                            $params, 
                            SOAP_ENC_OBJECT, 
                            'Credentials');

$headers = new SoapVar(
           $credentials, 
           SOAP_ENC_OBJECT, 
           'CustomSecurityHeaderType', 
           'urn:ebay:apis:eBLBaseComponents');

$client->__setSoapHeaders(
         new SoapHeader(
             'urn:ebay:api:PayPalAPI', 
             'RequesterCredentials', 
             $headers)
         );

if (is_soap_fault($credentials)) {
    print "SOAP Fault: $credentials->faultcode, $credentials->faultstring<br />";
} else {
    print "logged in";
}

$args = array(
        "Version" => "124.0", 
        "TransactionID" => "12345ABCDE"); 
$GetTransactionDetailsRequest = new stdClass();
$GetTransactionDetailsRequest->GetTransactionDetailsRequest = new SoapVar(
                               $args, 
                               SOAP_ENC_OBJECT, 
                               'GetTransactionDetailsRequestType', 
                               'urn:ebay:api:PayPalAPI');
$params = new SoapVar(
          $GetTransactionDetailsRequest, 
          SOAP_ENC_OBJECT, 
          'GetTransactionDetailsRequest');
$result = $client->GetTransactionDetails($params);
print "<pre>";
print_r($result);
print "</pre>";
它失败的线路是:

$client->__setLocation('https://api-3t.paypal.com/2.0/');
我以前从未使用过PayPal API,我从几个不同的示例中提取了代码,所以如果有人知道更好的方法,那就太好了

注:

  • 我已经准备好了登录详细信息、文件位置和TransactionID 对于这个职位
  • 真正的TransactionID是正确的,我已经在PayPal中仔细检查过了 直接地
  • 版本号来自WSDL(它在 (开始)
  • 我只添加了$socket\u上下文,因为没有它,它会返回 说“获取http头时出错”

经过大量挖掘,最终证明API默认了沙盒端点!在调用SoapClient之后,我已将以下代码添加到脚本中:

现在它工作了

$result = $client->GetTransactionDetails($params);
$client->__setLocation('https://api-3t.paypal.com/2.0/');