2016-03-15 2 views
0

Я использую https://github.com/davidtsadler/ebay-sdk-php, неофициальный PHP SDK для eBay.Обработка уведомлений ebay-sdk-php

Это большой вклад сообщества, хотя есть ограниченная документация, которую мне удалось сделать больше всего.

Я собираюсь в кругах с уведомлениями, в частности уведомлениями «FixedPriceTransaction». Мне удалось подписаться на уведомления и отправить запрос, чтобы убедиться, что подписка была правильно создана.

К сожалению, я не могу решить, какой метод использовать, когда уведомление отправляется eBay для его обработки. Может ли кто-нибудь пролить свет?

ответ

5

Полное раскрытие: Я разработчик службы уведомлений в eBay SDK

eBay является не то, что официально поддерживается SDK, как это область из API, что я не знаком, но я постараюсь ответить на ваш вопрос как можно лучше.

Как я понимаю, в уведомлениях платформы eBay есть две части.

  1. Вы сообщаете eBay, которые пользователь уведомления вас интересует.
  2. платформы eBay по Уведомления затем асинхронно раздвигает уведомлений на месте доставки (который обычно является URL под доменом, который вы контролируете.)

Первая часть должна быть возможна с SDK, поскольку она просто включает отправку запроса на операцию SetNotificationPreferences. Похоже, вы уже разработали, как сделать эту часть, но я привел приведенный ниже пример только вовремя, чтобы это помогло. Я не пробовал код ниже, но он должен дать вам некоторое представление о том, что делать.

use \DTS\eBaySDK\Trading\Services; 
use \DTS\eBaySDK\Trading\Types; 

/** 
* Fill out $request according to your project needs. 
*/ 
$request = new Types\SetNotificationPreferencesRequest(); 
$request->UserDeliveryPreferenceArray = new Types\NotificationEnableArrayType(); 
$notification = new Types\NotificationEnableType(); 
$notification->EventEnable = 'Enable'; 
$notification->EventType = 'FixedPriceTransaction'; 
$request->UserDeliveryPreferenceArray->NotificationEnable[] = $notification; 

/** 
* Handle response according to your project needs. 
*/ 
$response = $service->SetNotificationPreferences($request); 
if ($response->Ack !== 'Failure') { 

} 

Вторая часть может быть возможна с помощью SDK, но это одна из областей, с которой у меня нет опыта. Насколько я понимаю, eBay отправит HTTP-запрос POST на URL-адрес, который вы контролируете. Вы несете ответственность за обработку данных, включенных в запрос, и ответ со стандартным статусом HTTP 200 OK. Я предполагаю, что данные POST включают в себя тело SOAP, к которому может обращаться скрипт PHP в виде строки. Внутри тела SOAP должен быть XML уведомления. До тех пор, пока у вас есть способ получить фактическую строку XML, которую отправляет eBay, вы можете использовать класс XmlParser. Этот класс использует SDK для преобразования ответа XML из API обратно в объект PHP. Это означает, что вы также можете сделать то же самое.

<?php 
require __DIR__.'/vendor/autoload.php'; 

use DTS\eBaySDK\Parser; 

/** 
* This string is not a complete example of what eBay could send. 
* A full example can be found at http://developer.ebay.com/Devzone/guides/ebayfeatures/Notifications/Notif-EndOfAuction.html#Example 
* It assumes that eBay sends a POST request to your sever and 
* that you can obtain the data as a string, E.g via $_POST[] or some other way. 
*/ 
$soap = <<<EOF_S 
<?xml version="1.0" encoding="UTF-8"?> 
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <soapenv:Header> 
    <ebl:RequesterCredentials soapenv:mustUnderstand="0" xmlns:ns="urn:ebay:apis:eBLBaseComponents" xmlns:ebl="urn:ebay:apis:eBLBaseComponents"> 
     <ebl:NotificationSignature xmlns:ebl="urn:ebay:apis:eBLBaseComponents">1w5Fdyr9V9ofTq67etR0lA==</ebl:NotificationSignature> 
    </ebl:RequesterCredentials> 
    </soapenv:Header> 
    <soapenv:Body> 
     <GetItemTransactionsResponse xmlns="urn:ebay:apis:eBLBaseComponents"> 
      <Item> 
       <ItemID>123456789</ItemID> 
      </Item> 
    </GetItemTransactionsResponse> 
    </soapenv:Body> 
</soapenv:Envelope> 
EOF_S; 

/** 
* Very simple method of extracting the XML from the string. 
*/ 
$matches = array(); 
preg_match('#<soapenv:Body>(.*?)</soapenv:Body>#s', $soap, $matches); 

$xml = $matches[1]; 

/** 
* The parser requires the full namespace and classname of the object that will be built from the XML. 
*/ 
$parser = new Parser\XmlParser('DTS\eBaySDK\Trading\Types\GetItemTransactionsResponseType'); 
/** 
* Pass the XML and the parser will return a PHP object. 
*/ 
$response = $parser->parse($xml); 
/** 
* Use the object. 
*/ 
echo $response->Item->ItemID; 
+0

Отлично! У меня есть что-то подобное уже для первой части, но вторая часть невероятно полезна. Очень признателен! – jdawg

+0

спасибо. можете ли вы сообщить мне, есть ли способ узнать, отправил ли ebay уведомление на url. Я добавляю сообщение журнала, но не получаю вызов. email devliery url works – coder771

+0

Я собирался отправить и опубликовать на github, но это полностью ответили на мой вопрос! – nikksan