Magento – Magento2.3.1 : Shipping address custom attribute value getting wrong format

checkoutcustom-attributesmagento2.3shipping-address

Ref url – Shipping address custom attribute value not getting in RateRequest object in Carrier Model in magento2.x

enter image description here
Above link in working perfect in magento2.2.x but not in magento2.3.1. I checked magento2.3.1 in they have changed something with custom_attribute code.

the issue is reproduce Step below
1. Add to cart product after going checkout Mobile Type select – Local
Estimation shipping rate is – 5 USD and address array passed like

estimate-shipping-methods - 
    address:{
    city: "GA"
    country_id: "US"
    custom_attributes: [0: {attribute_code: "mob_type", value: "Local"}]
    firstname: "Test"
    lastname: "Dev"
    postcode: "30049"

.....
  1. Once back to checkout cart page change postcode I am getting an error –

Error occurred during "custom_attributes" processing. A custom
attribute is specified with a missing attribute code. Verify the code
and try again.

I checked post address in estimate-shipping-methods api and found data like

estimate-shipping-methods - 
        address:{
        city: "GA"
        country_id: "US"
        custom_attributes: [0: {attribute_code: "0", value: {attribute_code: "mob_type", value: "Local"}}]
        firstname: "Test"
        lastname: "Dev"
        postcode: "30049"

    .....

both custom_attributes arrays is different – so i checked core code and found custom_attributes: [0: {attribute_code: "0", value: {attribute_code: "mob_type", value: "Local"}}] is worng. attribute_code: "0" is extra adding so How can i fix this issue anyone have idea?

Best Answer

This appears to be a core bug to which I've opened an issue on github https://github.com/magento/magento2/issues/27505.

Currently I am using the following hotfix to allow checkout.

Index: vendor/magento/module-checkout/view/frontend/web/js/model/address-converter.js
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- vendor/magento/module-checkout/view/frontend/web/js/model/address-converter.js  (revision 176ba2b75e443afb7f752ee28e7b751afec84bd3)
+++ vendor/magento/module-checkout/view/frontend/web/js/model/address-converter.js  (date 1585595509144)
@@ -64,6 +64,15 @@
                 addressData['custom_attributes'] = _.map(
                     addressData['custom_attributes'],
                     function (value, key) {
+
+                        var alreadyBeenMapped = value instanceof Object
+                            && value.hasOwnProperty('attribute_code')
+                            && value.hasOwnProperty('value');
+
+                        if (alreadyBeenMapped) {
+                            return value;
+                        }
+
                         return {
                             'attribute_code': key,
                             'value': value
Related Topic