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.
I think REST API and Power BI can easily solve complex IT problems.
ReplyDeletePowerbi Read Rest
Due to the rapid increase in eCommerce marketing, the overall economy has increased over the past time. Along with this crucial time, online growth for Magento eCommerce development became more important. In short, Adobe sensei revealed new product recommendations for Artificial intelligence (AI) as well as machine level language to customers, including businesses.
ReplyDeleteThank you, for sharing this information by this Post, it’s really very helpful post.
ReplyDeletePhp Web Development Company Bangalore | Ecommerce Website Designer India | Internet Marketing Company in Bangalore | Magento Website Developer In India
How can I create order using 3rd party payment Gateways like Payu, Paytm, RazorPay etc. and then how to handle the payment flow using rest apis.
ReplyDeleteThank you for sharing such useful information. I really enjoyed while reading your article and it is good to know the latest updates. Do post more. And also read about Magento 2 Development Company
ReplyDeleteHi I have question since one of my magento project is using 2.1. What if I am redirecting user to collect payment from payment gateway. I believe in that scenario order is should be in pending state and then once completed should again update order status. What are the steps for it.
ReplyDelete