| // Copyright 2016 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| [JavaPackage="org.chromium.payments.mojom"] |
| module payments.mojom; |
| |
| // The shipping address that the browser process provides to the renderer |
| // process. Built either by the browser or a payment app. |
| struct PaymentAddress { |
| // ISO 3166 country code. Two upper case ASCII letters. |
| string country; |
| |
| array<string> address_line; |
| string region; |
| string city; |
| string dependent_locality; |
| string postal_code; |
| string sorting_code; |
| |
| // Optional shortest ISO 639 language code. Two or three lower case ASCII |
| // letters. |
| string language_code; |
| |
| // Optional ISO 15924 script code. Four ASCII letters. The first letter is |
| // upper case; the rest are lower case. |
| string script_code; |
| |
| string organization; |
| string recipient; |
| string phone; |
| }; |
| |
| // The currency amount that the renderer provides to the browser process. The |
| // browser shows the amount in UI and forwards it on to the payment app, if it |
| // requires the amount. |
| struct PaymentCurrencyAmount { |
| // The most common identifiers are three-letter alphabetic codes as defined |
| // by [ISO4217] (for example, "USD" for US Dollars), however any string of at |
| // most 2048 characters is considered valid. |
| string currency; |
| |
| // ISO 20022 CurrencyAnd30Amount. Up to 30 total digits. Up to 10 fraction |
| // digits. Separated by a dot. |
| string value; |
| |
| // currencySystem is a URL that indicates the currency system that the |
| // currency identifier belongs to. By default, the value is |
| // urn:iso:std:iso:4217 indicating that currency is defined by [ISO4217] |
| // (for example, USD for US Dollars). |
| string? currencySystem; |
| }; |
| |
| struct PaymentResponse { |
| string method_name; |
| |
| // Payment method specific JSON string that is built either by the browser or |
| // a payment app, for example Android Pay. Browser ensures that the string can |
| // be successfully parsed into base::JSONParser. Renderer parses this string |
| // via v8::JSON::Parse() and hands off the result to the merchant website. |
| // There's no one format for this object, so richer types cannot be used. A |
| // simple example: |
| // |
| // {"nameOnCard": "Jon Doe", "pan": "4111 1111 1111 1111"} |
| string stringified_details; |
| |
| PaymentAddress? shipping_address; |
| string? shipping_option; |
| string? payer_name; |
| string? payer_email; |
| string? payer_phone; |
| }; |
| |
| enum PaymentErrorReason { |
| UNKNOWN, |
| USER_CANCEL, |
| NOT_SUPPORTED |
| }; |
| |
| enum ActivePaymentQueryResult { |
| CAN_MAKE_ACTIVE_PAYMENT, |
| CANNOT_MAKE_ACTIVE_PAYMENT, |
| QUERY_QUOTA_EXCEEDED |
| }; |
| |
| interface PaymentRequestClient { |
| OnShippingAddressChange(PaymentAddress address); |
| OnShippingOptionChange(string shipping_option_id); |
| OnPaymentResponse(PaymentResponse response); |
| OnError(PaymentErrorReason error); |
| OnComplete(); |
| OnAbort(bool aborted_successfully); |
| OnCanMakeActivePayment(ActivePaymentQueryResult result); |
| }; |
| |
| struct PaymentItem { |
| string label; |
| PaymentCurrencyAmount amount; |
| bool pending; |
| }; |
| |
| struct PaymentShippingOption { |
| string id; |
| string label; |
| PaymentCurrencyAmount amount; |
| bool selected; |
| }; |
| |
| struct PaymentDetailsModifier { |
| array<string> supported_methods; |
| PaymentItem? total; |
| array<PaymentItem> additional_display_items; |
| }; |
| |
| struct PaymentDetails { |
| PaymentItem total; |
| array<PaymentItem> display_items; |
| array<PaymentShippingOption> shipping_options; |
| array<PaymentDetailsModifier> modifiers; |
| string error; |
| }; |
| |
| enum PaymentShippingType { |
| SHIPPING, |
| DELIVERY, |
| PICKUP |
| }; |
| |
| struct PaymentOptions { |
| bool request_payer_name; |
| bool request_payer_email; |
| bool request_payer_phone; |
| bool request_shipping; |
| PaymentShippingType shipping_type; |
| }; |
| |
| enum AndroidPayEnvironment { |
| PRODUCTION, |
| TEST |
| }; |
| |
| enum AndroidPayCardNetwork { |
| AMEX, |
| DISCOVER, |
| MASTERCARD, |
| VISA |
| }; |
| |
| enum AndroidPayTokenization { |
| UNSPECIFIED, |
| GATEWAY_TOKEN, |
| NETWORK_TOKEN |
| }; |
| |
| struct AndroidPayTokenizationParameter { |
| string? key; |
| string? value; |
| }; |
| |
| struct PaymentMethodData { |
| array<string> supported_methods; |
| |
| // A JSON string built by the renderer from a JavaScript object that the |
| // merchant website provides. The renderer uses |
| // blink::JSONObject::toJSONString() to generate this string. The browser does |
| // not parse the string and passes it as-is directly to payment apps. There's |
| // no one format for this object, so richer types cannot be used. A simple |
| // example: |
| // |
| // {"gateway": "stripe"} |
| string stringified_data; |
| |
| // Android Pay specific method data is parsed in the renderer. |
| // https://developers.google.com/web/fundamentals/getting-started/primers/payment-request/android-pay |
| // TODO(rouslan): Stop parsing Android Pay data. http://crbug.com/620173 |
| AndroidPayEnvironment environment; |
| string? merchant_name; |
| string? merchant_id; |
| array<AndroidPayCardNetwork> allowed_card_networks; |
| AndroidPayTokenization tokenization_type; |
| array<AndroidPayTokenizationParameter> parameters; |
| }; |
| |
| enum PaymentComplete { |
| SUCCESS, |
| FAIL, |
| UNKNOWN |
| }; |
| |
| interface PaymentRequest { |
| Init(PaymentRequestClient client, |
| array<PaymentMethodData> methodData, |
| PaymentDetails details, |
| PaymentOptions options); |
| Show(); |
| UpdateWith(PaymentDetails details); |
| Abort(); |
| Complete(PaymentComplete result); |
| CanMakeActivePayment(); |
| }; |