Amazon Pay - Order Reference and Information about Shipping Addresses
![](../../../../resources/images/shoptype/demoshop.png)
After successful authorization, a buyer will be redirected to an order details page to enter all the information necessary for placing an order: address of shipment, payment method, delivery method and some calculations about taxes, possible discounts, delivery cost, etc.
Amazon Pay provides solutions for choosing shipping addresses and payment methods based on what the buyer previously used on Amazon. As addresses differ by country, the delivery method selection must be implemented by the shop and aligned with shipping address information.
Amazon provides two widgets for choosing shipment and payment information, they can be placed together on the same page or separately.
- Add the following widget on your page:
{{ render(path('amazonpay_checkout_widget')) }}
Configuration would be used from your current settings profile.
Place order button should look like this:
<a href="{{ path('amazonpay_confirm_purchase') }}" disabled="true" id="amazonpayPlaceOrderLink" class="button expanded __no-margin-bottom">Place order</a>
Both widgets are similar to the paybutton widget that we described earlier.
All necessary credentials have to be specified the same way and in order to retrieve the selected information, Amazon provides JavaScript callbacks.
The first of them to use is onOrderReferenceCreate, which provides an Amazon order reference ID.
This ID is a unique identifier of an order, created on Amazon's side and is required for Amazon Pay API calls.
Other important callbacks are onAddressSelect and onPaymentSelect. These callbacks are triggered after selecting shipment address information and payment method respectively. Callbacks are client side notifications informing that an event has happened.
Use the Amazon Pay API to retrieve data and run order operations.
Checkout Step Rendering
Since payment module is generic, PaymentController provides method getItems in order to extend display of items.
For example, in order to handle bundled products, follow these steps:
Create template on project level AmazonPay/Theme/default/payment/patials/checkout-item.twig:
{% if item.bundleProduct is defined %}
{% include '@checkout/checkout/partials/summary-item.twig' with {'item': item.bundleProduct, 'bundleItems' : item.bundleItems} %}
{% else %}
{% include '@checkout/checkout/partials/summary-item.twig' %}
{% endif %}
Extend AmazonPay/Controller/PaymentController and add the following method:
/**
* @param \Generated\Shared\Transfer\QuoteTransfer $quoteTransfer
*
* @return \ArrayObject|\Generated\Shared\Transfer\ItemTransfer[]
*/
protected function getCartItems(QuoteTransfer $quoteTransfer)
{
return $this->getFactory()->createProductBundleGrouper()->getGroupedBundleItems(
$quoteTransfer->getItems(),
$quoteTransfer->getBundleItems()
);
}
Add corresponding method to AmazonPayFactory:
/**
* @return \Spryker\Yves\ProductBundle\Grouper\ProductBundleGrouperInterface
*/
public function createProductBundleGrouper()
{
return new ProductBundleGrouper();
}
See also:
- Get a general idea about Amazon Pay
- Configure Amazon Pay API
- Configure Amazon Pay
- Obtaining Amazon Order Reference and Shipping Addresses details
- Learn how Amazon Pay Refund works
- Rendering the "Pay with Amazon" button on the Cart page
- Learn how Amazon Pay Sandbox Simulations work
- Learn about Amazon Pay state machine for synchronous and asynchronous flows
- Learn about OMS commands
- Check out Amazon Pay example email notifications
- Check support of bundled products with Amazon
Last review date: Oct 17th, 2018