/** * 抓取一段时间内的订单 * @param datetime $starttime * @param datetime $endtime * @return array * @author lzx */ public function getOrderLists($starttime, $endtime) { $allResponse = array(); $service = new MarketplaceWebServiceOrders_Client(AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, APPLICATION_NAME, APPLICATION_VERSION, $this->config); $request = new MarketplaceWebServiceOrders_Model_ListOrdersRequest(); $request->setSellerId(MERCHANT_ID); $request->setMarketplaceId(MARKETPLACE_ID); $request->setCreatedAfter($starttime); $request->setCreatedBefore($endtime); $request->setOrderStatus(array("Unshipped", "PartiallyShipped")); $request->setMaxResultsPerPage(100); $response = $service->listOrders($request); $listOrdersResult = $response->getListOrdersResult(); $allResponse[] = $listOrdersResult; ######################### 分页抓取剩下的分页 start #################################### $while_index = 0; while ($listOrdersResult->isSetNextToken()) { $request = new MarketplaceWebServiceOrders_Model_ListOrdersByNextTokenRequest(); $request->setSellerId(MERCHANT_ID); $request->setNextToken($listOrdersResult->getNextToken()); $response = $service->ListOrdersByNextToken($request); $listOrdersResult = $response->getListOrdersByNextTokenResult(); $allResponse[] = $listOrdersResult; //ListOrders 和 ListOrdersByNextToken 操作的最大请求限额为 6 个防止意外循环 if ($while_index % 5 == 4) { sleep(61); //恢复速度1分钟 } //容错机制, 异常后自动弹出 if ($while_index > 50) { break; } $while_index++; } ######################### 分页抓取剩下的分页 end #################################### return $allResponse; }
/** * List Orders Action Sample * ListOrders can be used to find orders that meet the specified criteria. * * @param MarketplaceWebServiceOrders_Interface $service instance of MarketplaceWebServiceOrders_Interface * @param mixed $request MarketplaceWebServiceOrders_Model_ListOrders or array of parameters */ function invokeListOrders(MarketplaceWebServiceOrders_Interface $service, $request) { global $user, $account, $dbcon, $defaultstoreid; try { $response = $service->listOrders($request); //print_r($response); if ($response->isSetListOrdersResult()) { $listOrdersResult = $response->getListOrdersResult(); if ($listOrdersResult->isSetNextToken()) { $tokens = $listOrdersResult->getNextToken(); $gg = 0; while (true) { $request = new MarketplaceWebServiceOrders_Model_ListOrdersByNextTokenRequest(); $request->setSellerId(MERCHANT_ID); $request->setNextToken($tokens); $nexttokens = invokeListOrdersByNextToken($service, $request, $tokens); if (strlen($nexttokens) >= 10) { $nexttokens = invokeListOrdersByNextToken($service, $request, $nexttokens); $tokens = $nexttokens; } else { break; } $gg++; if ($gg >= 20) { break; } } echo '<br>' . $nexttokens . 'ggggggggggg'; } if ($listOrdersResult->isSetOrders()) { $orders = $listOrdersResult->getOrders(); $orderList = $orders->getOrder(); foreach ($orderList as $order) { $val = ''; if ($order->isSetSellerOrderId()) { // echo(" SellerOrderId\n"); // echo(" " . $order->getSellerOrderId() . "\n"); } if ($order->isSetPurchaseDate()) { $CreatedDate = strtotime($order->getPurchaseDate()); } if ($order->isSetLastUpdateDate()) { $PaidTime = strtotime($order->getLastUpdateDate()); } if ($order->isSetOrderStatus()) { if ($order->getOrderStatus() == 'Unshipped') { $orderstatus = 822; } } //comment by andy 20130518 if ($order->isSetAmazonOrderId() && $orderstatus == '822') { $val = $order->getAmazonOrderId(); $request = new MarketplaceWebServiceOrders_Model_ListOrderItemsRequest(); $request->setSellerId(MERCHANT_ID); $request->setAmazonOrderId($val); if ($val != '') { invokeListOrderItems($service, $request, $val, $account); } } if ($order->isSetFulfillmentChannel()) { // echo(" FulfillmentChannel\n"); // echo(" " . $order->getFulfillmentChannel() . "\n"); } if ($order->isSetSalesChannel()) { // echo(" SalesChannel\n"); // echo(" " . $order->getSalesChannel() . "\n"); } if ($order->isSetOrderChannel()) { // echo(" OrderChannel\n"); // echo(" " . $order->getOrderChannel() . "\n"); } if ($order->isSetShipServiceLevel()) { // echo(" ShipServiceLevel\n"); // echo(" " . $order->getShipServiceLevel() . "\n"); } $Street1 = ''; $Street2 = ''; $CityName = ''; $StateOrProvince = ''; if ($order->isSetShippingAddress()) { $shippingAddress = $order->getShippingAddress(); if ($shippingAddress->isSetName()) { $Name = mysql_escape_string($shippingAddress->getName()); } if ($shippingAddress->isSetAddressLine1()) { $Street1 = mysql_escape_string($shippingAddress->getAddressLine1()); } if ($shippingAddress->isSetAddressLine2()) { $Street2 = mysql_escape_string($shippingAddress->getAddressLine2()); } if ($shippingAddress->isSetAddressLine3()) { // echo(" " . $shippingAddress->getAddressLine3() . "\n"); } if ($shippingAddress->isSetCity()) { $CityName = mysql_escape_string($shippingAddress->getCity()); } if ($shippingAddress->isSetCounty()) { $CountryName = $shippingAddress->getCounty(); } if ($shippingAddress->isSetDistrict()) { // echo(" " . $shippingAddress->getDistrict() . "\n"); } if ($shippingAddress->isSetStateOrRegion()) { $StateOrProvince = $shippingAddress->getStateOrRegion(); } if ($shippingAddress->isSetPostalCode()) { $PostalCode = $shippingAddress->getPostalCode(); } if ($shippingAddress->isSetCountryCode()) { $Country = $shippingAddress->getCountryCode(); } if ($shippingAddress->isSetPhone()) { $Phone = $shippingAddress->getPhone(); } } if ($order->isSetOrderTotal()) { $orderTotal = $order->getOrderTotal(); if ($orderTotal->isSetCurrencyCode()) { $Currency = $orderTotal->getCurrencyCode(); } if ($orderTotal->isSetAmount()) { $AmountPaid = $orderTotal->getAmount(); } } if ($order->isSetNumberOfItemsShipped()) { // echo(" " . $order->getNumberOfItemsShipped() . "\n"); } if ($order->isSetNumberOfItemsUnshipped()) { // echo(" " . $order->getNumberOfItemsUnshipped() . "\n"); } if ($order->isSetPaymentExecutionDetail()) { $paymentExecutionDetail = $order->getPaymentExecutionDetail(); $paymentExecutionDetailItemList = $paymentExecutionDetail->getPaymentExecutionDetailItem(); foreach ($paymentExecutionDetailItemList as $paymentExecutionDetailItem) { // echo(" PaymentExecutionDetailItem\n"); if ($paymentExecutionDetailItem->isSetPayment()) { // echo(" Payment\n"); $payment = $paymentExecutionDetailItem->getPayment(); if ($payment->isSetCurrencyCode()) { // echo(" CurrencyCode\n"); // echo(" " . $payment->getCurrencyCode() . "\n"); } if ($payment->isSetAmount()) { // echo(" Amount\n"); // echo(" " . $payment->getAmount() . "\n"); } } if ($paymentExecutionDetailItem->isSetSubPaymentMethod()) { // echo(" SubPaymentMethod\n"); // echo(" " . $paymentExecutionDetailItem->getSubPaymentMethod() . "\n"); } } } if ($order->isSetPaymentMethod()) { //echo(" PaymentMethod\n"); //echo(" " . $order->getPaymentMethod() . "\n"); } if ($order->isSetMarketplaceId()) { //echo(" MarketplaceId\n"); // echo(" " . $order->getMarketplaceId() . "\n"); } if ($order->isSetBuyerEmail()) { // echo(" BuyerEmail\n"); // echo(" " . $order->getBuyerEmail() . "\n"); $Email = $order->getBuyerEmail(); } if ($order->isSetBuyerName()) { $UserID = mysql_escape_string($order->getBuyerName()); } if ($order->isSetShipmentServiceLevelCategory()) { //echo(" ShipmentServiceLevelCategory\n"); // echo(" " . $order->getShipmentServiceLevelCategory() . "\n"); } $addrecordnumber = $val; $Country_q = countryname_change($Country); $sql = "INSERT INTO `ebay_order` (`ebay_paystatus`,`ebay_ordersn` ,`ebay_tid` ,`ebay_ptid` ,`ebay_orderid` ,"; $sql .= "`ebay_createdtime` ,`ebay_paidtime` ,`ebay_userid` ,`ebay_username` ,`ebay_usermail` ,`ebay_street` ,"; $sql .= "`ebay_street1` ,`ebay_city` ,`ebay_state` ,`ebay_couny` ,`ebay_countryname` ,`ebay_postcode` ,`ebay_phone`"; $sql .= " ,`ebay_currency` ,`ebay_total` ,`ebay_status`,`ebay_user`,`ebay_shipfee`,`ebay_account`,`recordnumber`,`ebay_addtime`,`ebay_note`,`ebay_site`,`eBayPaymentStatus`,`PayPalEmailAddress`,`ShippedTime`,`RefundAmount`,`ebay_warehouse`,`order_no`)VALUES ('Complete','{$val}', '{$tid}' , '{$ptid}' , '{$orderid}' , '{$CreatedDate}' , '{$PaidTime}' , '{$UserID}' ,"; $sql .= " '{$Name}' , '{$Email}' , '{$Street1}' , '{$Street2}' , '{$CityName}','{$StateOrProvince}' , '{$Country}' , '{$Country_q}' , '{$PostalCode}' , '{$Phone}' , '{$Currency}' , '{$AmountPaid}' , '{$orderstatus}','{$user}','{$shipingfee}','{$account}','{$addrecordnumber}','{$mctime}','{$BuyerCheckoutMessage}','{$site}','{$eBayPaymentStatus}','{$PayPalEmailAddress}','{$ShippedTime}','{$RefundAmount}','{$defaultstoreid}','{$order_no}')"; $sg = "select * from ebay_order where ebay_ordersn ='{$val}' "; $sg = $dbcon->execute($sg); $sg = $dbcon->getResultArray($sg); if (count($sg) == 0) { $dbcon->execute($sql); addLog("ordersn:{$val} 添加成功。"); } else { addLog("ordersn:{$val} 在数据库中已经存在。"); } } } } //print_r($response);exit; } catch (MarketplaceWebServiceOrders_Exception $ex) { echo "Caught Exception: " . $ex->getMessage() . "\n"; echo "Response Status Code: " . $ex->getStatusCode() . "\n"; echo "Error Code: " . $ex->getErrorCode() . "\n"; echo "Error Type: " . $ex->getErrorType() . "\n"; echo "Request ID: " . $ex->getRequestId() . "\n"; echo "XML: " . $ex->getXML() . "\n"; print_r($ex); } }
/** * List Orders By Next Token * If ListOrders returns a nextToken, thus indicating that there are more orders * than returned that matched the given filter criteria, ListOrdersByNextToken * can be used to retrieve those other orders using that nextToken. * * @param mixed $request array of parameters for MarketplaceWebServiceOrders_Model_ListOrdersByNextToken request or MarketplaceWebServiceOrders_Model_ListOrdersByNextToken object itself * @see MarketplaceWebServiceOrders_Model_ListOrdersByNextTokenRequest * @return MarketplaceWebServiceOrders_Model_ListOrdersByNextTokenResponse * * @throws MarketplaceWebServiceOrders_Exception */ public function listOrdersByNextToken($request) { if (!$request instanceof MarketplaceWebServiceOrders_Model_ListOrdersByNextTokenRequest) { require_once dirname(__FILE__) . '/Model/ListOrdersByNextTokenRequest.php'; $request = new MarketplaceWebServiceOrders_Model_ListOrdersByNextTokenRequest($request); } $parameters = $request->toQueryParameterArray(); $parameters['Action'] = 'ListOrdersByNextToken'; $httpResponse = $this->_invoke($parameters); require_once dirname(__FILE__) . '/Model/ListOrdersByNextTokenResponse.php'; $response = MarketplaceWebServiceOrders_Model_ListOrdersByNextTokenResponse::fromXML($httpResponse['ResponseBody']); $response->setResponseHeaderMetadata($httpResponse['ResponseHeaderMetadata']); return $response; }
* Uncomment to try out Mock Service that simulates MarketplaceWebServiceOrders * responses without calling MarketplaceWebServiceOrders service. * * Responses are loaded from local XML files. You can tweak XML files to * experiment with various outputs during development * * XML files available under MarketplaceWebServiceOrders/Mock tree * ***********************************************************************/ // $service = new MarketplaceWebServiceOrders_Mock(); /************************************************************************ * Setup request parameters and uncomment invoke to try out * sample for List Orders By Next Token Action ***********************************************************************/ // @TODO: set request. Action can be passed as MarketplaceWebServiceOrders_Model_ListOrdersByNextToken $request = new MarketplaceWebServiceOrders_Model_ListOrdersByNextTokenRequest(); $request->setSellerId(MERCHANT_ID); // object or array of parameters invokeListOrdersByNextToken($service, $request); /** * Get List Orders By Next Token Action Sample * Gets competitive pricing and related information for a product identified by * the MarketplaceId and ASIN. * * @param MarketplaceWebServiceOrders_Interface $service instance of MarketplaceWebServiceOrders_Interface * @param mixed $request MarketplaceWebServiceOrders_Model_ListOrdersByNextToken or array of parameters */ function invokeListOrdersByNextToken(MarketplaceWebServiceOrders_Interface $service, $request) { try { $response = $service->ListOrdersByNextToken($request);
/************************************************************************ * Uncomment to try out Mock Service that simulates MarketplaceWebServiceOrders * responses without calling MarketplaceWebServiceOrders service. * * Responses are loaded from local XML files. You can tweak XML files to * experiment with various outputs during development * * XML files available under MarketplaceWebServiceOrders/Mock tree * ***********************************************************************/ // $service = new MarketplaceWebServiceOrders_Mock(); /************************************************************************ * Setup request parameters and uncomment invoke to try out * sample for List Orders By Next Token Action ***********************************************************************/ $request = new MarketplaceWebServiceOrders_Model_ListOrdersByNextTokenRequest(); $request->setSellerId(MERCHANT_ID); $request->setNextToken('<NEXT TOKEN>'); // @TODO: set request. Action can be passed as MarketplaceWebServiceOrders_Model_ListOrdersByNextTokenRequest // object or array of parameters invokeListOrdersByNextToken($service, $request); /** * List Orders By Next Token Action Sample * If ListOrders returns a nextToken, thus indicating that there are more orders * than returned that matched the given filter criteria, ListOrdersByNextToken * can be used to retrieve those other orders using that nextToken. * * @param MarketplaceWebServiceOrders_Interface $service instance of MarketplaceWebServiceOrders_Interface * @param mixed $request MarketplaceWebServiceOrders_Model_ListOrdersByNextToken or array of parameters */ function invokeListOrdersByNextToken(MarketplaceWebServiceOrders_Interface $service, $request)
public function test() { $this->load->config('config_mws_api'); $amazon_app = $this->config->item('amazon_app'); //var_dump($amazon_app); foreach ($amazon_app as $amazon) { $serviceUrl = $amazon['serviceUrl']; $amazon_api = array('ServiceURL' => $serviceUrl, 'ProxyHost' => null, 'ProxyPort' => -1, 'MaxErrorRetry' => 3); $all_order_id = array(); $service = new MarketplaceWebServiceOrders_Client($amazon['AWS_ACCESS_KEY_ID'], $amazon['AWS_SECRET_ACCESS_KEY'], $this->config->item('APPLICATION_NAME'), $this->config->item('APPLICATION_VERSION'), $amazon_api); $request = new MarketplaceWebServiceOrders_Model_ListOrdersRequest(); $request->setSellerId($amazon['MERCHANT_ID']); //$request->setCreatedAfter(new DateTime('2012-12-17 00:00:00', new DateTimeZone('UTC'))); $beginning_time = $this->order_model->get_amazon_import_beginning_time(); $end_time = date('Y-m-d H:i:s', mktime(substr($beginning_time, 11, 2) + 24, substr($beginning_time, 14, 2), substr($beginning_time, 17, 2), substr($beginning_time, 5, 2), substr($beginning_time, 8, 2), substr($beginning_time, 0, 4))); $startdate = strtotime($end_time); $enddate = strtotime(str_replace("Z", "", str_replace("T", " ", get_utc_time('-20 minutes')))); if ($enddate - $startdate <= 0) { $end_time = get_utc_time('-20 minutes'); } $end_time = str_replace("Z", "", str_replace("T", " ", $end_time)); echo "beginning_time[utc]:" . $beginning_time; echo "end_time[utc]:" . $end_time; //die(); //$request->setLastUpdatedAfter(new DateTime('2013-01-21 08:43:14', new DateTimeZone('UTC'))); //$request->setLastUpdatedBefore(new DateTime('2013-01-21 11:10:25', new DateTimeZone('UTC'))); $request->setLastUpdatedAfter(new DateTime($beginning_time, new DateTimeZone('UTC'))); $request->setLastUpdatedBefore(new DateTime($end_time, new DateTimeZone('UTC'))); $orderStatuses = new MarketplaceWebServiceOrders_Model_OrderStatusList(); $orderStatuses->setStatus(array('Unshipped', 'PartiallyShipped')); $request->setOrderStatus($orderStatuses); $marketplaceIdList = new MarketplaceWebServiceOrders_Model_MarketplaceIdList(); $marketplaceIdList->setId(array($amazon['MARKETPLACE_ID'])); $request->setMarketplaceId($marketplaceIdList); $orderids = $this->invokeListOrders($service, $request); $all_order_id = $orderids[1]; //var_dump($orderids);die(); $next_token = $orderids[0]; while ($next_token != '') { $request = new MarketplaceWebServiceOrders_Model_ListOrdersByNextTokenRequest(); $request->setSellerId($amazon['MERCHANT_ID']); $request->setNextToken($orderids[0]); $orderids = $this->invokeListOrdersByNextToken($service, $request); $next_token = $orderids[0]; $all_order_id = array_merge($all_order_id, $orderids[1]); //var_dump($orderids); } //var_dump($all_order_id); foreach ($all_order_id as $order_id) { $order_info = array(); $items = array(); $data = array(); $amazon_pdf_data = array(); $amazon_ack_failed_data = array(); $request = new MarketplaceWebServiceOrders_Model_GetOrderRequest(); $request->setSellerId($amazon['MERCHANT_ID']); $request->setAmazonOrderId(array($order_id)); // object or array of parameters $order_info = $this->invokeGetOrder($service, $request); //var_dump($order_info); $request = new MarketplaceWebServiceOrders_Model_ListOrderItemsRequest(); $request->setSellerId($amazon['MERCHANT_ID']); $request->setAmazonOrderId($order_id); // object or array of parameters $items = $this->invokeListOrderItems($service, $request); //var_dump($items); if (!isset($order_info['AmazonOrderId'])) { $this->log_report($order_id); $amazon_ack_failed_data = array('amazonorderid' => $order_id, 'sellerid' => $amazon['MERCHANT_ID']); if (!$this->order_model->check_amazon_ack_failed_exists($order_id)) { $this->order_model->add_amazon_ack_failed($amazon_ack_failed_data); } continue; } $data = $this->_make_common_order_list_data($order_info, $items); //var_dump($data); if ($this->order_model->check_exists('order_list', array('transaction_id' => $data['transaction_id']))) { echo $data['transaction_id'] . "存在\n"; /* $invoice_begin=2372; $invoice_id=$invoice_begin+$this->order_model->fetch_all_amazon_count()+1; $amazon_pdf_data=array( 'amazonorderid'=>$order_info['AmazonOrderId'], 'sellerid'=>$amazon['MERCHANT_ID'], 'invoice_id'=>$invoice_id, ); if(!$this->order_model->check_wait_create_amazon_pdf_exists($order_id)) { $this->order_model->add_wait_create_amazon_pdf($amazon_pdf_data); }*/ } else { $this->order_model->add_order($data); $invoice_begin = 2372; $invoice_id = $invoice_begin + $this->order_model->fetch_all_amazon_count() + 1; $amazon_pdf_data = array('amazonorderid' => $order_info['AmazonOrderId'], 'sellerid' => $amazon['MERCHANT_ID'], 'invoice_id' => $invoice_id); if (!$this->order_model->check_wait_create_amazon_pdf_exists($order_id) && $order_info['AmazonOrderId'] != '') { $this->order_model->add_wait_create_amazon_pdf($amazon_pdf_data); } echo $data['transaction_id'] . "保存成功\n"; } sleep(2); } $this->order_model->update_amazon_import_beginning_time(array('value' => $end_time)); } }