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

问题描述

我编写了一个自定义应用程序,该应用程序的后端使用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","isRecommended": false,"additionalDescription": ""
      },{
        "id": "4dcbf24f457dd67d5f89bcf374e0bc9b","isRecommended": true,"additionalDescription": ""
      }
    ]
  }
],

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

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

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

解决方法

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