如何在BigCommerce结帐时更新送货选项

时间:2020-09-29 13:38:02

标签: javascript rest e-commerce bigcommerce shipping-method

我编写了一个自定义应用程序,该应用程序的后端使用PHP服务器,前端使用JS的bigcommerce checkout / cart sdk。

基本上这是我想要做的:

  1. 使用我的php应用和第3方api检索费率(有效)
  2. 将所述费率显示为可选选项(有效)
  3. 更新结帐和寄售(此方法有效,但不是100%)
  4. 更新购物车的运输方式和总计(这就是我遇到的问题)

从PHP服务器获得费率后,我将动态构建列表的HTML。

我随机分配运输方式ID(因为我不知道如何生成这种方式,但它看起来是相当随机的)

当我单击运输选项时,此代码将运行(请注意,“ option”是foreach循环内的变量

console.dir(checkoutObj);
 
if(checkoutObj.consignments.length < 1){

    console.log('no consign');

} else {

    var selectedShipping = checkoutObj.consignments[0].selectedShippingOption;
    selectedShipping.cost = parseFloat(option['grandtotmrkup']);
    selectedShipping.description = option['CarrierName'] + '-' + option['CarrierService'];
    selectedShipping.id = this.value;
    selectedShipping.type = 'weight_based_shipping';
    checkoutObj.consignments[0].shippingCost = parseFloat(option['grandtotmrkup']);
    checkoutObj.shippingCostBeforeDiscount = parseFloat(option['grandtotmrkup']);
    checkoutObj.shippingCostTotal = parseFloat(option['grandtotmrkup']);

    console.log('updated checkout obj');
    console.dir(checkoutObj);

    var updated = service.updateCheckout(checkoutObj);
 
    console.log('updated');
    console.dir(state.data.getCheckout());
    console.log('updating consignment');
    console.dir(
service.updateConsignment({'id':consignID,'shippingOptionId':shippingMethodId})
    );
    console.dir(state.data.getConsignments());

当它运行service.updateConsignment时,对于对象的寄售部分,我得到以下响应:

"consignments": [
  {
    "id": "5f732875d039f",
    "shippingCost": 0,
    "handlingCost": 0,
    "couponDiscounts": [],
    "discounts": [],
    "lineItemIds": [
      "4f557702-4f9d-45ec-943a-c72ea963ccc7"
    ],
    "selectedShippingOption": {
      "id": "4dcbf24f457dd67d5f89bcf374e0bc9b",
      "type": "freeshipping",
      "description": "Free Shipping",
      "imageUrl": "",
      "cost": 0,
      "transitTime": "",
      "additionalDescription": ""
    },
    "shippingAddress": {
      "firstName": "1",
      "lastName": "1",
      "email": "",
      "company": "",
      "address1": "1 street",
      "address2": "",
      "city": "MITCHAM",
      "stateOrProvince": "Victoria",
      "stateOrProvinceCode": "VIC",
      "country": "Australia",
      "countryCode": "AU",
      "postalCode": "3132",
      "phone": "",
      "customFields": [],
      "shouldSaveAddress": true
    },
    "availableShippingOptions": [
      {
        "id": "9ba45e71fe66e1cd757f022dcae331b0",
        "type": "shipping_pickupinstore",
        "description": "Pickup In Store",
        "imageUrl": "",
        "cost": 0,
        "transitTime": "",
        "isRecommended": false,
        "additionalDescription": ""
      },
      {
        "id": "4dcbf24f457dd67d5f89bcf374e0bc9b",
        "type": "freeshipping",
        "description": "Free Shipping",
        "imageUrl": "",
        "cost": 0,
        "transitTime": "",
        "isRecommended": true,
        "additionalDescription": ""
      }
    ]
  }
],

我不确定是否是因为我的运送选项不在对象的“可用运送选项”部分中?

有人知道我可以在那里找到运输方式吗?还是这是由于我通过HTML动态添加方法引起的?

我是BC的新手,所以请原谅。

1 个答案:

答案 0 :(得分:0)

我认为您无法通过这种方式将付款选项注入到结帐中,我认为您需要查看在PHP应用程序中使用Shipping Methods API,然后再查看选项应该照常可用。