2016-11-18 3 views
0

Я создаю приложение, которое поддерживает Woo-коммерцию. К настоящему моменту я могу показать список продуктов и доступ к продукту, но я не могу создать заказ.Параметры сериализации Javascript с массивами

Это функция, которая создает и Поста порядок:

this.order = function(products, address, tax, total){ 
    var dfd = $q.defer(); 
    var clientId = 2; 
    var items =[]; 
    for(var i = 0 ; i<products.length ; i++){ 
     var item = {product_id: products[i].id, 
        quantity: products[i].qty, 
        price: products[i].price, 
       }; 
     items.push(item); 
    } 

    $http({ 
    method: 'POST', 
    url: appConfig.DOMAIN_URL + '/wp-json/wc/v1/orders' , 
    headers: {'Content-Type': 'application/x-www-form-urlencoded'}, 
    paramSerializer: '$httpParamSerializerJQLike', 
    params: { 
      consumer_key: appConfig.KEY, 
      consumer_secret: appConfig.SECRET_KEY, 
      line_items: items, 
      customer_id: 1, 
      total: total, 
      status: 'completed', 
      shipping: { 
       first_name: address.full_name, 
       address_1: address.street, 
       city: address.city, 
       postcode: address.postal_code, 
       state: address.state 
      }, 
      shipping_lines: [ 
      { 
       method_id: 'flat_rate', 
       method_title: 'Flat Rate', 
       total: tax 
      } 
      ] 
     } 
    }) 
    .then(function(res){ 
     dfd.resolve(res); 
    }, function(error){ 
     dfd.reject(error); 
    }) 
    return dfd.promise; 
    } 

Response является:

{ 
    "code": "woocommerce_rest_required_product_reference", 
    "message": "Product ID or SKU is required", 
    "data": { 
     "status": 400 
    } 
} 

Params, кажется, там, когда я инспектировать с браузером:

Name Value 
consumer_key ck_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 
consumer_secret cs_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 
customer_id 1 
line_items[][price] 24490 
line_items[][product_id] 27 
line_items[][quantity] 1 
shipping_lines[][method_id] flat_rate 
shipping_lines[][method_title] Flat Rate 
shipping_lines[][total] 0 
status completed 
total 24490 

Я попробовал hardcoding и использовал те же данные из документации Woocommerce, но результат тот же.

С некоторыми комбинациями выбрасывается «идентификатор продукта», «требуемое количество» или «требуется SKU».

Пробовал с POSTMAN и заказом создавался без продуктов.

Любая помощь приветствуется

UPDATE

Я попытался комментируя эту строку:

paramSerializer: '$httpParamSerializerJQLike', 

А теперь порядок создается, но без каких-либо данных продуктов, только «не массив» Титулы были , поэтому im почти наверняка является проблемой форматирования ...

Пример объекта:

var data = { 
    payment_method: 'bacs', 
    payment_method_title: 'Direct Bank Transfer', 
    set_paid: true, 
    billing: { 
    first_name: 'John', 
    last_name: 'Doe', 
    address_1: '969 Market', 
    address_2: '', 
    city: 'San Francisco', 
    state: 'CA', 
    postcode: '94103', 
    country: 'US', 
    email: '[email protected]', 
    phone: '(555) 555-5555' 
    }, 
    shipping: { 
    first_name: 'John', 
    last_name: 'Doe', 
    address_1: '969 Market', 
    address_2: '', 
    city: 'San Francisco', 
    state: 'CA', 
    postcode: '94103', 
    country: 'US' 
    }, 
    line_items: [ 
    { 
     product_id: 93, 
     quantity: 2 
    }, 
    { 
     product_id: 22, 
     variation_id: 23, 
     quantity: 1 
    } 
    ], 
    shipping_lines: [ 
    { 
     method_id: 'flat_rate', 
     method_title: 'Flat Rate', 
     total: 10 
    } 
    ] 
}; 

ответ

0

Это был мой обходной путь:

$http({ 
    method: 'POST', 
    url: appConfig.DOMAIN_URL + '/wp-json/wc/v1/orders' , 
    //headers: {'Content-Type': 'application/x-www-form-urlencoded'}, 
    headers: {'Content-Type': 'application/json'}, 
    //paramSerializer: '$httpParamSerializerJQLike', 
    params: { 
      consumer_key: appConfig.KEY, 
      consumer_secret: appConfig.SECRET_KEY 
     }, 
    data: { 
     line_items: items, 
     customer_id: 1, 
     status: 'pending', 
     shipping: { 
      first_name: address.full_name, 
      address_1: address.street, 
      city: address.city, 
      postcode: address.postal_code, 
      state: address.state 
     }, 
     shipping_lines: [ 
     { 
      method_id: 'flat_rate', 
      method_title: 'Flat Rate', 
      total: tax 
     } 
     ] 
    } 
    }) 
    .then(function(res){ 
     dfd.resolve(res); 
    }, function(error){ 
     dfd.reject(error); 
    }) 
    return dfd.promise; 
    } 
}) 
; 

Не уверен, если это чистый способ передачи параметров, но я не мог понять, почему paramserializer не работает. Я взял код из других источников.

Надеюсь, это поможет

Смежные вопросы