イベントハンドラを提供する
[Step 3 of 7] 5つのイベントハンドラを定義し、ボタンのJavaScriptコードに登録することができます。イベントハンドラは、Amazon Payからカートレベルの詳細を受け取り、Amazon Payのチェックアウトページに表示します。
1. チェックアウトの初期化
購入者は支払い方法としてAmazon Payを選択することで、チェックアウトを開始します。Amazon Payは購入者を認証後に同意を取得して、デフォルトの配送先住所と支払い方法を返却します。この後、onInitCheckout
イベントハンドラ/javascriptコールバック関数が呼び出されます。
Amazon Payは要求されたスコープに基づいて、購入者の詳細を提供します。Amazon Payはカート情報(例:金額、税金、配送オプション、アイテムレベルの詳細)を期待します。サポートされる要素のリストはCartDetails Responseを参照してください。Amazon Payと共有した情報は、Amazon Payのホストするページに表示されます。
/** Invokes when initiated checkout and authenticated **/
onInitCheckout: async function (event) {
try {
// Perform your server-side request to fetch details
const cartDetails = await fetch("/your-server/initCheckout", {
method: "POST",
headers: {
"Content-Type": "application/json",
},
data: JSON.stringify({
shippingAddress: event.shippingAddress,
scopes: event.scopes,
checkoutLanguage: event.checkoutLanguage,
}),
});
return {
totalBaseAmount: cartDetails.totalBaseAmount,
totalTaxAmount: cartDetails.totalTaxAmount,
totalShippingAmount: cartDetails.totalShippingAmount,
totalChargeAmount: cartDetails.totalChargeAmount,
totalOrderAmount: cartDetails.totalOrderAmount,
totalDiscountAmount: cartDetails.totalDiscountAmount,
lineItems: cartDetails.lineItems,
deliveryOptions: cartDetails.deliveryOptions,
};
} catch (err) {
// something went wrong with your server call
console.err(err);
return {
status: "error",
reasonCode: "unknownError",
};
}
};
onInitCheckout event input
パラメータ
|
説明
|
scopes Type: Scopes |
要求された範囲に基づいて共有される、固有の識別子、名前、Eメールなどの購入者に関する詳細。
|
checkoutLanguage Type: string |
購入者が選択した言語。
|
shippingAddress Type: Address |
購入者が選択した配送先住所。
|
{
"buyer": { // shared based on scope requested
"buyerId": "buyerId",
"name": "name-1",
"email": "name@amazon.com",
"phoneNumber": "800-000-0000"
},
"billingAddress": { // shared based on scope requested
"name": "Work",
"addressLine1": "440 Terry Ave",
"addressLine2": "",
"addressLine3": "",
"city": "Seattle",
"county": "King",
"district": "Seattle",
"stateOrRegion": "WA",
"postalCode": "98121",
"countryCode": "US",
"phoneNumber": "800-000-0000"
},
"shippingAddress": { // Null for PayOnly product type
"name": "Susie Smith",
"addressLine1": "10 Ditka Ave",
"addressLine2": "Suite 2500",
"addressLine3": null,
"city": "Chicago",
"county": null,
"district": null,
"stateOrRegion": "IL",
"postalCode": "60602",
"countryCode": "US",
"phoneNumber": "800-000-0000"
}
}
onInitCheckout handler output
{
"totalShippingAmount":{
"amount":"5",
"currencyCode":"USD"
},
"totalBaseAmount":{
"amount":"20",
"currencyCode":"USD"
},
"totalTaxAmount":{
"amount":"0.5",
"currencyCode":"USD"
},
"totalOrderAmount":{
"amount":"20.5",
"currencyCode":"USD"
},
"totalChargeAmount":{
"amount":"20.5",
"currencyCode":"USD"
},
"totalDiscountAmount":{
"amount":"5",
"currencyCode":"USD"
},
"lineItems":[
{
"id": "id-of-the-item",
"title":"item-title-1",
"variantTitle":"variant-title",
"quantity":"2",
"listPrice": {
"amount":"10",
"currencyCode":"USD"
},
"totalListPrice":{
"amount":"20",
"currencyCode":"USD"
}
}
],
"deliveryOptions":[{
"id":"abc_shipping-02-25.11",
"price":{
"amount":"5",
"currencyCode":"USD"
},
"shippingMethod":{
"shippingMethodName":"shipping-method-name",
"shippingMethodCode":"shipping-method-code"
},
"shippingEstimate":[{
"timeUnit":"HOUR",
"value":2
}],
"isDefault":true
}]
}
詳細は CartDetails をご参照ください。
onInitCheckout handler errors
提供されたデータの注文の受注ができない場合は、Amazon Payにエラー応答を返してください。
{
"status": "error",
"reasonCode": "shippingAddressInvalid"
}
理由コード
|
説明
|
shippingAddressInvalid | 提供された配送先住所を受け入れることができない場合のエラー。購入者は別の住所を選択するように要求されます。 |
unknownError | その他の場合のエラー。購入者には一般的なエラーメッセージが表示され、あなたのショップに戻るように要求されます。
|
2. 配送先住所の更新
購入者が配送希望住所を選択または変更すると、Amazon Payはこのイベントハンドラを呼び出します。
/** Invokes when customer has selected different shipping address **/
onShippingAddressSelection: async function (event) {
try {
// Perform your server-side request to fetch details
const cartDetails = await fetch("/your-server/addressUpdate", {
method: "POST",
headers: {
"Content-Type": "application/json",
},
data: JSON.stringify({
shippingAddress: event.shippingAddress,
}),
});
return {
totalBaseAmount: cartDetails.totalBaseAmount,
totalTaxAmount: cartDetails.totalTaxAmount,
totalShippingAmount: cartDetails.totalShippingAmount,
totalChargeAmount: cartDetails.totalChargeAmount,
totalOrderAmount: cartDetails.totalOrderAmount,
totalDiscountAmount: cartDetails.totalDiscountAmount,
lineItems: cartDetails.lineItems,
deliveryOptions: cartDetails.deliveryOptions,
};
} catch (err) {
// something went wrong with your server call
console.err(err);
return {
status: "error",
reasonCode: "unknownError",
};
}
};
onShippingAddressSelection event input
パラメータ
|
説明
|
shippingAddress Type: Address |
購入者が選択した配送先住所。
|
{
"shippingAddress": {
"name": "Susie Smith",
"addressLine1": "10 Ditka Ave",
"addressLine2": "Suite 2500",
"addressLine3": null,
"city": "Chicago",
"county": null,
"district": null,
"stateOrRegion": "IL",
"postalCode": "60602",
"countryCode": "US",
}
}
onShippingAddressSelection handler output
{
"totalShippingAmount":{
"amount":"5",
"currencyCode":"USD"
},
"totalBaseAmount":{
"amount":"20",
"currencyCode":"USD"
},
"totalTaxAmount":{
"amount":"0.5",
"currencyCode":"USD"
},
"totalOrderAmount":{
"amount":"20.5",
"currencyCode":"USD"
},
"totalChargeAmount":{
"amount":"20.5",
"currencyCode":"USD"
},
"totalDiscountAmount":{
"amount":"5",
"currencyCode":"USD"
},
"lineItems":[
{
"id": "id-of-the-item",
"title":"item-title-1",
"variantTitle":"variant-title",
"quantity":"2",
"listPrice": {
"amount":"10",
"currencyCode":"USD"
},
"totalListPrice":{
"amount":"20",
"currencyCode":"USD"
}
}
],
"deliveryOptions":[{
"id":"abc_shipping-02-25.11",
"price":{
"amount":"5",
"currencyCode":"USD"
},
"shippingMethod":{
"shippingMethodName":"shipping-method-name",
"shippingMethodCode":"shipping-method-code"
},
"shippingEstimate":[{
"timeUnit":"HOUR",
"value":2
}],
"isDefault":true
}]
}
詳細は CartDetails をご参照ください。
onShippingAddressSelection handler errors
提供されたデータの注文の受注できない場合は、Amazon Payにエラー応答を返してください。
{
"status": "error",
"reasonCode": "shippingAddressInvalid"
}
理由コード
|
説明
|
shippingAddressInvalid | 提供された配送先住所を受け入れることができない場合のエラー。購入者は別の住所を選択するように要求されます。 |
unknownError | その他の場合のエラー。購入者には一般的なエラーメッセージが表示され、あなたのショップに戻るように要求されます。
|
3. 配送オプションの更新
購入者が希望する配送オプションを選択または変更すると、Amazon Payはこのイベントハンドラを呼び出します。
/** Invokes when customer has selected different shipping address **/
onDeliveryOptionSelection: async function (event) {
try {
// Perform your server-side request to fetch details
const cartDetails = await fetch("/your-server/deliveryOptionUpdate", {
method: "POST",
headers: {
"Content-Type": "application/json",
},
data: JSON.stringify({
selectedDeliveryOption: {
id: event.deliveryOptions.id,
amount: event.deliveryOptions.amount,
displayName: event.deliveryOptions.displayName,
},
}),
});
return {
totalBaseAmount: cartDetails.totalBaseAmount,
totalTaxAmount: cartDetails.totalTaxAmount,
totalShippingAmount: cartDetails.totalShippingAmount,
totalChargeAmount: cartDetails.totalChargeAmount,
totalOrderAmount: cartDetails.totalOrderAmount,
totalDiscountAmount: cartDetails.totalDiscountAmount,
lineItems: cartDetails.lineItems, // optional
deliveryOptions: cartDetails.deliveryOptions, // optional
};
} catch (err) {
// something went wrong with your server call
console.err(err);
return {
status: "error",
reasonCode: "unknownError",
};
}
};
onDeliveryOptionSelection event input
パラメータ
|
説明
|
deliveryOptions Type: DeliveryOption (Event input) |
購入者が選択した配送オプション。
|
{
"deliveryOptions": {
"id": "do-2",
"displayName": "Option 2",
"amount": "5"
}
}
onDeliveryOptionSelection handler output
購入者が選択した配送オプションに基づいてカートの詳細を再計算することができます。配送オプションの選択に基づいて変更されたものはすべて返却してください。最低でも必要な金額欄は返却する必要があります。
{
"totalShippingAmount":{
"amount":"5",
"currencyCode":"USD"
},
"totalBaseAmount":{
"amount":"20",
"currencyCode":"USD"
},
"totalTaxAmount":{
"amount":"0.5",
"currencyCode":"USD"
},
"totalOrderAmount":{
"amount":"20.5",
"currencyCode":"USD"
},
"totalChargeAmount":{
"amount":"20.5",
"currencyCode":"USD"
},
"totalDiscountAmount":{
"amount":"5",
"currencyCode":"USD"
}
}
詳細は CartDetails をご参照ください。
onDeliveryOptionSelection handler errors
提供されたデータの注文の受注ができない場合は、Amazon Payにエラー応答を返してください。
{
"status": "error",
"reasonCode": "deliveryOptionInvalid"
}
理由コード
|
説明
|
deliveryOptionInvalid | 提供された配送オプションを受け入れることはできません。購入者は別の配送オプションを選択するよう要求されます。 |
unknownError | その他の場合のエラー。購入者には一般的なエラーメッセージが表示され、あなたのショップに戻るように要求されます。
|
4. チェックアウトを完了する
購入者が「注文を確定」をクリックしてチェックアウトを完了すると、Amazon Payはこのイベントハンドラを呼び出します。イベントからデータを受け取り、チェックアウトを完了するためにFinalize Checkout Session APIコールを実行する必要があります。
/** Invokes when customer has selected different shipping address **/
onCompleteCheckout: async function (event) {
try {
// Perform your server-side request to fetch details
const result = await fetch("/your-server/finalizeCheckout", {
method: "POST",
headers: {
"Content-Type": "application/json",
},
data: JSON.stringify({
checkoutSessionId: event.amazonCheckoutSessionId,
billingAddress: event.billingAddress,
paymentDescriptor: event.paymentDescriptor,
}),
});
} catch (err) {
// something went wrong with your server call
console.err(err);
return {
status: "error",
reasonCode: "unknownError",
};
}
};
onCompleteCheckout event input
パラメータ
|
説明
|
amazonCheckoutSessionId Type: string |
Amazon Payの checkoutSessionId
|
billingAddress Type: Address |
購入者の請求先住所
|
paymentDescriptor Type: string |
購入者が選択したお支払い方法
|
buyerAdditionalInfo Type: BuyerAdditionalInfo |
Buy Nowページで取得した追加購入者情報 (EU only)
|
{
"amazonCheckoutSessionId": "d0966c90-f8f6-4835-9129-1f743cf525bc",
"billingAddress": { // shared based on scope requested
"name": "Work",
"addressLine1": "440 Terry Ave",
"addressLine2": "",
"addressLine3": "",
"city": "Seattle",
"county": "King",
"district": "Seattle",
"stateOrRegion": "WA",
"postalCode": "98121",
"countryCode": "US",
"phoneNumber": "800-000-0000"
},
"paymentDescriptor": "Amazon Pay Visa (1111)"
}
onCompleteCheckout handler output
このコールバックにはoutputは必要ありません。Finalize Checkout Session
API が成功した場合、バイヤーを確認ページにリダイレクトします。