Magento 2 introduced rest api's to build mobile shopping cart. In this blog i am going to explain basic REST API CART flow so that magento developers are able to successfully place an order using REST API's.
STEP 1 - CREATE CART
/V1/carts/mine/
Method - POST
Response - Cart Id (For Eg - 39)
STEP 2 - GET CART DATA
/V1/carts/mine
Method - GET
Response - Cart Data
STEP 3 - Set Billing Address and Shipping Address To Cart
/V1/carts/mine/billing-address
METHOD - POST
REQUEST -
RESPONSE - Address Id (For Eg - 60)
STEP 4 - Add items to cart
/V1/carts/mine/items
METHOD - POST
REQUEST -
RESPONSE - Items are added in cart and their respective data is returned.
STEP 5 - Estimate Shipping Methods By Address Id
/V1/carts/mine/estimate-shipping-methods-by-address-id
METHOD - POST
REQUEST -
RESPONSE - Cart Shipping Methods are returned
STEP 6 - POST SHIPPING INFORMATION
/V1/carts/mine/shipping-information
METHOD - POST
REQUEST -
{
"addressInformation": {
"shipping_address": {
"id": 60,
"customer_id": 6,
"region": "Arkansas",
"region_id": 5,
"country_id": "US",
"street": [
"Whitefield,New York"
],
"company": "IBM",
"telephone": "94354545",
"postcode": "234533",
"city": "New York",
"firstname": " ",
"lastname": " ",
"prefix": "address_",
"region_code": "AR"
},
"billing_address": {
"id": 60,
"customer_id": 6,
"region": "Arkansas",
"region_id": 5,
"country_id": "US",
"street": ["Whitefield,New York"],
"company": "IBM",
"telephone": "94354545",
"postcode": "234533",
"city": "New York",
"firstname": " ",
"lastname": " ",
"prefix": "address_",
"region_code": "AR"
},
"shipping_method_code": "flatrate",
"shipping_carrier_code": "flatrate"
}
}
RESPONSE -
{
"payment_methods": [{
"code": "cashondelivery",
"title": "Cash On Delivery"
}],
"totals": {
"grand_total": 8.78,
"base_grand_total": 8.78,
"subtotal": 3.78,
"base_subtotal": 3.78,
"discount_amount": 0,
"base_discount_amount": 0,
"subtotal_with_discount": 3.78,
"base_subtotal_with_discount": 3.78,
"shipping_amount": 5,
"base_shipping_amount": 5,
"shipping_discount_amount": 0,
"base_shipping_discount_amount": 0,
"tax_amount": 0,
"base_tax_amount": 0,
"weee_tax_applied_amount": null,
"shipping_tax_amount": 0,
"base_shipping_tax_amount": 0,
"subtotal_incl_tax": 3.78,
"shipping_incl_tax": 5,
"base_shipping_incl_tax": 5,
"base_currency_code": "AED",
"quote_currency_code": "AED",
"items_qty": 2,
"items": [{
"item_id": 95,
"price": 1.89,
"base_price": 1.89,
"qty": 2,
"row_total": 3.78,
"base_row_total": 3.78,
"row_total_with_discount": 0,
"tax_amount": 0,
"base_tax_amount": 0,
"tax_percent": 0,
"discount_amount": 0,
"base_discount_amount": 0,
"discount_percent": 0,
"price_incl_tax": 1.89,
"base_price_incl_tax": 1.89,
"row_total_incl_tax": 3.78,
"base_row_total_incl_tax": 3.78,
"options": "[]",
"weee_tax_applied_amount": null,
"weee_tax_applied": null,
"name": "Refreshing"
}],
"total_segments": [{
"code": "subtotal",
"title": "Subtotal",
"value": 3.78
}, {
"code": "shipping",
"title": "Shipping & Handling (%1)",
"value": 5
}, {
"code": "tax",
"title": "Tax",
"value": 0,
"extension_attributes": {
"tax_grandtotal_details": []
}
}, {
"code": "grand_total",
"title": "Grand Total",
"value": 8.78,
"area": "footer"
}]
}
}
STEP 7 - POST PAYMENT INFORMATION
/V1/carts/mine/payment-information
METHOD - POST
NOTE - In Magento 2.0.5 after you hit Payment Information api url you might get "Shipping Address is not set" error. That happens because session data is not getting set with rest api. You need to create custom webservice url which updates shipping-method column value in quote_address table. This custom webservice url must be called before payment-information api url so that payment-information api url executes successfully.
In Magento 2.1 this issue is solved.
REQUEST -
{
"paymentMethod": {
"poNumber": "1",
"method": "cashondelivery"
},
"billingAddress": {
"id": 60,
"region": "Arkansas",
"regionId": 5,
"regionCode": "AR",
"countryId": "US",
"street": [
"Whitefield,New York"
],
"company": "IBM",
"telephone": "94354545",
"postcode": "234533",
"city": "New York",
"firstname": " ",
"lastname": " ",
"prefix": "address_",
"customerId": 6,
"email": " ",
"sameAsBilling": 1,
"customerAddressId": 0,
"saveInAddressBook": 1
}
}
RESPONSE - Order is created and order id is returned
So as you see these are the basic steps to create a successful order through REST API in Magento 2.
STEP 1 - CREATE CART
/V1/carts/mine/
Method - POST
Response - Cart Id (For Eg - 39)
STEP 2 - GET CART DATA
/V1/carts/mine
Method - GET
Response - Cart Data
STEP 3 - Set Billing Address and Shipping Address To Cart
/V1/carts/mine/billing-address
METHOD - POST
REQUEST -
RESPONSE - Address Id (For Eg - 60)
STEP 4 - Add items to cart
/V1/carts/mine/items
METHOD - POST
REQUEST -
RESPONSE - Items are added in cart and their respective data is returned.
STEP 5 - Estimate Shipping Methods By Address Id
/V1/carts/mine/estimate-shipping-methods-by-address-id
METHOD - POST
REQUEST -
RESPONSE - Cart Shipping Methods are returned
STEP 6 - POST SHIPPING INFORMATION
/V1/carts/mine/shipping-information
METHOD - POST
REQUEST -
{
"addressInformation": {
"shipping_address": {
"id": 60,
"customer_id": 6,
"region": "Arkansas",
"region_id": 5,
"country_id": "US",
"street": [
"Whitefield,New York"
],
"company": "IBM",
"telephone": "94354545",
"postcode": "234533",
"city": "New York",
"firstname": " ",
"lastname": " ",
"prefix": "address_",
"region_code": "AR"
},
"billing_address": {
"id": 60,
"customer_id": 6,
"region": "Arkansas",
"region_id": 5,
"country_id": "US",
"street": ["Whitefield,New York"],
"company": "IBM",
"telephone": "94354545",
"postcode": "234533",
"city": "New York",
"firstname": " ",
"lastname": " ",
"prefix": "address_",
"region_code": "AR"
},
"shipping_method_code": "flatrate",
"shipping_carrier_code": "flatrate"
}
}
RESPONSE -
{
"payment_methods": [{
"code": "cashondelivery",
"title": "Cash On Delivery"
}],
"totals": {
"grand_total": 8.78,
"base_grand_total": 8.78,
"subtotal": 3.78,
"base_subtotal": 3.78,
"discount_amount": 0,
"base_discount_amount": 0,
"subtotal_with_discount": 3.78,
"base_subtotal_with_discount": 3.78,
"shipping_amount": 5,
"base_shipping_amount": 5,
"shipping_discount_amount": 0,
"base_shipping_discount_amount": 0,
"tax_amount": 0,
"base_tax_amount": 0,
"weee_tax_applied_amount": null,
"shipping_tax_amount": 0,
"base_shipping_tax_amount": 0,
"subtotal_incl_tax": 3.78,
"shipping_incl_tax": 5,
"base_shipping_incl_tax": 5,
"base_currency_code": "AED",
"quote_currency_code": "AED",
"items_qty": 2,
"items": [{
"item_id": 95,
"price": 1.89,
"base_price": 1.89,
"qty": 2,
"row_total": 3.78,
"base_row_total": 3.78,
"row_total_with_discount": 0,
"tax_amount": 0,
"base_tax_amount": 0,
"tax_percent": 0,
"discount_amount": 0,
"base_discount_amount": 0,
"discount_percent": 0,
"price_incl_tax": 1.89,
"base_price_incl_tax": 1.89,
"row_total_incl_tax": 3.78,
"base_row_total_incl_tax": 3.78,
"options": "[]",
"weee_tax_applied_amount": null,
"weee_tax_applied": null,
"name": "Refreshing"
}],
"total_segments": [{
"code": "subtotal",
"title": "Subtotal",
"value": 3.78
}, {
"code": "shipping",
"title": "Shipping & Handling (%1)",
"value": 5
}, {
"code": "tax",
"title": "Tax",
"value": 0,
"extension_attributes": {
"tax_grandtotal_details": []
}
}, {
"code": "grand_total",
"title": "Grand Total",
"value": 8.78,
"area": "footer"
}]
}
}
STEP 7 - POST PAYMENT INFORMATION
/V1/carts/mine/payment-information
METHOD - POST
NOTE - In Magento 2.0.5 after you hit Payment Information api url you might get "Shipping Address is not set" error. That happens because session data is not getting set with rest api. You need to create custom webservice url which updates shipping-method column value in quote_address table. This custom webservice url must be called before payment-information api url so that payment-information api url executes successfully.
In Magento 2.1 this issue is solved.
REQUEST -
{
"paymentMethod": {
"poNumber": "1",
"method": "cashondelivery"
},
"billingAddress": {
"id": 60,
"region": "Arkansas",
"regionId": 5,
"regionCode": "AR",
"countryId": "US",
"street": [
"Whitefield,New York"
],
"company": "IBM",
"telephone": "94354545",
"postcode": "234533",
"city": "New York",
"firstname": " ",
"lastname": " ",
"prefix": "address_",
"customerId": 6,
"email": " ",
"sameAsBilling": 1,
"customerAddressId": 0,
"saveInAddressBook": 1
}
}
RESPONSE - Order is created and order id is returned
So as you see these are the basic steps to create a successful order through REST API in Magento 2.