Skip to content

Commit 5e19661

Browse files
Abhishek ChorotiyaAbhishek Chorotiya
authored andcommitted
feat: amazonPay
1 parent ca7625d commit 5e19661

File tree

3 files changed

+29
-45
lines changed

3 files changed

+29
-45
lines changed

src/Payments/AmazonPay/AmazonPayHelpers.res

Lines changed: 17 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -6,62 +6,47 @@ external renderAmazonPayButton: (~buttonId: string, ~config: amazonPayConfigType
66

77
let deliveryPriceMapper = dict => {
88
{
9-
amount: getInt(dict, "amount", 0),
10-
displayAmount: getString(dict, "display_amount", ""),
11-
currencyCode: getString(dict, "currency_code", ""),
9+
amount: dict->getInt("amount", 0),
10+
displayAmount: dict->getString("display_amount", ""),
11+
currencyCode: dict->getString("currency_code", ""),
1212
}
1313
}
1414

1515
let shippingMethodMapper = dict => {
1616
{
17-
shippingMethodName: getString(dict, "shipping_method_name", ""),
18-
shippingMethodCode: getString(dict, "shipping_method_code", ""),
17+
shippingMethodName: dict->getString("shipping_method_name", ""),
18+
shippingMethodCode: dict->getString("shipping_method_code", ""),
1919
}
2020
}
2121

2222
let deliveryOptionMapper = dict => {
2323
let priceData = dict->getDictFromDict("price")->deliveryPriceMapper
2424
{
25-
id: getString(dict, "id", ""),
25+
id: dict->getString("id", ""),
2626
price: {
2727
amount: priceData.displayAmount,
2828
currencyCode: priceData.currencyCode,
2929
},
3030
shippingMethod: dict->getDictFromDict("shipping_method")->shippingMethodMapper,
31-
isDefault: getBool(dict, "is_default", false),
31+
isDefault: dict->getBool("is_default", false),
3232
}
3333
}
3434

3535
let amazonPayTokenMapper = dict => {
3636
{
37-
walletName: getString(dict, "wallet_name", ""),
38-
merchantId: getString(dict, "merchant_id", ""),
39-
ledgerCurrency: getString(dict, "ledger_currency", ""),
40-
storeId: getString(dict, "store_id", ""),
41-
paymentIntent: getString(dict, "payment_intent", ""),
42-
totalShippingAmount: getString(dict, "total_shipping_amount", ""),
43-
totalTaxAmount: getString(dict, "total_tax_amount", ""),
44-
totalBaseAmount: getString(dict, "total_base_amount", ""),
45-
deliveryOptions: getArray(dict, "delivery_options")->Array.map(item =>
46-
item->getDictFromJson->deliveryOptionMapper
47-
),
37+
walletName: dict->getString("wallet_name", ""),
38+
merchantId: dict->getString("merchant_id", ""),
39+
ledgerCurrency: dict->getString("ledger_currency", ""),
40+
storeId: dict->getString("store_id", ""),
41+
paymentIntent: dict->getString("payment_intent", ""),
42+
totalTaxAmount: dict->getString("total_tax_amount", ""),
43+
totalBaseAmount: dict->getString("total_base_amount", ""),
44+
deliveryOptions: dict
45+
->getArray("delivery_options")
46+
->Array.map(item => item->getDictFromJson->deliveryOptionMapper),
4847
}
4948
}
5049

51-
let mapDeliveryOptionsToConfig = (options: array<deliveryOption>): array<deliveryOption> => {
52-
options->Array.map(option => {
53-
{
54-
id: option.id,
55-
price: {
56-
amount: option.price.amount,
57-
currencyCode: option.price.currencyCode,
58-
},
59-
shippingMethod: option.shippingMethod,
60-
isDefault: option.isDefault,
61-
}
62-
})
63-
}
64-
6550
let amazonPayBody = (amazonCheckoutSessionId, shipping) => {
6651
let wallet = {
6752
amazon_pay: {

src/Payments/AmazonPay/AmazonPayHooks.res

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,18 @@ let useAmazonPay = token => {
1515
let getAmazonPayConfig = (sessionToken: amazonPayTokenType): amazonPayConfigType => {
1616
let baseAmount = sessionToken.totalBaseAmount->Float.fromString->Option.getOr(0.0)
1717
let taxAmount = sessionToken.totalTaxAmount->Float.fromString->Option.getOr(0.0)
18-
let shippingAmount = sessionToken.totalShippingAmount->Float.fromString->Option.getOr(0.0)
18+
let defaultShippingAmount =
19+
sessionToken.deliveryOptions
20+
->Array.find(option => option.isDefault)
21+
->Option.mapOr("0.0", option => option.price.amount)
22+
23+
let shippingAmount = defaultShippingAmount->Float.fromString->Option.getOr(0.0)
24+
1925
let totalOrderAmount = (baseAmount +. taxAmount +. shippingAmount)->Float.toString
2026
let currencyCode = sessionToken.ledgerCurrency
2127

2228
{
23-
merchantId: "A3UJN62U20X4GB",
29+
merchantId: sessionToken.merchantId,
2430
ledgerCurrency: sessionToken.ledgerCurrency,
2531
sandbox: true,
2632
checkoutLanguage: "en_US",
@@ -32,7 +38,7 @@ let useAmazonPay = token => {
3238
currencyCode: sessionToken.ledgerCurrency,
3339
},
3440
checkoutSessionConfig: {
35-
storeId: "amzn1.application-oa2-client.43ee1af277a94b6c8efd9118dd6c156c",
41+
storeId: sessionToken.storeId,
3642
scopes: ["name", "email", "phoneNumber", "billingAddress"],
3743
paymentDetails: {
3844
paymentIntent: sessionToken.paymentIntent,
@@ -43,7 +49,7 @@ let useAmazonPay = token => {
4349
shippingAddressRef.current = event->getShippingAddressFromEvent
4450

4551
{
46-
totalShippingAmount: {amount: sessionToken.totalShippingAmount, currencyCode},
52+
totalShippingAmount: {amount: defaultShippingAmount, currencyCode},
4753
totalBaseAmount: {amount: sessionToken.totalBaseAmount, currencyCode},
4854
totalTaxAmount: {amount: sessionToken.totalTaxAmount, currencyCode},
4955
totalChargeAmount: {amount: totalOrderAmount, currencyCode},
@@ -55,7 +61,7 @@ let useAmazonPay = token => {
5561
shippingAddressRef.current = event->getShippingAddressFromEvent
5662

5763
{
58-
totalShippingAmount: {amount: sessionToken.totalShippingAmount, currencyCode},
64+
totalShippingAmount: {amount: defaultShippingAmount, currencyCode},
5965
totalBaseAmount: {amount: sessionToken.totalBaseAmount, currencyCode},
6066
totalTaxAmount: {amount: sessionToken.totalTaxAmount, currencyCode},
6167
totalChargeAmount: {amount: totalOrderAmount, currencyCode},
@@ -64,7 +70,6 @@ let useAmazonPay = token => {
6470
}
6571
},
6672
onDeliveryOptionSelection: event => {
67-
Console.log("Delivery option updated")
6873
let deliveryOptions = sessionToken.deliveryOptions
6974
let selectedOption =
7075
deliveryOptions->Array.find(option => option.id === event.deliveryOptions.id)
@@ -83,11 +88,6 @@ let useAmazonPay = token => {
8388
}
8489
},
8590
onCompleteCheckout: event => {
86-
Console.log2(
87-
"Checkout completed successfully! (This is a demo - no actual payment was processed)",
88-
event,
89-
)
90-
9191
let amazonCheckoutSessionId =
9292
event->getDictFromJson->getString("amazonCheckoutSessionId", "")
9393

@@ -116,7 +116,7 @@ let useAmazonPay = token => {
116116
}
117117

118118
let isRenderedOnce = React.useRef(false)
119-
let config = getAmazonPayConfig(token)
119+
let config = React.useMemo(() => getAmazonPayConfig(token), [token])
120120

121121
React.useEffect3(() => {
122122
let shouldRender =

src/Payments/AmazonPay/AmazonPayTypes.res

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ type amazonPayTokenType = {
2727
ledgerCurrency: string,
2828
storeId: string,
2929
paymentIntent: string,
30-
totalShippingAmount: string,
3130
totalTaxAmount: string,
3231
totalBaseAmount: string,
3332
deliveryOptions: array<deliveryOption>,

0 commit comments

Comments
 (0)