xml — Как изменить количество продуктов с помощью Ebay API из Stack Overflow

Я пытаюсь сделать одну простую вещь. Я хочу изменить количество существующего товара с фиксированной ценой на Ebay, используя PHP. Это возможно? Я спрашивал об этом раньше и получал ответы, в которых мне предлагалось прочитать то или иное. Я не могу найти какие-либо реальные примеры кода, хотя. Я бы хотел, чтобы кто-то опубликовал один. Например, номер позиции ebay 123456789 имеет количество 50. Я хочу запустить некоторый php-код, чтобы изменить его на количество 20. Я хочу ввести номер позиции, новое количество и любые данные проверки ebay, необходимые в коде, и запустить его. Это все, что мне нужно.
Спасибо

3

Решение

Попробуйте это у меня работает

$feed = <<< EOD
<?xml version="1.0" encoding="utf-8"?>
<ReviseItemRequest xmlns="urn:ebay:apis:eBLBaseComponents">
<RequesterCredentials>
<eBayAuthToken>$eBay->auth_token</eBayAuthToken>
</RequesterCredentials>
<Item ComplexType="ItemType">
<ItemID>$itemid</ItemID>
<Quantity> int </Quantity>
</Item>
<MessageID>1</MessageID>
<WarningLevel>High</WarningLevel>
<Version>$eBay->api_version</Version>
</ReviseItemRequest>​
EOD;

$feed = trim($feed);
$site_id = 3;//3 For UK
$headers = array
(
'X-EBAY-API-COMPATIBILITY-LEVEL: ' . $this->api_version,
'X-EBAY-API-DEV-NAME: ' . $this->dev_id,
'X-EBAY-API-APP-NAME: ' . $this->app_id,
'X-EBAY-API-CERT-NAME: ' . $this->cert_id,
'X-EBAY-API-CALL-NAME: ' . $call_name,
'X-EBAY-API-SITEID: ' . $site_id,
);

// Send request to eBay and load response in $response
$connection = curl_init();
curl_setopt($connection, CURLOPT_URL, $this->api_endpoint);
curl_setopt($connection, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($connection, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($connection, CURLOPT_HTTPHEADER, $headers);
curl_setopt($connection, CURLOPT_POST, 1);
curl_setopt($connection, CURLOPT_POSTFIELDS, $feed);
curl_setopt($connection, CURLOPT_RETURNTRANSFER, 1);
$response = curl_exec($connection);
curl_close($connection);
4

Другие решения

Есть три варианта обновления живого товара на eBay.

Для быстрого обновления количества товара вы можете использовать ReviseInventoryStatus, так как он имеет некоторые преимущества перед другими.

Если вы согласны с использованием Composer в ваших проектах PHP, я разработал SDK это упрощает использование eBay API. В приведенном ниже примере показано, как использовать SDK с ReviseInventoryStatus. Комментарии в коде должны сказать вам, что вам нужно изменить, чтобы это работало.

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

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

// Your authorization token associated with the seller's account.
$authToken = 'abcd123';
// The ID of the item you wish to update (Must be a string).
$itemID = '123456789';
// The new quantity (Must be an integer and not a string!).
$quantity = 20;
// The numerical ID of the site that the item was listed on. For example the site ID for ebay.com is 0 and for ebay.co.uk it is 3. A complete list is available from eBay: http://developer.ebay.com/DevZone/XML/docs/Reference/ebay/types/SiteCodeType.html.
$siteID = '0';

$service = new Services\TradingService(array(
'authToken' => $authToken,
'apiVersion' => '899',
'siteId' => $siteID
));

$request = new Types\ReviseInventoryStatusRequestType();
$inventoryStatus = new Types\InventoryStatusType();
$inventoryStatus->ItemID = $itemID;
$inventoryStatus->Quantity = $quantity;
$request->InventoryStatus[] = $inventoryStatus;
$request->ErrorLanguage = 'en_US';
$request->WarningLevel = 'High';

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

if (isset($response->Errors)) {
foreach ($response->Errors as $error) {
printf("%s: %s\n%s\n\n",
$error->SeverityCode === Enums\SeverityCodeType::C_ERROR ? 'Error' : 'Warning',
$error->ShortMessage,
$error->LongMessage
);
}
}

if ($response->Ack !== 'Failure') {
foreach ($response->InventoryStatus as $inventoryStatus) {
printf("Quantity for [%s] is %s\n\n",
$inventoryStatus->ItemID,
$inventoryStatus->Quantity
);
}
}

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

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

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

// Your authorization token associated with the seller's account.
$authToken = 'abcd123';
// The ID of the item you wish to update (Must be a string).
$itemID = '123456789';
// The new quantity (Must be an integer and not a string!).
$quantity = 20;
// The numerical ID of the site that the item was listed on. For example the site ID for ebay.com is 0 and for ebay.co.uk it is 3. A complete list is available from eBay: http://developer.ebay.com/DevZone/XML/docs/Reference/ebay/types/SiteCodeType.html.
$siteID = '0';

$service = new Services\TradingService(array(
'authToken' => $authToken,
'apiVersion' => '899',
'siteId' => $siteID
));

$request = new Types\ReviseItemRequestType();
$item = new Types\ItemType();
$item->ItemID = $itemID;
$item->Quantity = $quantity;
$request->Item = $item;
$request->ErrorLanguage = 'en_US';
$request->WarningLevel = 'High';

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

if (isset($response->Errors)) {
foreach ($response->Errors as $error) {
printf("%s: %s\n%s\n\n",
$error->SeverityCode === Enums\SeverityCodeType::C_ERROR ? 'Error' : 'Warning',
$error->ShortMessage,
$error->LongMessage
);
}
}

if ($response->Ack !== 'Failure') {
printf("Quantity for [%s] has been updated\n\n", $itemID);
}
4

Вот готовый к тесту пример, просто замените номер товара и количество.

Этот PHP-код был сгенерирован из этот сайт нажав на кнопку «получить код php». SDK для PHP также можно скачать там.

require_once 'EbatNs_Session.php';
require_once 'EbatNs_Logger.php';
require_once 'EbatNs_ServiceProxy.php';
require_once 'EbatNs_Session.php';
require_once 'EbatNs_DataConverter.php';

$session = new EbatNs_Session();
$session->setSiteId(0);
$session->setUseHttpCompression(1);
$session->setAppMode(0);
$session->setDevId(YOUR_DEV_ID_HERE);
$session->setAppId(YOUR_APP_ID_HERE);
$session->setCertId(YOUR_CERT_ID_HERE);
$session->setRequestToken(YOUR_TOKEN_HERE);
$session->setTokenUsePickupFile(false);
$session->setTokenMode(true);

require_once 'EbatNs_ServiceProxy.php';
$proxy = new EbatNs_ServiceProxy($session, 'EbatNs_DataConverterUtf8');

require_once 'ReviseInventoryStatusRequestType.php';
$reviseinventorystatusrequest = new ReviseInventoryStatusRequestType();
$inventorystatus = new InventoryStatusType();
$reviseinventorystatusrequest->addInventoryStatus($inventorystatus);
$inventorystatus->setItemID("YOUR ITEM ID");
$inventorystatus->setQuantity("YOUR QUANTITY");
$reviseinventorystatusrequest->setErrorLanguage("en_US");
$reviseinventorystatusrequest->setVersion("899");
$reviseinventorystatusrequest->setWarningLevel("High");

$response = $proxy->ReviseInventoryStatus($reviseinventorystatusrequest);
1
По вопросам рекламы [email protected]