【问题标题】:Ebay Api, getOrders. Can't get buyer email易趣 Api,获取订单。收不到买家邮箱
【发布时间】:2016-01-21 09:00:26
【问题描述】:

大家。

对 ebay 交易 api 有疑问。

我正在尝试获取授权用户的所有订单。 我正在使用 PHP 开发我的 Web 应用程序。

所以,我使用这个 sdk: https://github.com/davidtsadler/ebay-sdk-php

我正在使用 getOrders 方法获取列表:

http://developer.ebay.com/devzone/xml/docs/Reference/ebay/GetOrders.html

这是我的代码示例:

public function getOrders(){
        $service = $this->getTradingService();

        $args = array(
            //"OrderStatus"   => "Completed",
            "OrderStatus"   => "All",
            "SortingOrder"  => "Ascending",
            "OrderRole"     => "Seller",

            //"CreateTimeFrom"   => new \DateTime('2015-01-01'),
            "CreateTimeFrom"   => new \DateTime('2000-01-01'),
            "CreateTimeTo"   => new \DateTime(),
        );

        $request = new Types\GetOrdersRequestType($args);
        $request->RequesterCredentials = new Types\CustomSecurityHeaderType();
        $request->RequesterCredentials->eBayAuthToken = $this->userToken;
        $request->IncludeFinalValueFee = true;
        $request->Pagination = new Types\PaginationType();
        $request->Pagination->EntriesPerPage = 100;
        $pageNum = 1;

        $orders = [];

        do {
            $request->Pagination->PageNumber = $pageNum;

            $response = $service->getOrders($request);

            if (isset($response->Errors)) {

                $message = '';

                foreach ($response->Errors as $error) {
                    $message .= $error->ShortMessage;
                }

                throw new Exception($message);
            }

            if ($response->Ack !== 'Failure' && isset($response->OrderArray)) {
                foreach ($response->OrderArray->Order as $order) {
                    $orders[] = $order->toArray();
                }
            }

            $pageNum += 1;
        }
        while(isset($response->OrderArray) && $pageNum <= $response->PaginationResult->TotalNumberOfPages);

        return $orders;
}

它对我来说很好,除了一个问题。 我无法收到买家电子邮件。

$orders[0]['ShippingAddress']['ExternalAddressID'] 

是空的。

$orders[0]['TransactionArray']['Transaction'][0]['Buyer']['Email']

是字符串值“无效请求”

如果有人知道如何获取买家电子邮件。

或者只是在一个请求中获取有关许多用户的信息(这样我就可以简单地合并它们)。

更新:

也尝试在没有 SDK 的情况下做同样的事情。

public function getOrders2(){
        $xml = '<?xml version="1.0" encoding="utf-8"?>
                <GetOrdersRequest xmlns="urn:ebay:apis:eBLBaseComponents">
                  <CreateTimeFrom>2000-01-01T00:00:00</CreateTimeFrom>
                  <CreateTimeTo>2015-10-22T00:00:00</CreateTimeTo>
                  <IncludeFinalValueFee>true</IncludeFinalValueFee>
                  <OrderRole>Seller</OrderRole>
                  <OrderStatus>All</OrderStatus>
                  <DetailLevel>ReturnAll</DetailLevel>
                  <RequesterCredentials>
                    <eBayAuthToken>' . $this->userToken . '</eBayAuthToken>
                  </RequesterCredentials>
                </GetOrdersRequest>';

        $url = 'https://api.ebay.com/ws/api.dll';
        $results = $this->sendPostRequest($xml,$url);
        $results = new SimpleXMLElement($results);
        return $results;
    }

遇到同样的问题。

谢谢

【问题讨论】:

  • 试过GetUser Api方法,也收不到邮件。改为获取无效的请求字符串
  • 大约 5% 的时间我也会收到一个空的电子邮件字段。如果您这样做是为了联系买家,一种解决方法是使用 AddMemberMessageAAQToPartner 调用
  • 我收到任何订单的空电子邮件。但订单大约在 1 年前完成。
  • 也许是因为这个。我只需要将订单导入我的 crm 系统,并且那里的电子邮件是必填字段。
  • 如果您需要某种电子邮件标识符,您可能需要使用 StaticAlias,它采用电子邮件地址的形式,例如 @members.ebay.com。

标签: php ebay-api


【解决方案1】:

需要将 SiteID 更改为 id User Registration。

$config = [
            'apiVersion' => Services\TradingService::API_VERSION,
            'siteId' => Constants\SiteIds::US, 
            'credentials' => [
                'appId'  => getenv('EBAY_APP_ID'),
                'certId' => getenv('EBAY_CERT_ID'),
                'devId'  => getenv('EBAY_DEV_ID')
            ],
            'sandbox' => false
        ];

【讨论】:

    【解决方案2】:

    如果订单太旧,则会导致无效请求(简单地说“此订单已有 XX 天,我们不会为其提供电子邮件地址)

    【讨论】:

      【解决方案3】:

      Ebay 会在下单 14 天后保留其用户的电子邮件信息。

      如果您使用他们的 API 来提取订单信息,之后您会得到:

      Email = '无效请求'

      示例响应...

      ...
      'TransactionArray': {'Transaction': [...
                                           'Buyer': {'Email': 'Invalid Request',
                                                     'UserFirstName': None,
                                                     'UserLastName': None},
      ...                             
      

      要做的是

      1. 拉取之前的数据,然后
      2. 不要在后续数据拉取时更新订单电子邮件数据。

      我很难找到这一点。我不记得在 API 文档中阅读过相关内容。

      【讨论】:

        猜你喜欢
        • 2011-11-17
        • 2022-01-09
        • 2016-11-26
        • 2022-10-24
        • 2020-01-25
        • 2015-05-14
        • 1970-01-01
        • 2013-09-13
        • 2021-12-18
        相关资源
        最近更新 更多