示例#1
0
 /**
  * 抓取一段时间内的订单
  * @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)
示例#6
0
 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));
     }
 }