Copyright © 2025 World Wide Web Consortium. W3C® liability, trademark and permissive document license rules apply.
この仕様は、マーチャント(つまり、物理的またはデジタル商品を販売するウェブサイト)が最小限の統合で1つまたは複数の支払い方法を利用できるようにするAPIを標準化します。ユーザーエージェント(例: ブラウザ)は、マーチャントとユーザー間の支払いフローを促進します。
このセクションでは、この文書が発行された時点での状態を説明します。現在のW3Cの出版物と、この技術報告書の最新の改訂版の一覧は、W3C標準およびドラフトのインデックスで確認できます。
2022年9月に、Web Payments Working Groupは支払いリクエスト勧告を発表しました。プライバシーおよび国際化レビューに続いて、この勧告から請求先および配送先住所に関連する機能は除外されました。ただし、これらの機能は相互運用可能な形で引き続きサポートされており、作業部会は仕様を実装と再調整し、関連する問題についてコミュニティと再連携することを決定しました。
この文書は、元の勧告のテキストに基づいた勧告候補スナップショットです。その後の勧告候補ドラフトでは、住所機能を追加し、勧告発表以降に行われた少数の変更を反映させます。
住所機能のサポートを追加する一環として、この仕様は、連絡先ピッカーAPIで定義された住所コンポーネントを参照し、それらを独自に定義しないようにしました。実際、連絡先ピッカーAPIは、元々支払いリクエストAPIにあった定義から派生したものであり、Web上で支払い以外にも住所が有用であるため、この仕様から分離されました。
作業部会は議論を行い、通常のレビュー手順に従ってこの仕様を勧告提案のステータスに進める予定です。
作業部会は、実装レポートを作成することで実装経験を示します。このレポートでは、テストスイートの各必須テスト(つまり、各テストが仕様のMUST要件に対応)を2つ以上の独立した実装が通過したことを示します。
この文書は、Web Payments Working Groupによって、勧告トラックを使用して勧告候補ドラフトとして発行されました。
勧告候補としての発行は、W3Cおよびそのメンバーによる承認を意味するものではありません。勧告候補ドラフトは、作業部会が次の勧告候補スナップショットに含めることを意図した前回の勧告候補からの変更を統合したものです。
この文書はドラフト文書であり、いつでも更新、置き換え、または廃止される可能性があります。この文書を進行中の作業以外として引用することは適切ではありません。 この仕様の将来の更新では、新機能が組み込まれる可能性があります。
この文書は、W3C特許ポリシーの下で活動しているグループによって作成されました。 W3Cは、このグループの成果物に関連して行われた特許開示の公開リストを維持しています。このページには、特許を開示するための手順も記載されています。特許のW3Cポリシーの第6節に従って、必須請求を含むと考えられる特許を知っている個人は、その情報を開示しなければなりません。
この文書は、2023年11月3日W3Cプロセス文書に基づいています。
このセクションは規範的ではありません。
この仕様では、ユーザーエージェント (例: ブラウザ)が取引における三者間の仲介役として機能するAPIについて説明します:
支払い方法は以下を定義します:
PaymentMethodData
のdata
メンバーとして受け取ります。特定の支払い方法について指定されていない場合、IDLへの変換は行われず、支払い方法はdata
をJSONとして受け取ります。
data
メンバーを、支払い方法の追加データ型に変換した後に検証するアルゴリズム手順を指定します。特定の支払い方法について指定されていない場合、検証は行われません。
特定の支払い方法に対する支払いリクエストを満たす方法の詳細は、支払いハンドラー(支払いリクエストを処理するアプリケーションまたはサービス)の実装詳細です。具体的には、支払いハンドラーは以下を定義します:
ユーザーが支払い方法や通貨手段(例: デビットカードからクレジットカードに変更)を変更した場合の処理を記述する手順で、辞書、object
、またはnullを返します。
このAPIは、標準のJavaScriptライブラリでは利用できない、より安全な支払い方式(例: トークン化やシステムレベルの認証)をウェブサイトで活用することも可能にします。これにより、マーチャントの責任が軽減され、ユーザーの機密情報を保護するのに役立ちます。
この仕様の対象外は以下の通りです:
このセクションは規範的ではありません。
APIを使用するには、開発者はいくつかの重要な情報を提供し、それらを管理する必要があります。これらの情報は
PaymentRequest
コンストラクタに
引数として渡され、その後ユーザーに表示される支払いリクエストを更新するために使用されます。具体的には、次の情報です:
PaymentMethodData
のシーケンス。
PaymentDetailsInit
辞書。これには合計金額や、
(物理的な商品に対する)購入される商品やサービスのリスト、配送オプションが含まれます。さらに、支払い方法に対する
「修飾子」を任意で含めることができます。例えば「ネットワークXのカードで支払う場合、3米ドルの処理手数料がかかる」など。
PaymentOptions
として指定します(例:物理的な商品の場合は配送先住所が通常必要。
デジタル商品の場合は通常メールアドレスで十分)。
PaymentRequest
が構築されると、
show
()
メソッドを通じてエンドユーザーに提示されます。
show
()
は、ユーザーが支払いリクエストを確定すると、
PaymentResponse
を結果として返す Promise を返します。
新しい PaymentRequest
を構築する際、
マーチャントは第1引数(methodData)を使用して、ユーザーが支払うことができるさまざまな方法
(例:クレジットカード、Apple Pay、Google Pay など)を列挙します。より具体的には、methodData
のシーケンスには、マーチャントが受け入れる
支払い方法識別子 と、
関連する各 支払い方法 固有のデータ(例:対応するクレジットカードネットワーク)
を含む PaymentMethodData
辞書が含まれます。
methodData
」引数
const methodData = [
{
supportedMethods: "https://example.com/payitforward",
data: {
payItForwardField: "ABC",
},
},
{
supportedMethods: "https://example.com/bobpay",
data: {
merchantIdentifier: "XXXX",
bobPaySpecificField: true,
},
},
];
新しい PaymentRequest
を構築する際、
マーチャントはコンストラクタの第2引数(details)でユーザーに完了を求める取引の詳細を提供します。
これには注文の合計や、任意で支払い対象の内訳を提供するいくつかの明細項目が含まれます。
details
」引数
const details = {
id: "super-store-order-123-12312",
displayItems: [
{
label: "Sub-total",
amount: { currency: "GBP", value: "55.00" },
},
{
label: "Value-Added Tax (VAT)",
amount: { currency: "GBP", value: "5.00" },
},
],
total: {
label: "Total due",
// The total is GBP£65.00 here because we need to
// add shipping (below). The selected shipping
// costs GBP£5.00.
amount: { currency: "GBP", value: "65.00" },
},
};
ここでは、details に2つの配送オプションを追加する方法の例を示します。
const shippingOptions = [
{
id: "standard",
// Shipping by truck, 2 days
label: "🚛 Envío por camión (2 dias)",
amount: { currency: "EUR", value: "5.00" },
selected: true,
},
{
id: "drone",
// Drone shipping, 2 hours
label: "🚀 Drone Express (2 horas)",
amount: { currency: "EUR", value: "25.00" }
},
];
Object.assign(details, { shippingOptions });
ここでは、特定のネットワークのカード使用時に処理手数料を追加する方法を示します。合計の再計算が必要である点に注意してください。
// Certain cards incur a $3.00 processing fee.
const cardFee = {
label: "Card processing fee",
amount: { currency: "AUD", value: "3.00" },
};
// Modifiers apply when the user chooses to pay with
// a card.
const modifiers = [
{
additionalDisplayItems: [cardFee],
supportedMethods: "https://example.com/cardpay",
total: {
label: "Total due",
amount: { currency: "AUD", value: "68.00" },
},
data: {
supportedNetworks: networks,
},
},
];
Object.assign(details, { modifiers });
一部の金融取引では、マーチャントが購入を履行するためにユーザーが特定の情報を提供する必要があります(例:物理的な商品を発送する場合のユーザーの配送先住所)。
この情報を要求するために、マーチャントは
PaymentRequest
コンストラクタに第3の任意引数
(options)を渡し、必要とする情報を示すことができます。支払いリクエストが表示されると、
ユーザーエージェントはエンドユーザーにこの情報を求め、ユーザーが支払いリクエストを受け入れた際にマーチャントへ返します。
options
」引数
const options = {
requestPayerEmail: false,
requestPayerName: true,
requestPayerPhone: false,
requestShipping: true,
}
必要な情報をすべて集めたら、PaymentRequest
を構築し、
ブラウザにユーザーへ提示するよう要求できます:
PaymentRequest
」の構築
async function doPaymentRequest() {
try {
const request = new PaymentRequest(methodData, details, options);
// See below for a detailed example of handling these events
request.onshippingaddresschange = ev => ev.updateWith(details);
request.onshippingoptionchange = ev => ev.updateWith(details);
const response = await request.show();
await validateResponse(response);
} catch (err) {
// AbortError, SecurityError
console.error(err);
}
}
async function validateResponse(response) {
try {
const errors = await checkAllValuesAreGood(response);
if (errors.length) {
await response.retry(errors);
return validateResponse(response);
}
await response.complete("success");
} catch (err) {
// Something went wrong...
await response.complete("fail");
}
}
// Must be called as a result of a click
// or some explicit user action.
doPaymentRequest();
ユーザーが支払いを受け入れる前に、サイトはユーザー入力に応じて支払いリクエストを更新する機会が与えられます。 これには、追加の配送オプションの提供(またはその費用の変更)、特定の住所へ配送できない項目の削除などが含まれます。
const request = new PaymentRequest(methodData, details, options);
// Async update to details
request.onshippingaddresschange = ev => {
ev.updateWith(checkShipping(request));
};
// Sync update to the total
request.onshippingoptionchange = ev => {
// selected shipping option
const { shippingOption } = request;
const newTotal = {
currency: "USD",
label: "Total due",
value: calculateNewTotal(shippingOption),
};
ev.updateWith({ total: newTotal });
};
async function checkShipping(request) {
try {
const { shippingAddress } = request;
await ensureCanShipTo(shippingAddress);
const { shippingOptions, total } = await calculateShipping(shippingAddress);
return { shippingOptions, total };
} catch (err) {
// Shows error to user in the payment sheet.
return { error: `Sorry! we can't ship to your address.` };
}
}
開発者は、shippingAddressErrors
を PaymentDetailsUpdate
辞書のメンバーとして使用し、ContactAddress
の特定の属性に
検証エラーがあることを示すことができます。
shippingAddressErrors
は AddressErrors
辞書であり、そのメンバーは
エラーのある 物理アドレス
のフィールドを明確に示すとともに、
エンドユーザーに表示する有用なエラーメッセージを提供します。
request.onshippingaddresschange = ev => {
ev.updateWith(validateAddress(request.shippingAddress));
};
function validateAddress(shippingAddress) {
const error = "Can't ship to this address.";
const shippingAddressErrors = {
city: "FarmVille is not a real place.",
postalCode: "Unknown postal code for your country.",
};
// Empty shippingOptions implies that we can't ship
// to this address.
const shippingOptions = [];
return { error, shippingAddressErrors, shippingOptions };
}
PaymentResponse
のデータは処理のためにサーバーへ
POST されることが想定されています。これを可能な限り簡単にするために、
PaymentResponse
は
既定の toJSON 手順
(すなわち .toJSON()
)を使用して、オブジェクトを直接 JSON にシリアライズできます。これにより、
生成されたJSONを Fetch
Standard
を用いてサーバーへ POST するのが容易になります:
fetch()
による POST
async function doPaymentRequest() {
const payRequest = new PaymentRequest(methodData, details);
const payResponse = await payRequest.show();
let result = "";
try {
const httpResponse = await fetch("/process-payment", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: payResponse.toJSON(),
});
result = httpResponse.ok ? "success" : "fail";
} catch (err) {
console.error(err);
result = "fail";
}
await payResponse.complete(result);
}
doPaymentRequest();
クロスオリジンの
iframe
が Payment Request API を呼び出すことを許可するには、
allow
属性に "payment" キーワードを指定して
iframe
要素に付与します。
<iframe
src="https://cross-origin.example"
allow="payment">
</iframe>
複数のオリジンにまたがって Payment Request API をサポートするページへ
iframe
が遷移する場合は、
allow
を "payment *"
に設定できます。
さらなる詳細と例は Permissions Policy 仕様で提供されています。
WebIDL[SecureContext, Exposed=Window]
interface PaymentRequest
: EventTarget {
constructor
(
sequence<PaymentMethodData
> methodData,
PaymentDetailsInit
details,
optional PaymentOptions
options = {}
);
[NewObject]
Promise<PaymentResponse
> show
(optional Promise<PaymentDetailsUpdate
> detailsPromise);
[NewObject]
Promise<undefined> abort
();
[NewObject]
Promise<boolean> canMakePayment
();
readonly attribute DOMString id
;
readonly attribute ContactAddress? shippingAddress
;
readonly attribute DOMString? shippingOption
;
readonly attribute PaymentShippingType
? shippingType
;
attribute EventHandler onshippingaddresschange
;
attribute EventHandler onshippingoptionchange
;
attribute EventHandler onpaymentmethodchange
;
};
開発者は支払いリクエストを行うために、PaymentRequest
を作成します。
これは通常、ユーザーが支払いプロセスを開始する操作(例: ウェブサイト上の「Buy」「Purchase」「Checkout」ボタンの操作、インタラクティブゲームでの「Power
Up」の選択、駐車場のキオスクでの支払いなど)に関連付けられます。PaymentRequest
は、ユーザーが入力を行っている間(ユーザーが支払いリクエストを承認または拒否する時点まで)、開発者が ユーザーエージェント と情報をやり取りできるようにします。
shippingAddress
、
shippingOption
、および
shippingType
属性は、
requestShipping
メンバーが設定されている場合に、
処理の過程で値が設定されます。
request の 支払い関連の閲覧コンテキスト は、その
PaymentRequest
の 関連グローバルオブジェクト
の閲覧コンテキストの
トップレベル閲覧コンテキスト
を指します。すべての 支払い関連の閲覧コンテキスト は、同時に複数の支払いUIが表示されることを防ぐための真偽値
payment
request is showing を持ちます。
payment request is showing の真偽値は、単に1つのブラウザタブ内で複数の支払いUIが表示されるのを防ぎます。しかし、支払いハンドラー は、ユーザーエージェント に対して、すべてのブラウザウィンドウおよびタブにわたり一度に1つの支払いUIのみを表示するよう制限できる場合があります。別の支払いハンドラーは、異なるブラウザタブ間で支払いUIの表示を許可することもあります。
PaymentRequest
は、提供された
PaymentMethodData
のシーケンス
methodData(各 支払い方法 固有の data
を含む場合がある)、
PaymentDetailsInit
の details、および
PaymentOptions
の options を用いて構築されます。
PaymentRequest(methodData,
details, options)
コンストラクタは以下のように動作しなければなりません(MUST):
Document
が、使用を許可された
"payment"
パーミッションを持たない場合、"SecurityError
"
DOMException
を
スローする。
TypeError
を投げる。
supportedMethods
に対して
支払い方法識別子の検証
の手順を実行する。false が返された場合は
RangeError
例外を投げる。任意で、支払い方法識別子が不正であることを開発者に通知してよい。
supportedMethods
を解析した結果とする:
supportedMethods
に設定する。
RangeError
の DOMException
を投げ、
任意で、この 支払い方法識別子
が重複していることを開発者に通知する。
data
メンバーが存在しないなら、
serializedData を null とする。そうでなければ、
paymentMethod.data
を JSON 文字列へ
直列化
した結果を
serializedData とする。いかなる例外も再スローする。
supportedMethods
を定義する仕様が
追加データ型
を規定している場合:
idl を、変換 によって object を 追加データ型 の IDL 値へ変換した結果とする。 いかなる例外も再スローする。
仕様に定義される
paymentMethod.supportedMethods
に対して、
可能であれば 支払い方法データの検証手順
を
object に対して実行する。いかなる例外も再スローする。
これらの手順により、IDL 型への変換および検証時のエラーができるだけ早い段階で検出されます。
supportedMethods
、
serializedData) として serializedMethodData に追加する。
total
.amount
に対して行う。
発生した例外は再スローする。
displayItems
メンバーが存在する場合は、
details.displayItems
内の各
item について:
amount
に対して行う。例外は再スローする。
requestShipping
メンバーが存在し、true
に設定されている場合、配送オプションを処理する:
sequence
<PaymentShippingOption
> とする。
shippingOptions
メンバーが存在する場合は、次を行う:
shippingOptions
内の
各 option について:
shippingOptions
を
options に設定する。
sequence
<PaymentDetailsModifier
>
とする。
modifiers
メンバーが
存在する場合は:
modifiers
に設定する。
total
メンバーが存在する場合:
total
.amount
に対して行う。
例外は再スローする。
additionalDisplayItems
メンバーが modifier に存在する場合、modifier.additionalDisplayItems
の各 item について:
amount
に対して行う。
例外は再スローする。
data
メンバーが存在しない場合、serializedData を null とする。そうでなければ、
直列化
により
modifier.data
を
JSON 文字列にし、
その結果を serializedData とする。例外は再スローする。
supportedMethods
、
serializedData) として serializedModifierData に追加する。
data
メンバーを削除する。
modifiers
を
modifiers に設定する。
PaymentRequest
として作成する。
[[handler]]
を null
に設定する。
[[options]]
を options に設定する。
[[state]]
を
"created" に設定する。
[[updating]]
を false に設定する。
[[details]]
を details に設定する。
[[serializedModifierData]]
を
serializedModifierData に設定する。
[[serializedMethodData]]
を
serializedMethodData に設定する。
[[response]]
を null に設定する。
shippingOption
属性の値を、selectedShippingOption に設定する。
shippingAddress
属性の値を null
に設定する。
requestShipping
が true
に設定されているなら、
request の shippingType
属性の値を、options.shippingType
に設定する。そうでなければ、
null に設定する。
取得時、id
属性はこの
PaymentRequest
の
[[details]]
.id
を返します。
監査および照合の目的で、マーチャントは各取引の一意識別子を
id
属性に関連付けることができます。
開発者が支払いリクエストに対するユーザーとの対話を開始したいときに、show
()
メソッドが呼び出されます。
show
()
メソッドは、Promise
を返し、ユーザーが支払いリクエストを受諾したときに解決されます。
show
()
メソッドが戻った後、支払いリクエストを支援するために、何らかのユーザーインターフェイスがユーザーに提示されます。
複数の閲覧コンテキストが同時に show
()
メソッドを呼び出した場合に何が起こるかは、各支払いハンドラーが制御します。
例えば、ある支払いハンドラーは、異なるブラウザのタブ/ウィンドウで複数の支払いUIを表示することを許可します。別の支払いハンドラーは、ユーザーエージェント全体で一度に1つの支払いUIのみを許可する場合があります。
show(optional detailsPromise)
メソッドは以下のように動作しなければなりません(MUST):
SecurityError
」の
DOMException
を用いて
拒否された
Promise を返す。
これは、ユーザーアクティベーションが不要となることをユーザーエージェントに許可します。例えば、リダイレクト先でユーザーアクティベーションが存在しない可能性のあるリダイレクトフローをサポートするためです。セキュリティ上の考慮事項については、 19.9 ユーザーアクティベーションの要件を参照してください。
また、
issue #1022 も参照してください。ここでは、show
()
にユーザーアクティベーションを必要とすべきか否かについて、仕様でさらなる指針を提供することに関する議論が行われています。
Document
とする。
AbortError
」の
DOMException
で
拒否された
Promise を返す。
"visible"
でない場合、
「AbortError
」の
DOMException
で
拒否された
Promise を返す。
任意で、ユーザーエージェントがユーザー保護のために
show
()
の呼び出しを不許可にしたい場合、
「SecurityError
」の
DOMException
で拒否された
Promise を返す。例えば、ユーザーエージェントは、
セクション 19.
プライバシーとセキュリティに関する考慮事項 に記載のとおり、ページが
show
()
を呼び出せる頻度を制限する場合がある。
[[state]]
が
"created" でない場合、
「InvalidStateError
」の
DOMException
で
拒否された
Promise を返す。
[[state]]
を
"closed" に設定する。
AbortError
」の
DOMException
で
拒否された
Promise を返す。
[[state]]
を
"interactive" に設定する。
[[acceptPromise]]
を
acceptPromise に設定する。
任意で:
AbortError
」の
DOMException
で拒否する。
[[state]]
を
"closed" に設定する。
これにより、ユーザーエージェントは、裁量により、ユーザーが即座に 支払いリクエストを中止したかのように振る舞うことができます。例えば「プライベートブラウジング」モードなどでは、この手順が利用されることがあります。
[[serializedMethodData]]
内の各
paymentMethod の組について:
object
にする。
[[state]]
を
"closed" に設定する。
[[state]]
を
"closed" に設定する。
NotSupportedError
」の
DOMException
で拒否する。
ユーザーが handlers と対話できるユーザーインターフェイスを提示する。提示にあたって、ユーザーエージェントはユーザーの選好を優先すべきです(SHOULD)。 また、ユーザーインターフェイスは、可能であれば document の 文書要素の 言語およびロケールに基づく書式に従って提示すべきです(SHOULD)。 利用できない場合は適切なフォールバックを用います。
PaymentRequest
の詳細を更新するアルゴリズムを実行する。
detailsPromise の settle 方法に基づいて、
PaymentRequest
の詳細を更新するアルゴリズム が支払いUIの挙動を決定します。
すなわち、detailsPromise が 拒否された場合、支払いリクエストは中止されます。
それ以外の場合、detailsPromise が 履行 されると、
ユーザーエージェントは支払いUIを再度有効化し、支払いフローを継続できます。
[[handler]]
を、エンドユーザーが選択した
支払いハンドラー に設定する。
[[serializedModifierData]]
内の各
tuple について:
[[handler]]
の
支払い方法識別子
と一致する場合、
2番目の要素(直列化されたメソッドデータ)を modifiers に追加する。
paymentMethod の組の2番目の要素を 変換 したものと modifiers を渡す。任意で、ユーザーエージェントは、ユーザーが支払いプロセスを進められるよう、 request から適切なデータをユーザー選択の 支払いハンドラー に送るべきです(SHOULD)。これには、 request のさまざまな属性やその他の 内部スロット が含まれます(プライバシー上の理由から、適宜一部が除外されることがあります)。
[[serializedModifierData]]
の
内部スロット
にある
複数の適用可能なモディファイアの扱いは、支払いハンドラー に依存し、この仕様の範囲外です。
それでもなお、支払いハンドラー は「最後のものが優先」するアプローチを用いることが推奨されます(RECOMMENDED)。
つまり、リストの末尾の項目は常に先頭の項目より優先されます(以下の例を参照)。
acceptPromise は、後に ユーザーが支払いリクエストを受諾するアルゴリズム または ユーザーが支払いリクエストを中止するアルゴリズム のいずれかによって、解決または拒否されます。これらはユーザーインターフェイスとの対話を通じてトリガーされます。
ユーザーインターフェイスが表示されている間に document が 完全にアクティブでなくなった場合、またはこの手順に到達する時点で既にそうでない場合は、次を行う:
開発者が abort
()
メソッドを呼び出すと、
ユーザーエージェント に対して支払い request を中止し、
表示中のユーザーインターフェイスがあればそれを終了するよう指示します。
abort
()
は、
show
()
メソッドが呼び出された後(
状態を参照)で、このインスタンスの
[[acceptPromise]]
が解決される前にのみ呼び出すことができます。
例えば、販売している商品が期間限定でのみ利用可能な場合、開発者はこれを選択することができます。
ユーザーが許可された時間内に支払いリクエストを受け入れなかった場合、リクエストは中止されます。
ユーザーエージェント は、常にリクエストを中止できるとは限りません。
例えば、ユーザーエージェント がリクエストの責任を別のアプリに委譲している場合があります。
この場合、abort
()
は返される
Promise
を拒否します。
ユーザーが支払いリクエストを中止する場合のアルゴリズムも参照してください。
abort
()
メソッドは以下のように動作しなければなりません(MUST):
[[response]]
が null でなく、
request.[[response]]
.[[retryPromise]]
が null でない場合、「InvalidStateError
」の
DOMException
で
拒否された
Promise を返す。
[[state]]
の値が
"interactive" でない場合、「InvalidStateError
」の
DOMException
で
拒否された
Promise を返す。
InvalidStateError
」の
DOMException
で拒否し、
これらの手順を中止する。
[[state]]
を
"closed" に設定する。
[[acceptPromise]]
を
「AbortError
」の
DOMException
で拒否する。
canMakePayment
()
メソッドは、
開発者がユーザーエージェントが希望する
支払い方法のいずれかをサポートしているかどうかを確認するために使用できます。
19.8
canMakePayment()
保護を参照してください。
canMakePayment
()
の結果が true であっても、
ユーザーが支払いに備えた手段を用意していることを意味するわけではありません。
canMakePayment
()
メソッドはcan
make payment アルゴリズムを実行しなければなりません(MUST)。
PaymentRequest
の
shippingAddress
属性は、
ユーザーが配送先住所を提供したときに設定されます。デフォルトでは null です。
ユーザーが配送先住所を提供すると、配送先住所変更アルゴリズムが実行されます。
PaymentRequest
の
shippingType
属性は、
取引を履行するために使用される配送の種類を表します。その値は
PaymentShippingType
列挙型の値か、
開発者が
PaymentOptions
の
shippingType
メンバーを使用して
構築
する際に提供されていない場合は null です。
PaymentRequest
の
onshippingaddresschange
属性は、EventHandler
であり、
PaymentRequestUpdateEvent
のうち
shippingaddresschange
と名付けられたもの用です。
PaymentRequest
の
shippingOption
属性は、
ユーザーが配送オプションを選択したときに設定されます。デフォルトでは null です。
ユーザーが配送オプションを選択すると、配送オプション変更アルゴリズムが実行されます。
PaymentRequest
の
onshippingoptionchange
属性は、EventHandler
であり、
PaymentRequestUpdateEvent
のうち
shippingoptionchange
と名付けられたもの用です。
PaymentRequest
の
onpaymentmethodchange
属性は、EventHandler
であり、
PaymentMethodChangeEvent
のうち
"paymentmethodchange
" と名付けられたもの用です。
PaymentRequest
のインスタンスは、
以下の表に示す内部スロットとともに作成されます:
内部スロット | 説明 (規範ではない) |
---|---|
[[serializedMethodData]] |
コンストラクタに提供された methodData ですが、元のオブジェクト形式の代わりに、サポートされる方法とデータの文字列または null
を含むタプルとして表されます。
|
[[serializedModifierData]] |
シーケンス
[[details]] の
modifier 内の各項目に対応する
data
メンバーの文字列形式で直列化されたリスト、またはそのようなメンバーが存在しなかった場合は null。
|
[[details]] |
コンストラクタに最初に提供され、その後 updateWith ()
の呼び出しによって更新される、支払いリクエスト用の現在の
PaymentDetailsBase 。
data メンバーはすべて削除され、
代わりに直列化された形式で
[[serializedModifierData]]
内部スロットに格納されます。
|
[[options]] |
コンストラクタに提供された
PaymentOptions 。
|
[[state]] |
支払いリクエストの現在の 状態。 以下のように遷移します:
状態遷移は以下の図に示されています: show ()
メソッドは
状態を
"interactive" に変更します。
そこから、
abort ()
メソッドまたはその他のエラーによって
状態を "closed"
にすることができます。
同様に、
ユーザーが支払いリクエストを受け入れるアルゴリズムや
ユーザーが支払いリクエストを中止するアルゴリズムも
状態を
"closed" に変更します。
|
[[updating]] |
保留中の
updateWith ()
呼び出しが支払いリクエストを更新するために存在する場合は true、それ以外の場合は false。
|
[[acceptPromise]] |
show ()
中に作成される保留中の
Promise 。
ユーザーが支払いリクエストを受け入れた場合に解決されます。
|
[[response]] |
Null、またはこの
PaymentRequest
によって
インスタンス化された
PaymentResponse 。
|
[[handler]] |
この
PaymentRequest
に関連付けられた
支払いハンドラー。
初期値は null 。
|
WebIDLdictionary PaymentMethodData
{
required DOMString supportedMethods
;
object data
;
};
PaymentMethodData
辞書は、
サポートされる支払い方法のセットおよびそれらの方法に関連する
支払い方法固有のデータを示すために使用されます。
supportedMethods
メンバー
data
メンバー
supportedMethods
の値は配列から文字列に変更されましたが、ウェブ上の既存のコンテンツとの互換性を維持するために名前は複数形のままです。
WebIDLdictionary PaymentCurrencyAmount
{
required DOMString currency
;
required DOMString value
;
};
PaymentCurrencyAmount
辞書は、金額を提供するために使用されます。
currency
メンバー
[ISO4217] の整形式の3文字のアルファベットコード (すなわち、数値コードはサポートされていません)。それらの標準形式は大文字です。 ただし、ローカライズされた通貨記号が利用可能な通貨コードの組み合わせは、実装に依存します。
金額を表示する際、ユーザーエージェントは通貨コードを表示することを推奨 しますが、通貨記号を表示することは任意です。 これは、通貨記号が複数の異なる通貨で使用されるために曖昧になる可能性があるためです (例:"$" は USD、AUD、NZD、CAD などを意味する可能性があります)。
ユーザーエージェントは、許可されます(MAY)、
currency
メンバーの表示形式を
OS の慣習に従わせるようにフォーマットすることができます(例:ローカライズ目的で)。
この仕様を実装するユーザーエージェントは、[ISO4217] の
3文字コード形式を ECMAScript のisWellFormedCurrencyCode
抽象操作を通じて適用します。これは金額の確認および正規化アルゴリズムの一部として呼び出されます。
コードが [ISO4217] で定義された形式に従わない場合、
RangeError
がスローされます。
現在の実装では、公式の [ISO4217] リストの一部ではないが 整形式の通貨コード(例:XBT、XRP など)の使用が可能です。 提供されたコードがブラウザで表示方法を知っている通貨である場合、 実装は一般的に適切な通貨記号をユーザーインターフェイスに表示します (例:"USD" は U+0024 ドル記号($)として表示され、 "GBP" は U+00A3 ポンド記号(£)として表示され、 "PLN" は U+007A U+0142 ズウォティ(zł)として表示され、 非標準の "XBT" は U+0243 ストローク付きラテン大文字 B(Ƀ)として表示される可能性があります)。
ISO ではデジタル通貨を考慮するための取り組みが進行中であり、 これにより [ISO4217] レジストリの更新 または完全に新しいレジストリが作成される可能性があります。 コミュニティは、非標準の3文字コードの使用によって生じた曖昧さが解消されることを期待しています。 例えば、"BTC" はビットコインを指すのか、将来のブータン通貨を指すのか? 公表時点では、この進化がどのような形をとるのか、または作業が完了するまでの時間枠は不明です。 W3C ウェブ決済作業部会は ISO と連携しており、 将来的にこの仕様の改訂が関連する ISO レジストリと互換性を維持するよう努めています。
value
メンバー
{
"currency": "OMR",
"value": "1.234"
}
JavaScript の文字列 は、以下の順序で構成される場合に 有効な10進数形式の金額 です:
^-?[0-9]+(\.[0-9]+)?$
PaymentCurrencyAmount
amount を与えて
金額の確認および正規化を行うには、次の手順を実行します:
currency
)
の結果が false である場合、RangeError
例外をスローし、オプションで開発者に通貨が無効であることを通知します。
value
が
有効な10進数形式の金額でない場合、
TypeError
をスローし、
オプションで開発者に通貨が無効であることを通知します。
currency
を
ASCII
大文字に変換した結果に設定します。
PaymentCurrencyAmount
amount を与えて
合計金額の確認および正規化を行うには、次の手順を実行します:
value
の最初の
コードポイント が U+002D (-)
の場合、
TypeError
をスローし、
オプションで開発者に合計の値が負の数にできないことを通知します。
WebIDLdictionary PaymentDetailsBase
{
sequence<PaymentItem
> displayItems
;
sequence<PaymentShippingOption
> shippingOptions
;
sequence<PaymentDetailsModifier
> modifiers
;
};
displayItems
メンバー
PaymentItem
辞書のシーケンス。
ユーザーエージェントが表示できる支払いリクエストの行項目を含みます。
shippingOptions
メンバー
ユーザーが選択できるさまざまな配送オプションを含むシーケンスです。
シーケンス内のアイテムに
selected
メンバーが設定されている場合、それがデフォルトで使用される配送オプションとなり、
shippingOption
は設定されます。
id
に設定されます。
shippingOptions
メンバーは、
PaymentRequest
が
PaymentOptions
と
requestShipping
を設定した場合にのみ使用されます。
modifiers
メンバー
PaymentDetailsModifier
辞書のシーケンス。
例えば、支払い方法に基づいて合計金額を調整することができます。
WebIDLdictionary PaymentDetailsInit
: PaymentDetailsBase
{
DOMString id
;
required PaymentItem
total
;
};
PaymentDetailsBase
辞書から継承されたメンバーに加えて、以下のメンバーが
PaymentDetailsInit
辞書の一部です:
id
メンバー
total
メンバー
PaymentItem
。
WebIDLdictionary PaymentDetailsUpdate
: PaymentDetailsBase
{
DOMString error
;
PaymentItem
total
;
AddressErrors
shippingAddressErrors
;
PayerErrors
payerErrors
;
object paymentMethodErrors
;
};
PaymentDetailsUpdate
辞書は、updateWith
()
を使用して支払いリクエストを更新するために使用されます。
PaymentDetailsBase
辞書から継承されたメンバーに加えて、以下のメンバーが
PaymentDetailsUpdate
辞書の一部です:
error
メンバー
updateWith
()
を使用して支払いリクエストが更新される場合、
PaymentDetailsUpdate
は、error
メンバーにメッセージを含めることができ、
shippingOptions
が有効でない場合、ユーザーに表示されます。
total
メンバー
PaymentItem
を含みます。
この仕様のアルゴリズムは、
PaymentDetailsUpdate
辞書を受け入れる際、
total
.amount
.value
が負の数値である場合に例外をスローします。
shippingAddressErrors
メンバー
payerErrors
メンバー
paymentMethodErrors
メンバー
支払い方法に特有のエラー。
WebIDLdictionary PaymentDetailsModifier
{
required DOMString supportedMethods
;
PaymentItem
total
;
sequence<PaymentItem
> additionalDisplayItems
;
object data
;
};
PaymentDetailsModifier
辞書は、PaymentDetailsBase
を
支払い方法識別子に基づいて修正する詳細を提供します。
以下のメンバーを含みます:
supportedMethods
メンバー
PaymentDetailsModifier
のメンバーは、ユーザーがこの
支払い方法を選択した場合にのみ適用されます。
total
メンバー
PaymentItem
値で、
total
メンバーを上書きします。
これは、
PaymentDetailsInit
辞書の supportedMethods
メンバーの 支払い方法識別子に対して適用されます。
additionalDisplayItems
メンバー
PaymentItem
辞書のシーケンスで、
displayItems
メンバーに追加される
追加の表示項目を提供します。
これは、PaymentDetailsBase
辞書の
supportedMethods
メンバーの 支払い方法識別子
に対して適用されます。このメンバーは通常、割引や追加料金の行項目を追加するために使用され、選択された
支払い方法の異なる
total
金額の理由を示します。
開発者は、
total
金額が
displayItems
と
additionalDisplayItems
の合計であることを確認する責任があります。
data
メンバー
WebIDLenum PaymentShippingType
{
"shipping
",
"delivery
",
"pickup
"
};
shipping
"
delivery
"
pickup
"
WebIDLdictionary PaymentOptions
{
boolean requestPayerName
= false;
boolean requestBillingAddress
= false;
boolean requestPayerEmail
= false;
boolean requestPayerPhone
= false;
boolean requestShipping
= false;
PaymentShippingType
shippingType
= "shipping";
};
PaymentOptions
辞書は
PaymentRequest
コンストラクタに渡され、支払いリクエストに必要なオプションに関する情報を提供します。
requestBillingAddress
メンバー
requestPayerName
メンバー
requestPayerEmail
メンバー
requestPayerPhone
メンバー
requestShipping
メンバー
shippingType
メンバー
PaymentShippingType
列挙型の値。
一部の取引では、配送のための
住所
が必要ですが、「配送」という用語が適切ではない場合があります。
例えば、「ピザの配達」や「洗濯物の受け取り」などの場合です。
requestShipping
が true に設定されている場合、この
shippingType
メンバーは
ユーザーエージェントが配送先住所を収集するためのユーザーインターフェイスの方法に影響を与える可能性があります。
shippingType
メンバーは
支払いリクエストのユーザーインターフェイスのみに影響を与えます。
WebIDLdictionary PaymentItem
{
required DOMString label
;
required PaymentCurrencyAmount
amount
;
boolean pending
= false;
};
一つ以上の PaymentItem
辞書のシーケンスは、
支払いリクエストの内容と要求される金額を示すために
PaymentDetailsBase
辞書に含まれます。
label
メンバー
amount
メンバー
PaymentCurrencyAmount
。
pending
メンバー
amount
メンバーが最終的ではないことを意味します。
これは通常、配送先住所や配送オプションの選択に依存する配送費や税額などの項目を表示するために使用されます。
ユーザーエージェント は支払いリクエストのユーザーインターフェースで保留中のフィールドを示す場合があります。
WebIDLdictionary PaymentCompleteDetails
{
object? data
= null;
};
PaymentCompleteDetails
辞書は、支払いリクエストが完了したときに、商人のウェブサイトから支払いハンドラーに追加情報を提供します。
PaymentCompleteDetails
辞書には次のメンバーが含まれます:
data
メンバー
PaymentResponse
の
支払い方法 が必要とする可能性がある任意の情報を提供するオブジェクト。
提供された場合、それは
シリアライズ
されます。
WebIDLenum PaymentComplete
{
"fail
",
"success
",
"unknown
"
};
fail
"
success
"
unknown
"
WebIDLdictionary PaymentShippingOption
{
required DOMString id
;
required DOMString label
;
required PaymentCurrencyAmount
amount
;
boolean selected
= false;
};
PaymentShippingOption
辞書には配送オプションを記述するメンバーが含まれています。
開発者は、変更イベントに応答して
updateWith
()
メソッドを呼び出すことで、ユーザーに1つ以上の配送オプションを提供できます。
id
メンバー
PaymentShippingOption
を参照するために使用される文字列識別子。
これは、特定のPaymentRequest
に対して一意でなければなりません。
label
メンバー
amount
メンバー
PaymentCurrencyAmount
。
selected
メンバー
PaymentShippingOption
であることを示します。
ユーザーエージェント は
ユーザーインターフェースでこのオプションをデフォルトで表示するべきです。
WebIDL[SecureContext, Exposed=Window]
interface PaymentResponse
: EventTarget {
[Default] object toJSON();
readonly attribute DOMString requestId
;
readonly attribute DOMString methodName
;
readonly attribute object details
;
readonly attribute ContactAddress? shippingAddress
;
readonly attribute DOMString? shippingOption
;
readonly attribute DOMString? payerName
;
readonly attribute DOMString? payerEmail
;
readonly attribute DOMString? payerPhone
;
[NewObject]
Promise<undefined> complete
(
optional PaymentComplete
result = "unknown",
optional PaymentCompleteDetails
details = {}
);
[NewObject]
Promise<undefined> retry
(optional PaymentValidationErrors
errorFields = {});
attribute EventHandler onpayerdetailchange
;
};
PaymentResponse
は、
ユーザーが支払い方法を選択し、支払いリクエストを承認したときに返されます。
retry(errorFields)
メソッドは、次のように動作しなければなりません(MUST):
[[request]]
とする。
Document
とする。
AbortError
" の DOMException
で 拒否された
promise を返す。
[[complete]]
が true の場合、"InvalidStateError
" の
DOMException
で 拒否された
promise を返す。
[[retryPromise]]
が null でない場合、"InvalidStateError
" の
DOMException
で 拒否された
promise を返す。
[[state]]
を
"interactive" に設定する。
[[retryPromise]]
を
retryPromise に設定する。
[[options]]
.requestPayerName
が false であり、かつ
errorFields.payer
.name
が存在する場合。
[[options]]
.requestPayerEmail
が false であり、かつ
errorFields.payer
.email
が存在する場合。
[[options]]
.requestPayerPhone
が false であり、かつ
errorFields.payer
.phone
が存在する場合。
[[options]]
.requestShipping
が false であり、かつ
errorFields.shippingAddress
が存在する場合。
paymentMethod
メンバーが渡され、かつ response.methodName
を定義する仕様でそれが要求されている場合は、errorFields の
paymentMethod
メンバーをそこで指定された型の IDL 値に変換する。そうでない場合は、object
に変換する。
error
メンバーが渡された場合は、そのエラーをユーザーエージェントの UI
に提示する。メンバーの値が空文字列である場合、ユーザーエージェントは適切なエラーメッセージで値を代用してもよい(MAY)。
[[retryPromise]]
を null に設定する。
retryPromise は後に、ユーザーが支払いリクエストを受諾するアルゴリズム によって解決されるか、ユーザーが支払いリクエストを中止するアルゴリズム または 更新を中止 によって拒否されます。
WebIDLdictionary PaymentValidationErrors
{
PayerErrors
payer
;
AddressErrors
shippingAddress
;
DOMString error
;
object paymentMethod
;
};
payer
メンバー
shippingAddress
メンバー
PaymentResponse
の
shippingAddress
に関する検証エラーを表します。
error
メンバー
error
メンバーだけを渡して検証問題の概要を示すことも、PaymentValidationErrors
辞書の他のメンバーと組み合わせて渡すこともできます。
paymentMethod
メンバー
WebIDLdictionary PayerErrors
{
DOMString email
;
DOMString name
;
DOMString phone
;
};
PayerErrors
は、1 つ以上の 支払者の詳細 に関する検証エラーを表すために使用されます。
支払者の詳細 とは、支払者の氏名、電話番号、メールアドレスのいずれかを指します。
email
メンバー
PaymentResponse
の
payerEmail
属性の値を提供した入力フィールドに対応します。
name
メンバー
PaymentResponse
の
payerName
属性の値を提供した入力フィールドに対応します。
phone
メンバー
PaymentResponse
の
payerPhone
属性の値を提供した入力フィールドに対応します。
マーチャントが取引を処理または検証するために使用できる、支払い方法 によって生成された object
または dictionary(どの 支払い方法 かに依存します)。
requestShipping
メンバーが、
PaymentRequest
コンストラクタに渡された
PaymentOptions
内で true に設定されていた場合、
shippingAddress
はユーザーが選択した
完全かつ最終的な
配送先住所となります。
requestShipping
メンバーが、
PaymentRequest
コンストラクタに渡された
PaymentOptions
内で true に設定されていた場合、
shippingOption
は選択された配送オプションの
id
属性となります。
requestPayerName
メンバーが、
PaymentRequest
コンストラクタに渡された
PaymentOptions
内で true に設定されていた場合、
payerName
はユーザーが提供した氏名となります。
requestPayerEmail
メンバーが、
PaymentRequest
コンストラクタに渡された
PaymentOptions
内で true に設定されていた場合、
payerEmail
はユーザーが選択したメールアドレスとなります。
requestPayerPhone
メンバーが、
PaymentRequest
コンストラクタに渡された
PaymentOptions
内で true に設定されていた場合、
payerPhone
はユーザーが選択した電話番号となります。
この支払い応答を生成した対応する支払いリクエストの id
。
complete
()
メソッドは、
ユーザーが支払いリクエストを受諾し
[[acceptPromise]]
が解決された後に呼び出されます。
complete
()
メソッドの呼び出しは
ユーザーエージェント に対し、支払いのやり取りが終了したことを知らせ
(残っているユーザーインターフェイスは閉じられるべきです(SHOULD))。
支払いリクエストが受諾され、呼び出し元に
PaymentResponse
が返された後で、
呼び出し元が complete
()
を呼び出す前は、
支払いリクエストのユーザーインターフェイスは保留状態のままです。
この時点では支払いリクエストの受諾が返ってきているため、ユーザーインターフェイスはキャンセルコマンドを提供すべきではありません(SHOULD NOT)。
しかし、何らかの問題が発生し開発者が complete
()
を呼び出さない場合、
ユーザーインターフェイスはブロックされます。
このため、実装は開発者が complete
()
を呼び出すための
タイムアウトを課してもよい(MAY)とします。タイムアウトが期限切れになった場合、
引数なしで complete
()
が呼び出されたかのように動作します。
complete
()
メソッドは次のように動作しなければなりません(MUST):
[[complete]]
が true の場合、
"InvalidStateError
" の
DOMException
で
拒否された
promise を返す。
[[retryPromise]]
が null でない場合、
"InvalidStateError
" の
DOMException
で
拒否された
promise を返す。
data
を
JSON 文字列へ直列化した結果とする。
methodName
を定義する仕様で要求されている場合:
JSON
の
parse
()
に
serializedData を渡して呼び出した結果とする。
methodName
を定義する仕様で要求されている場合、
idl のメンバーを検証する。メンバーの値が無効であれば、
拒否された
promise を
TypeError
で返す。
[[complete]]
を true に設定する。
開発者が "payerdetailchange
" イベントを処理できるようにします。
PaymentResponse
のインスタンスは、
次の表の internal
slots とともに作成されます:
内部スロット | 説明(非規範的) |
---|---|
[[complete]] |
支払い要求が完了している(すなわち
complete ()
が呼び出された、
もしくは致命的なエラーにより応答がもはや使用不能になった)場合は true、
それ以外の場合は false。
|
[[request]] |
この PaymentResponse
を生成した
PaymentRequest
のインスタンス。
|
[[retryPromise]] |
Null、または
Promise 。
user
accepts the
payment request の際に解決され、user aborts the payment
request の場合は拒否される。
|
PaymentRequest
インターフェースは、商人がユーザーに対して配送および/または請求の目的で
物理的住所の提供を依頼できるようにします。
配送先住所 と
請求先住所 は、
物理的住所です。
WebIDLdictionary AddressErrors
{
DOMString addressLine
;
DOMString city
;
DOMString country
;
DOMString dependentLocality
;
DOMString organization
;
DOMString phone
;
DOMString postalCode
;
DOMString recipient
;
DOMString region
;
DOMString sortingCode
;
};
AddressErrors
辞書のメンバーは、
物理的住所の特定の部分に関する検証エラーを表します。
各辞書メンバーには二重の機能があります。第一に、そのメンバーが存在することは住所の特定部分に検証エラーがあることを示します。
第二に、その文字列値により、開発者は検証エラー(およびエンドユーザーがエラーをどのように修正できるか)を記述できます。
開発者は、ユーザーが住所の一部を修正できない場合があることを認識しておく必要があります。 そのため、ユーザーが制御できない事項の修正を求めないよう注意する必要があります。
addressLine
メンバー
ContactAddress
の
addressLine
属性値を提供した入力フィールドに対応します。
city
メンバー
ContactAddress
の
city
属性値を提供した入力フィールドに対応します。
country
メンバー
ContactAddress
の
country
属性値を提供した入力フィールドに対応します。
dependentLocality
メンバー
ContactAddress
の
dependentLocality
属性値を提供した入力フィールドに対応します。
organization
メンバー
ContactAddress
の
organization
属性値を提供した入力フィールドに対応します。
phone
メンバー
ContactAddress
の
phone
属性値を提供した入力フィールドに対応します。
postalCode
メンバー
ContactAddress
の
postalCode
属性値を提供した入力フィールドに対応します。
recipient
メンバー
ContactAddress
の
addressLine
属性値を提供した入力フィールドに対応します。
region
メンバー
ContactAddress
の
region
属性値を提供した入力フィールドに対応します。
sortingCode
メンバー
ContactAddress
の
sortingCode
属性値を提供した入力フィールドに対応します。
この仕様は、文字列 "payment" によって識別される ポリシー制御機能 を定義します [permissions-policy]。その 既定の許可リスト は 'self' です。
この節は非規範的です。
イベント名 | インターフェース | 次のときにディスパッチされる… | ターゲット |
---|---|---|---|
shippingaddresschange
|
PaymentRequestUpdateEvent
|
ユーザーが新しい配送先住所を提供したとき。 |
PaymentRequest
|
shippingoptionchange
|
PaymentRequestUpdateEvent
|
ユーザーが新しい配送オプションを選択したとき。 |
PaymentRequest
|
payerdetailchange
|
PaymentRequestUpdateEvent
|
ユーザーが支払者の氏名・メール・電話番号を変更したとき(payer detail changed algorithm を参照)。 |
PaymentResponse
|
paymentmethodchange
|
PaymentMethodChangeEvent
|
ユーザーが 支払い方法 を 支払いハンドラー 内で別のものに選択したとき。 |
PaymentRequest
|
WebIDL[SecureContext, Exposed=Window]
interface PaymentMethodChangeEvent
: PaymentRequestUpdateEvent
{
constructor
(DOMString type, optional PaymentMethodChangeEventInit
eventInitDict = {});
readonly attribute DOMString methodName
;
readonly attribute object? methodDetails
;
};
取得時には、初期化時に設定された値を返します。詳細は
methodDetails
メンバー(
PaymentMethodChangeEventInit
)
を参照してください。
取得時には、初期化時に設定された値を返します。詳細は
methodName
メンバー(
PaymentMethodChangeEventInit
)
を参照してください。
WebIDLdictionary PaymentMethodChangeEventInit
: PaymentRequestUpdateEventInit
{
DOMString methodName
= "";
object? methodDetails
= null;
};
methodName
メンバー
methodDetails
メンバー
WebIDL[SecureContext, Exposed=Window]
interface PaymentRequestUpdateEvent
: Event {
constructor
(DOMString type, optional PaymentRequestUpdateEventInit
eventInitDict = {});
undefined updateWith
(Promise<PaymentDetailsUpdate
> detailsPromise);
};
PaymentRequestUpdateEvent
は、
ユーザー操作に応答して支払いリクエストの詳細を更新できるようにします。
PaymentRequestUpdateEvent
の
constructor
(type, eventInitDict)
は次のように動作しなければなりません(MUST):
PaymentRequestUpdateEvent
に対して
type および eventInitDict とともに呼び出した結果とする。
[[waitForUpdate]]
を
false に設定する。
updateWith
()
(detailsPromise 付き)メソッドは、次のように動作しなければなりません(MUST):
isTrusted
属性が
false の場合、
"throw" で
"InvalidStateError
"
の
DOMException
を送出する。
[[waitForUpdate]]
が
true の場合、
"throw" で
"InvalidStateError
"
の
DOMException
を送出する。
PaymentResponse
のインスタンスである場合、
request を
event の
target の
[[request]]
とする。
PaymentRequest
のインスタンスである。
[[state]]
が
"interactive" でない場合、
"throw" で
"InvalidStateError
"
の
DOMException
を送出する。
[[updating]]
が true の場合、
"throw" で
"InvalidStateError
"
の
DOMException
を送出する。
[[waitForUpdate]]
を
true に設定する。
methodName
属性を持つ場合、pmi をその
methodName
属性の値に設定する。
PaymentRequest
's details algorithm を実行する。
PaymentRequestUpdateEvent
のインスタンスは、
次の表の
internal
slots とともに作成されます:
内部スロット | 説明(非規範的) |
---|---|
[[waitForUpdate]] |
updateWith ()
によって開始された更新が現在進行中であるかどうかを示す boolean。
|
WebIDLdictionary PaymentRequestUpdateEventInit
: EventInit {};
内部スロット
[[state]]
が
PaymentRequest
オブジェクトで
"interactive" に設定されると、
ユーザーエージェントは
ユーザー操作に基づいて以下のアルゴリズムをトリガーします。
支払い可能かどうかのアルゴリズムは、
ユーザーエージェントが
支払い方法により
支払いを実行できるかを、PaymentRequest
が構築された際に指定されたそれらの
支払い方法に対して確認します。
PaymentRequest
オブジェクトとする。
[[state]]
が
"created" でない場合、
"InvalidStateError
" の
DOMException
で拒否された
promise を返す。
NotAllowedError
" の
DOMException
で拒否された
promise を返してもよい。
これは、フィンガープリント目的での呼び出しメソッドの乱用を検出・防止するために、
ユーザーエージェントがヒューリスティクスを適用できるようにするものです。例えば、
さまざまなサポート対象のPaymentRequest
オブジェクトを作成し、
多様な支払い方法を指定して、
それらに対して順番に
支払い可能かどうかのアルゴリズム をトリガーする、といった場合です。
例えば、ユーザーエージェントは成功する呼び出し回数を、
トップレベル閲覧コンテキスト
やそれらの呼び出しが行われた期間に基づいて制限するかもしれません。
[[serializedMethodData]]
の各 paymentMethod タプルについて:
配送先住所変更アルゴリズムは、ユーザーが新しい配送先住所を提供したときに実行されます。 これは以下の手順を実行しなければなりません(MUST)。
PaymentRequest
オブジェクトを
request とする。
redactList は、この API が商人と共有する受取人に関する個人情報の量を制限します。
商人にとって、結果として得られる
ContactAddress
オブジェクトは、例えば配送料の計算に十分な情報を提供しますが、
多くの場合、受取人を物理的に特定し一意に識別するのに十分な情報は提供しません。
残念ながら、redactList があっても受取人の匿名性は保証できません。 これは、一部の国では郵便番号が非常に細分化されており、 それ自体で受取人を一意に識別できてしまうためです。
shippingAddress
を
address に設定する。
shippingaddresschange
" を引数に、
PaymentRequest 更新アルゴリズム を実行する。
配送オプション変更アルゴリズムは、ユーザーが新しい配送オプションを選択したときに実行されます。 これは以下の手順を実行しなければなりません(MUST)。
PaymentRequest
オブジェクトを
request とする。
shippingOption
属性を、ユーザーが指定した
PaymentShippingOption
の
id
文字列に設定する。
shippingoptionchange
" を引数に、
PaymentRequest 更新アルゴリズム を実行する。
ユーザーが 支払い方法 を変更したとき、支払いハンドラーは、MAY(実施してもよい)として
支払い方法変更アルゴリズム を実行できます。
その際に渡される methodDetails は
dictionary または
object
、あるいは null であり、
methodName は DOMString で、ユーザーが操作中の
支払いハンドラーの
支払い方法識別子 を表します。
ユーザーが支払い方法(例:クレジットカード)を選択または変更すると、
PaymentMethodChangeEvent
には
税計算を行う目的でマスキング(秘匿)された請求先住所情報が含まれます。
マスキング対象の属性には、住所行、
小地域(dependent
locality)、
組織、
電話番号、
および 受取人
などが含まれます(これらに限りません)。
PaymentRequest
オブジェクトを
request とする。
[[updating]]
は false であること。
同時に行える更新は 1 回のみである。
[[state]]
は
"interactive" であること。
paymentmethodchange
" のイベントを
request に対して発火し、
PaymentMethodChangeEvent
を用いる。
このとき、
methodName
属性は methodName に初期化し、
methodDetails
属性は methodDetails に初期化する。
PaymentRequest 更新アルゴリズム は、
上記の他のアルゴリズムから呼び出され、ユーザーが
PaymentRequest
(request)に対して変更を行ったことを示すための
イベントの発火を行う。
発火するイベント名は name とする。
[[updating]]
は false であること。
同時に行える更新は 1 回のみである。
[[state]]
は
"interactive" であること。
PaymentRequestUpdateEvent
インターフェイスを用いて作成した結果とする。
type
属性を
name に初期化する。
[[waitForUpdate]]
が true なら、
追加の更新イベントを発火させる可能性のある UI の部分を無効化する。
[[waitForUpdate]]
を true に設定する。
ユーザーが UI で payer name、payer email、または payer phone を変更したとき、ユーザーエージェントは MUST(実施しなければならない)として 支払者詳細変更アルゴリズム を実行する。
PaymentRequest
オブジェクトを
request とする。
[[response]]
が null の場合は、何もせず戻る。
[[response]]
とする。
[[updating]]
は false であること。
[[state]]
は
"interactive" であること。
[[options]]
とする。
requestPayerName
が
true の場合:
payerName
属性を payer name に設定する。
requestPayerEmail
が true の場合:
payerEmail
を
payer email に設定する。
requestPayerPhone
が true の場合:
payerPhone
を
payer phone に設定する。
PaymentRequestUpdateEvent
を用いて作成した結果とする。
type
属性を
"payerdetailchange
" に初期化する。
[[waitForUpdate]]
が true なら、
支払者詳細のさらなる変更を発火させる可能性のある UI の部分を無効化する。
[[waitForUpdate]]
を true に設定する。
ユーザーが支払いリクエストを受諾するアルゴリズム は、 ユーザーが支払いリクエストを受諾し、支払う意思を確認したときに実行されます。次の手順を実行するため、 タスクをキューに入れ、 user interaction task source 上で実行しなければなりません(MUST)。
PaymentRequest
オブジェクトとする。
[[updating]]
が true なら、
このアルゴリズムを終了し、それ以上の処理を行わない。ユーザーエージェントの
ユーザーインターフェイスは、この状況が決して起こらないようにすべきです(SHOULD)。
[[state]]
が
"interactive" でない場合、
このアルゴリズムを終了し、それ以上の処理を行わない。ユーザーエージェントのユーザーインターフェイスは、
この状況が決して起こらないようにすべきです(SHOULD)。
requestShipping
の値が
request.[[options]]
において true の場合で、
request の
shippingAddress
属性が null、
または
request の
shippingOption
属性が
null の場合、このアルゴリズムを終了し、それ以上の処理を行わない。
ユーザーエージェント は、この状況が決して起こらないようにすべきです(SHOULD)。
[[response]]
が null でないなら true、
そうでなければ false とする。
[[response]]
とし、そうでない場合は
新しい PaymentResponse
とする。
[[request]]
を
request に設定する。
[[retryPromise]]
を null に設定する。
[[complete]]
を false に設定する。
requestId
属性値を、
request.[[details]]
の
id
の値に設定する。
[[response]]
を
response に設定する。
[[handler]]
とする。
methodName
属性値を、
handler の
支払い方法識別子 に設定する。
details
属性値を、
handler の
steps to
respond to a payment request を実行して得られるオブジェクトに設定する。
requestShipping
の値が
request.[[options]]
において false の場合、
response の
shippingAddress
属性値を
null に設定する。そうでなければ:
shippingAddress
属性値を shippingAddress に設定する。
shippingAddress
属性値を shippingAddress に設定する。
requestShipping
の値が
request.[[options]]
において true の場合、
response の
shippingOption
属性を、
request の
shippingOption
属性の値に設定する。
そうでなければ null に設定する。
requestPayerName
の値が
request.[[options]]
において true の場合、
response の
payerName
属性を、ユーザーが提供した
支払者の氏名に(提供がなければ null に)設定する。そうでなければ null に設定する。
requestPayerEmail
の値が
request.[[options]]
において true の場合、
response の
payerEmail
属性を、ユーザーが提供した
支払者のメールアドレスに(提供がなければ null に)設定する。そうでなければ null に設定する。
requestPayerPhone
の値が
request.[[options]]
において true の場合、
response の
payerPhone
属性を、ユーザーが提供した
支払者の電話番号に(提供がなければ null に)設定する。
payerPhone
の値を設定する際、
ユーザーエージェントは [E.164] に準拠するよう
電話番号をフォーマットすべきです(SHOULD)。
[[state]]
を
"closed" に設定する。
[[retryPromise]]
を undefined で解決する。
そうでなければ、
request.[[acceptPromise]]
を
response で解決する。
ユーザーが支払いリクエストを中止するアルゴリズム は、 現在インタラクティブなユーザーインターフェイスを通じてユーザーが支払いリクエストを中止したときに実行されます。 次の手順を実行するために、 タスクをキューに入れ、 user interaction task source 上で実行しなければなりません(MUST)。
PaymentRequest
オブジェクトとする。
[[state]]
が
"interactive" でない場合、
このアルゴリズムを終了し、それ以上の処理を行わない。ユーザーエージェントのユーザーインターフェイスは、
この状況が決して起こらないようにすべきです(SHOULD)。
[[state]]
を
"closed" に設定する。
AbortError
" の
DOMException
とする。
[[response]]
とする。
[[complete]]
を true に設定する。
[[retryPromise]]
は
null ではない。
[[retryPromise]]
を
error で拒否する。
[[acceptPromise]]
を
error で拒否する。
PaymentRequest
の details を更新する
アルゴリズムは、PaymentDetailsUpdate
の detailsPromise、PaymentRequest
の
request、および
DOMString か null(支払い方法識別子)である
pmi を受け取ります。手順は detailsPromise の決着に依存します。もし detailsPromise が決着しない場合、
支払いリクエストはブロックされます。ユーザーエージェントは支払いリクエストを中止する手段を提供すべきです(SHOULD)。実装は、
detailsPromise が妥当な時間内に決着しない場合、保留中の更新にタイムアウトを設けてもよいです(MAY)。
タイムアウトが発生した場合、またはユーザーが手動で中止した場合、あるいは 支払いハンドラーが当該支払いを中止することを決定した場合には、 ユーザーエージェントは ユーザーが支払いリクエストを中止する アルゴリズムを実行しなければなりません(MUST)。
[[updating]]
を true に設定する。
AbortError
"
の DOMException
を用いる。
PaymentDetailsUpdate
辞書へ変換した結果とする。これが例外を
送出した場合は、
更新を中止し、request と
その送出された例外を用いる。
sequence
<PaymentShippingOption
> とする。
total
メンバーが存在する場合:
total
.amount
に対して行う。
例外が送出された場合は、更新を中止
し、request とその例外を用いる。
displayItems
メンバーが存在する場合、各 item について
details.displayItems
内を反復する:
shippingOptions
メンバーが存在し、かつ
request.[[options]]
.requestShipping
が true の場合:
shippingOptions
を反復する:
modifiers
メンバーが存在する場合:
modifiers
。
PaymentDetailsModifier
の modifier について
modifiers を反復する:
supportedMethods
で実行する。false を返した場合は、
更新を中止し、
request と
RangeError
例外を用いる。任意で、開発者に支払い方法識別子が無効であることを通知してもよい。
total
メンバーが存在する場合:
total
.amount
に対して行う。例外が送出された場合は
更新を中止し、
request とその例外を用いる。
additionalDisplayItems
が modifier に存在する場合、各
PaymentItem
の item について
modifier.additionalDisplayItems
を反復する:
data
メンバーが欠落している場合は、serializedData を null とする。
それ以外の場合、serializedData を
直列化により
modifier.data
を JSON 文字列へ変換した結果とする。例外が送出された場合は、
更新を中止し、
request とその例外を用いる。
data
メンバーを削除する。
paymentMethodErrors
メンバーが存在し、かつ identifier が null でない場合:
paymentMethodErrors
を IDL 値へ変換する。
paymentMethodErrors
の関連する誤った各フィールドに対してエラーを表示すべきです(SHOULD)。
PaymentRequest
を更新する:
total
メンバーが存在する場合:
[[details]]
.total
を
details.total
に設定する。
displayItems
メンバーが存在する場合:
[[details]]
.displayItems
を
details.displayItems
に設定する。
shippingOptions
メンバーが存在し、かつ
request.[[options]]
.requestShipping
が true の場合:
[[details]]
.shippingOptions
を shippingOptions に設定する。
shippingOption
属性の値を
selectedShippingOption に設定する。
modifiers
メンバーが存在する場合:
[[details]]
.modifiers
を
details.modifiers
に設定する。
[[serializedModifierData]]
を serializedModifierData に設定する。
もし
request.[[options]]
.requestShipping
が true で、
request.[[details]]
.shippingOptions
が空である場合、開発者は現在選択されている配送先住所(request の
shippingAddress
により与えられる)に対して有効な配送オプションがないことを示しています。
この場合、ユーザーエージェントはこの旨のエラーを表示すべきであり(SHOULD)、
現在選択されている配送先住所が何らかの理由で無効であることを示してもよいです(MAY)。
ユーザーエージェントは、存在する場合には
error
メンバーを用いて、その住所に有効な配送オプションがない理由に関する情報を提供すべきです(SHOULD)。
さらに、
details["shippingAddressErrors
"]
メンバーが存在する場合、ユーザーエージェントは配送先住所の各誤ったフィールドに対して個別のエラーを表示すべきです(SHOULD)。
これは、表示されているユーザーインターフェイス内の対応する入力フィールドに、
AddressErrors
の各存在するメンバーを対応付けることで行います。
同様に、details["payerErrors
"] メンバーが存在し、
かつ request.[[options]]
の
requestPayerName
、
requestPayerEmail
、
または
requestPayerPhone
が true の場合、各誤ったフィールドに対して個別のエラーを表示します。
さらに、
details.paymentMethodErrors
が存在する場合、当該支払い方法の各誤った入力フィールドに対して個別のエラーを表示します。
[[updating]]
を false に設定する。
PaymentRequest
の request と
例外
exception を使って 更新を中止するには:
[[state]]
を
"closed" に設定する。
[[response]]
とする。
[[complete]]
を
true に設定する。
[[retryPromise]]
は null ではない。
[[retryPromise]]
を exception で拒否する。
[[acceptPromise]]
を
exception で拒否する。
[[updating]]
を false に設定する。
更新を中止は、提供された detailsPromise の拒否や、その履行値に無効なデータが含まれているといった、支払いリクエストの更新における致命的なエラーが発生したときに実行されます。これは、 開発者が変更イベントを正常に処理できていないため、支払いリクエストが不整合な状態のままになる可能性があります。
その結果、PaymentRequest
は
"closed" 状態に移行します。エラーは、
[[acceptPromise]]
(すなわち、
show
()
により返される
promise)を拒否することで開発者に通知されます。
同様に、更新の中止が
retry
()
の最中に発生した場合、
[[retryPromise]]
は
拒否され、対応する
PaymentResponse
の
[[complete]]
内部スロットは
true(すなわち、もはや使用できない)に設定されます。
この節は非規範的です。
ユーザーが機微な認証情報をオリジンに不注意に共有してしまうことを防ぐため、本 API は
PaymentRequest の
show
()
メソッドが、該当する
Window
に一時的なアクティベーション(例:
クリックや押下)を有している間に呼び出されることを要求します。
迷いや混乱のないユーザー体験のために、この仕様は
show
()
メソッドにより、ユーザーエージェントが同時に表示できる UI を 1 つに制限します。
さらに、ユーザーエージェントは、ページが
show
()
を呼び出せる頻度を制限できます。
この節は非規範的です。
この仕様で定義される API は、セキュアコンテキストでのみ公開されます。 詳細は Secure Contexts 仕様も参照してください。 実際には、この API は HTTPS 経由でのみ利用可能です。これは、支払い方法データ(例: クレジットカード番号)が平文で送信される可能性を抑制するためです。
この節は非規範的です。
商人やその他の受取人が、チェックアウトやその他の e コマースの処理を支払いサービスプロバイダーに委任することは一般的であり、
その際には
iframe
が用いられます。本 API は、[HTML] の
allow
属性を通じて、受取人が許可したクロスオリジン iframe をサポートします。
支払いハンドラーは、
iframe
をホストするオリジンと、
その内容(そこで
PaymentRequest
が開始される)のオリジンの双方にアクセスできます。
この節は非規範的です。
PaymentRequest
API はデータフィールドの暗号化を直接はサポートしません。
個々の支払い方法は暗号化データのサポートを含めることを選択できますが、
すべての支払い方法にそれを義務付けるものではありません。
この節は非規範的です。
セキュリティ上の理由から、ユーザーエージェントは
show
()
および
canMakePayment
()
におけるマッチングを、URL の
支払い方法識別子と同一オリジンの
支払いハンドラーに限定することができます。
支払い方法の所有者は、その支払い方法のために収集されたユーザーデータがどのように利用され得るかについてのプライバシーポリシーを定めます。 Payment Request API は、データが取引完了の目的で利用されるという明確な期待を設定し、この API に関連するユーザー体験もその意図を伝えます。 受取人は、いかなるデータ利用も支払い方法のポリシーに適合していることを保証する責任を負います。 取引完了を超える許容された利用については、受取人はその利用をユーザーに明確に伝えるべきです。
ユーザーエージェントは、ユーザーの同意なしに、(例: 配送先住所)などのユーザーに関する情報を開発者と共有してはなりません(MUST NOT)。
特に、PaymentMethodData
の
data
と、
PaymentResponse
の
details
メンバーは、任意のデータ交換を可能にします。
既存の支払い方法で用いられるデータモデルは広範に及ぶため、この API でデータの詳細を規定すると有用性が制限されてしまいます。
details
メンバーは、Web ベース(Payment
Handler API により定義)であれプロプライエタリであれ、支払いハンドラーからのデータを運びます。
ユーザーエージェントは、十分なユーザー同意メカニズム(取引当事者の認識や、データ共有の意図を示す仕組みなど)を含まない限り、支払いハンドラーをサポートしてはなりません(MUST NOT)。
displayItems
メンバーや
additionalDisplayItems
メンバーの値を、取引完了を容易にする目的以外で共有することは、ユーザーエージェントはしてはなりません(MUST NOT)。
PaymentMethodChangeEvent
は、選択された
支払い方法に特有の情報に基づいて、表示される合計を受取人が更新できるようにします。
例えば、選択された支払い方法に関連付けられた請求先住所が税計算(例: VAT)に影響する可能性があるため、支払者が取引を完了する前に UI
に正確な合計を表示できることが望まれます。
同時に、支払い完了前に共有される情報は可能な限り少ないことが望まれます。
したがって、ある支払い方法が
ユーザーが支払い方法を変更したときの手順を定義する場合、
PaymentMethodChangeEvent
の
methodDetails
属性を通じて共有されるデータを最小化することが重要です。
共有データを最小化するための要件やアプローチは支払い方法によって異なる可能性があり、次のようなものが含まれ得ます:
shippingAddress
から秘匿します。
PaymentResponse
.details
を通じて返される)から、
特定の要素を除外・含めるためのサポート。
受取人はこれらの指示を
PaymentMethodData
.data
を通じて提供でき、
現行 API を変更することなく支払い方法の定義が発展できるようにします。
プライバシーに敏感な情報の共有がユーザーにとって自明でない場合(例: 支払い方法の変更時など)、ユーザーエージェントは、どの情報が商人と共有されるかをユーザーに正確に通知することが推奨されます(RECOMMENDED)。
canMakePayment
()
メソッドは、さまざまな支払い方法に対するフィーチャー検出を提供します。
将来的に多数の支払い方法が利用可能になった場合、これはフィンガープリントの手段となり得ます。
ユーザーエージェントには、このメソッドの乱用からユーザーを保護することが期待されます。
例えば、ユーザーエージェントは次のようにしてユーザーフィンガープリンティングを低減できます:
レート制限のため、ユーザーエージェントは以下からの繰り返し呼び出しを考慮できます:
iframe
またはポップアップウィンドウの
オリジン。
これらのレート制限手法は、繰り返し呼び出しに伴うコストを増大させることを意図しています。 それは、複数の 登録可能ドメイン を管理するコストであったり、 複数のウィンドウ(タブやポップアップ)を開くことによるユーザー体験上の摩擦であったりします。
もしユーザーエージェントが、
show
()
メソッドの一部としてユーザーアクティベーションを要求しない場合、
追加のセキュリティ緩和策を検討する必要があります。
ユーザーアクティベーションを要求しないと、ページ上で直前のユーザー操作なしに Payment Request の UI を起動できてしまうため、
スパムやクリックジャッキング攻撃のリスクが高まります。
スパムを軽減するために、ユーザーエージェントはある閾値以降でユーザーアクティベーション要件を強制することを決定してもよいでしょう。 例えば、現在のページでユーザーアクティベーションなしに Payment Request の UI を既に表示した後などです。 クリックジャッキング攻撃を軽減するために、ユーザーエージェントはダイアログ表示直後の一定時間におけるクリックを無視する時間的閾値を実装してもよいでしょう。
もう 1 つの関連する緩和策は、
show
()
の手順 6 に存在し、
ユーザーインタラクションを開始するために文書が可視でなければならない点です。
この節は非規範的です。
Payment Request API のユーザー向け側面について、実装はフォームコントロールやその他の入力手段を通じて、プラットフォームのアクセシビリティ API と統合します。さらに、合計額、配送先住所、連絡先情報の可読性を高めるために、実装はシステムの慣例に従ってデータを整形します。
本仕様は、いくつかの他の基盤となる仕様に依存しています。
非規範的と記された節に加えて、本仕様のすべての著作ガイドライン、図、例、および注記は非規範的です。それ以外の本仕様のすべては規範的です。
本文書におけるキーワード MAY、MUST、MUST NOT、OPTIONAL、RECOMMENDED、SHOULD、および SHOULD NOT は、 ここに示すようにすべて大文字で現れた場合に限り、 BCP 14 [RFC2119] および [RFC8174] に記載されたとおりに解釈されます。
本仕様に適合性を主張できる製品のクラスは 1 つだけです:ユーザーエージェント。
本仕様は主としてウェブブラウザーを対象としていますが、他のソフトウェアも本仕様を適合的に実装できる可能性があります。
ユーザーエージェントは、本仕様に示されたアルゴリズムと区別がつかない結果が得られる限りにおいて、本仕様に示すアルゴリズムを任意の方法で実装してもよい(MAY)ものとします。
ユーザーエージェントは、サービス不能攻撃の防止、メモリ枯渇への対策、またはプラットフォーム固有の制限の回避などの目的で、制約のない入力に対して実装固有の上限を課してもよい(MAY)ものとします。入力が実装固有の上限を超えた場合、ユーザーエージェントは TypeError
を送出するか、あるいは
Promise の文脈では拒否しなければならず(MUST)、その際、特定の入力がどのように上限を超えたかについて開発者に知らせることができます(任意)。
WebIDL[SecureContext, Exposed=Window]
interface PaymentRequest
: EventTarget {
constructor
(
sequence<PaymentMethodData
> methodData,
PaymentDetailsInit
details,
optional PaymentOptions
options = {}
);
[NewObject]
Promise<PaymentResponse
> show
(optional Promise<PaymentDetailsUpdate
> detailsPromise);
[NewObject]
Promise<undefined> abort
();
[NewObject]
Promise<boolean> canMakePayment
();
readonly attribute DOMString id
;
readonly attribute ContactAddress? shippingAddress
;
readonly attribute DOMString? shippingOption
;
readonly attribute PaymentShippingType
? shippingType
;
attribute EventHandler onshippingaddresschange
;
attribute EventHandler onshippingoptionchange
;
attribute EventHandler onpaymentmethodchange
;
};
dictionary PaymentMethodData
{
required DOMString supportedMethods
;
object data
;
};
dictionary PaymentCurrencyAmount
{
required DOMString currency
;
required DOMString value
;
};
dictionary PaymentDetailsBase
{
sequence<PaymentItem
> displayItems
;
sequence<PaymentShippingOption
> shippingOptions
;
sequence<PaymentDetailsModifier
> modifiers
;
};
dictionary PaymentDetailsInit
: PaymentDetailsBase
{
DOMString id
;
required PaymentItem
total
;
};
dictionary PaymentDetailsUpdate
: PaymentDetailsBase
{
DOMString error
;
PaymentItem
total
;
AddressErrors
shippingAddressErrors
;
PayerErrors
payerErrors
;
object paymentMethodErrors
;
};
dictionary PaymentDetailsModifier
{
required DOMString supportedMethods
;
PaymentItem
total
;
sequence<PaymentItem
> additionalDisplayItems
;
object data
;
};
enum PaymentShippingType
{
"shipping
",
"delivery
",
"pickup
"
};
dictionary PaymentOptions
{
boolean requestPayerName
= false;
boolean requestBillingAddress
= false;
boolean requestPayerEmail
= false;
boolean requestPayerPhone
= false;
boolean requestShipping
= false;
PaymentShippingType
shippingType
= "shipping";
};
dictionary PaymentItem
{
required DOMString label
;
required PaymentCurrencyAmount
amount
;
boolean pending
= false;
};
dictionary PaymentCompleteDetails
{
object? data
= null;
};
enum PaymentComplete
{
"fail
",
"success
",
"unknown
"
};
dictionary PaymentShippingOption
{
required DOMString id
;
required DOMString label
;
required PaymentCurrencyAmount
amount
;
boolean selected
= false;
};
[SecureContext, Exposed=Window]
interface PaymentResponse
: EventTarget {
[Default] object toJSON();
readonly attribute DOMString requestId
;
readonly attribute DOMString methodName
;
readonly attribute object details
;
readonly attribute ContactAddress? shippingAddress
;
readonly attribute DOMString? shippingOption
;
readonly attribute DOMString? payerName
;
readonly attribute DOMString? payerEmail
;
readonly attribute DOMString? payerPhone
;
[NewObject]
Promise<undefined> complete
(
optional PaymentComplete
result = "unknown",
optional PaymentCompleteDetails
details = {}
);
[NewObject]
Promise<undefined> retry
(optional PaymentValidationErrors
errorFields = {});
attribute EventHandler onpayerdetailchange
;
};
dictionary PaymentValidationErrors
{
PayerErrors
payer
;
AddressErrors
shippingAddress
;
DOMString error
;
object paymentMethod
;
};
dictionary PayerErrors
{
DOMString email
;
DOMString name
;
DOMString phone
;
};
dictionary AddressErrors
{
DOMString addressLine
;
DOMString city
;
DOMString country
;
DOMString dependentLocality
;
DOMString organization
;
DOMString phone
;
DOMString postalCode
;
DOMString recipient
;
DOMString region
;
DOMString sortingCode
;
};
[SecureContext, Exposed=Window]
interface PaymentMethodChangeEvent
: PaymentRequestUpdateEvent
{
constructor
(DOMString type, optional PaymentMethodChangeEventInit
eventInitDict = {});
readonly attribute DOMString methodName
;
readonly attribute object? methodDetails
;
};
dictionary PaymentMethodChangeEventInit
: PaymentRequestUpdateEventInit
{
DOMString methodName
= "";
object? methodDetails
= null;
};
[SecureContext, Exposed=Window]
interface PaymentRequestUpdateEvent
: Event {
constructor
(DOMString type, optional PaymentRequestUpdateEventInit
eventInitDict = {});
undefined updateWith
(Promise<PaymentDetailsUpdate
> detailsPromise);
};
dictionary PaymentRequestUpdateEventInit
: EventInit {};
本仕様は、以前に Web Platform Incubator Community Group によって公開されたレポートから派生したものです。
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
CR2 から現在までの変更点:
CR1 から CR2 までの変更点: