-
Notifications
You must be signed in to change notification settings - Fork 18
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Supplier APIs not working #10
Comments
Could you please give some details on the problem or problems you're encountering? This library is not yet stable (we're still on major version 0), so there are definitely still issues to be worked out. I don't have any Supplier credentials on Walmart, so there are likely to be issues with that part of the codebase, since I haven't been able to test any of it. |
This is not important, the main error lies in the subsequent interface signature, which is still calling the verification of the Market. After slightly modifying the parameters, the verification signature still cannot pass. The signature method here is different from the request address and the Market interface. I am currently running out of time to verify and refactor the project. Our old code is still working properly, although it may appear different from the latest documentation. The following are the methods we can currently request to successfully obtain an order. Is there any reference value class WalmartSupplier
{
private $url = 'https://api-gateway.walmart.com/v3/';
private string $consumerId;
private string $privateKey;
public function __construct($consumerId, $privateKey)
{
$this->consumerId = $consumerId;
$this->privateKey = $privateKey;
}
public function listOrder($params)
{
$timestamp = time() * 1000;
$url = $this->url . 'orders?' . http_build_query($params);
$signature = $this->GetWalmartAuthSignature($url, 'GET', $timestamp);
$headers = [
'WM_QOS.CORRELATION_ID: ' . mt_rand(),
'WM_SVC.NAME: Drop Ship Vendor Services',
'WM_SEC.TIMESTAMP: ' . $timestamp,
'WM_SEC.AUTH_SIGNATURE: ' . $signature,
'WM_CONSUMER.ID: ' . $this->consumerId,
'WM_CONSUMER.CHANNEL.TYPE: ' . WALMART_CHANNEL_TYPE, // WM_CONSUMER.CHANNEL.TYPE
'Content-Type:application/x-www-form-urlencoded',
'Accept:application/json'
];
$curl = curl_init();
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HEADER, false);
// curl_setopt($curl, CURLOPT_VERBOSE, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($curl, CURLOPT_POST, 0);
//curl_setopt ( $curl, CURLOPT_POSTFIELDS, 'grant_type=client_credentials' );
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
return json_decode(curl_exec($curl));
}
public function GetWalmartAuthSignature($URL, $RequestMethod, $Timestamp)
{
$AuthData = "{$this->consumerId}\n{$URL}\n{$RequestMethod}\n$Timestamp\n";
// GET AN OPENSSL USABLE PRIVATE KEY FROMM THE WALMART SUPPLIED SECRET
$Pem = $this->ConvertPkcs8ToPem(base64_decode($this->privateKey));
$PrivateKey = openssl_pkey_get_private($Pem);
// SIGN THE DATA. USE sha256 HASH
$Hash = defined("OPENSSL_ALGO_SHA256") ? OPENSSL_ALGO_SHA256 : "sha256";
if (openssl_sign($AuthData, $Signature, $PrivateKey, $Hash)) {
return base64_encode($Signature);
}
return '';
}
private function ConvertPkcs8ToPem($der)
{
static $BEGIN_MARKER = "-----BEGIN PRIVATE KEY-----";
static $END_MARKER = "-----END PRIVATE KEY-----";
$key = base64_encode($der);
$pem = $BEGIN_MARKER . "\n";
$pem .= chunk_split($key, 64, "\n");
$pem .= $END_MARKER . "\n";
return $pem;
}
} $consumerId = '';
$privateKey = '';
$walmart = new WalmartSupplier($consumerId, $privateKey);
$params = [
'shipNode' => 43739,
'createdStartDate' => gmdate("Y-m-d\TH:i:s", (time() - 86400 * 4)),
'createdEndDate' => gmdate("Y-m-d\TH:i:s"),
];
$orderList = $walmart->listOrder($params); |
Give the latest version a try ( |
I only test function
{"list":{"meta":{"totalCount":10,"limit":1,"nextCursor":"?limit=1&hasMoreElements=true&soIndex=10&poIndex=1&sellerId=0&bizRole=DSV&createdStartDate=2023-08-14T03:10:19.746Z&createdEndDate=2023-08-21T03:10:19.746Z&shipNode=43739&vendorId=43739"},"elements":{"order":[{"purchaseOrderId":"11111111","customerOrderId":"22222222","customerEmailId":"email@relay.walmart.com","orderDate":1692537988575,"mart":"Walmart.com","shippingInfo":{"phone":"1234567890","estimatedDeliveryDate":1693259940000,"estimatedShipDate":1692669600000,"methodCode":"Standard","postalAddress":{"name":"name data","address1":"address data","address2":null,"city":"city data","state":"PA","postalCode":"17112","country":"USA","addressType":"RESIDENTIAL"}},"orderLines":{"orderLine":[{"lineNumber":"1","item":{"productName":"productName data","sku":"sku data"},"charges":{"charge":[{"chargeType":"PRODUCT","chargeName":"ItemPrice","chargeAmount":{"currency":"USD","amount":23.99},"tax":{"taxName":"Tax1","taxAmount":{"currency":"USD","amount":1.44}}}]},"orderLineQuantity":{"unitOfMeasurement":"EACH","amount":"1"},"statusDate":1692546988838,"orderLineStatuses":{"orderLineStatus":[{"status":"Created","subSellerId":null,"statusQuantity":{"unitOfMeasurement":"EACH","amount":"1"},"cancellationReason":null,"trackingInfo":null,"returnCenterAddress":null}]},"refund":null,"originalCarrierMethod":"67","fulfillment":{"fulfillmentOption":"DELIVERY","shipMethod":null,"storeId":null,"pickUpDateTime":1693259940000,"pickUpBy":null,"shippingProgramType":"THREE_TO_FIVE_DAY"}}]},"paymentType":["CREDITCARD"],"orderSummary":{"totalAmount":{"currencyAmount":32.41,"currencyUnit":"USD"},"orderSubTotal":[{"subTotalType":"PRODUCT","totalAmount":{"currencyAmount":30.97,"currencyUnit":"USD"}},{"subTotalType":"TAX","totalAmount":{"currencyAmount":1.44,"currencyUnit":"USD"}}]},"pickupPersons":[{"name":{"firstName":"firstName","lastName":"lastName"},"phone":{"completeNumber":"1234567890"}}],"pickupPerson":[{"name":{"firstName":"firstName","lastName":"lastName"},"phone":{"completeNumber":"1234567890"}}]}]}}} |
I think the code is in an incomplete state,and many methods cannot correspond to it ?
The text was updated successfully, but these errors were encountered: