blob: b6058f3c4e228d5897f71d29de8e6b02831a86c2 [file] [log] [blame]
// 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 more specific 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 CanMakePaymentQueryResult {
CAN_MAKE_PAYMENT,
CANNOT_MAKE_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);
OnCanMakePayment(CanMakePaymentQueryResult result);
};
struct PaymentItem {
string label;
PaymentCurrencyAmount amount;
bool pending;
};
struct PaymentShippingOption {
string id;
string label;
PaymentCurrencyAmount amount;
bool selected;
};
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 more specific 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;
};
struct PaymentDetailsModifier {
PaymentItem? total;
array<PaymentItem> additional_display_items;
PaymentMethodData method_data;
};
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;
};
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);
CanMakePayment();
};