OLD | NEW |
(Empty) | |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. |
| 4 |
| 5 [JavaPackage="org.chromium.payments.mojom"] |
| 6 module payments.mojom; |
| 7 |
| 8 // The shipping address that the browser process provides to the renderer |
| 9 // process. Built either by the browser or a payment app. |
| 10 struct PaymentAddress { |
| 11 // ISO 3166 country code. Two upper case ASCII letters. |
| 12 string country; |
| 13 |
| 14 array<string> address_line; |
| 15 string region; |
| 16 string city; |
| 17 string dependent_locality; |
| 18 string postal_code; |
| 19 string sorting_code; |
| 20 |
| 21 // Optional shortest ISO 639 language code. Two or three lower case ASCII |
| 22 // letters. |
| 23 string language_code; |
| 24 |
| 25 // Optional ISO 15924 script code. Four ASCII letters. The first letter is |
| 26 // upper case; the rest are lower case. |
| 27 string script_code; |
| 28 |
| 29 string organization; |
| 30 string recipient; |
| 31 string phone; |
| 32 }; |
| 33 |
| 34 // The currency amount that the renderer provides to the browser process. The |
| 35 // browser shows the amount in UI and forwards it on to the payment app, if it |
| 36 // requires the amount. |
| 37 struct PaymentCurrencyAmount { |
| 38 // The most common identifiers are three-letter alphabetic codes as defined |
| 39 // by [ISO4217] (for example, "USD" for US Dollars), however any string of at |
| 40 // most 2048 characters is considered valid. |
| 41 string currency; |
| 42 |
| 43 // ISO 20022 CurrencyAnd30Amount. Up to 30 total digits. Up to 10 fraction |
| 44 // digits. Separated by a dot. |
| 45 string value; |
| 46 |
| 47 // currency_system is a URL that indicates the currency system that the |
| 48 // currency identifier belongs to. By default, the value is |
| 49 // urn:iso:std:iso:4217 indicating that currency is defined by [ISO4217] |
| 50 // (for example, USD for US Dollars). |
| 51 string currency_system = "urn:iso:std:iso:4217"; |
| 52 }; |
| 53 |
| 54 struct PaymentResponse { |
| 55 string method_name; |
| 56 |
| 57 // Payment method specific JSON string that is built either by the browser or |
| 58 // a payment app, for example Android Pay. Browser ensures that the string can |
| 59 // be successfully parsed into base::JSONParser. Renderer parses this string |
| 60 // via v8::JSON::Parse() and hands off the result to the merchant website. |
| 61 // There's no one format for this object, so more specific types cannot be |
| 62 // used. A simple example: |
| 63 // |
| 64 // {"nameOnCard": "Jon Doe", "pan": "4111 1111 1111 1111"} |
| 65 string stringified_details; |
| 66 |
| 67 PaymentAddress? shipping_address; |
| 68 string? shipping_option; |
| 69 string? payer_name; |
| 70 string? payer_email; |
| 71 string? payer_phone; |
| 72 }; |
| 73 |
| 74 enum PaymentErrorReason { |
| 75 UNKNOWN, |
| 76 USER_CANCEL, |
| 77 NOT_SUPPORTED |
| 78 }; |
| 79 |
| 80 enum CanMakePaymentQueryResult { |
| 81 CAN_MAKE_PAYMENT, |
| 82 CANNOT_MAKE_PAYMENT, |
| 83 QUERY_QUOTA_EXCEEDED |
| 84 }; |
| 85 |
| 86 interface PaymentRequestClient { |
| 87 OnShippingAddressChange(PaymentAddress address); |
| 88 OnShippingOptionChange(string shipping_option_id); |
| 89 OnPaymentResponse(PaymentResponse response); |
| 90 OnError(PaymentErrorReason error); |
| 91 OnComplete(); |
| 92 OnAbort(bool aborted_successfully); |
| 93 OnCanMakePayment(CanMakePaymentQueryResult result); |
| 94 }; |
| 95 |
| 96 struct PaymentItem { |
| 97 string label; |
| 98 PaymentCurrencyAmount amount; |
| 99 bool pending; |
| 100 }; |
| 101 |
| 102 struct PaymentShippingOption { |
| 103 string id; |
| 104 string label; |
| 105 PaymentCurrencyAmount amount; |
| 106 bool selected; |
| 107 }; |
| 108 |
| 109 enum AndroidPayEnvironment { |
| 110 PRODUCTION, |
| 111 TEST |
| 112 }; |
| 113 |
| 114 enum AndroidPayCardNetwork { |
| 115 AMEX, |
| 116 DISCOVER, |
| 117 MASTERCARD, |
| 118 VISA |
| 119 }; |
| 120 |
| 121 enum AndroidPayTokenization { |
| 122 UNSPECIFIED, |
| 123 GATEWAY_TOKEN, |
| 124 NETWORK_TOKEN |
| 125 }; |
| 126 |
| 127 struct AndroidPayTokenizationParameter { |
| 128 string? key; |
| 129 string? value; |
| 130 }; |
| 131 |
| 132 enum BasicCardNetwork { |
| 133 AMEX, |
| 134 DINERS, |
| 135 DISCOVER, |
| 136 JCB, |
| 137 MASTERCARD, |
| 138 MIR, |
| 139 UNIONPAY, |
| 140 VISA |
| 141 }; |
| 142 |
| 143 enum BasicCardType { |
| 144 CREDIT, |
| 145 DEBIT, |
| 146 PREPAID |
| 147 }; |
| 148 |
| 149 struct PaymentMethodData { |
| 150 array<string> supported_methods; |
| 151 |
| 152 // A JSON string built by the renderer from a JavaScript object that the |
| 153 // merchant website provides. The renderer uses |
| 154 // blink::JSONObject::toJSONString() to generate this string. The browser does |
| 155 // not parse the string and passes it as-is directly to payment apps. There's |
| 156 // no one format for this object, so more specific types cannot be used. A |
| 157 // simple example: |
| 158 // |
| 159 // {"gateway": "stripe"} |
| 160 string stringified_data; |
| 161 |
| 162 // Android Pay specific method data is parsed in the renderer. |
| 163 // https://developers.google.com/web/fundamentals/getting-started/primers/paym
ent-request/android-pay |
| 164 // TODO(rouslan): Stop parsing Android Pay data. http://crbug.com/620173 |
| 165 AndroidPayEnvironment environment; |
| 166 string? merchant_name; |
| 167 string? merchant_id; |
| 168 array<AndroidPayCardNetwork> allowed_card_networks; |
| 169 AndroidPayTokenization tokenization_type; |
| 170 array<AndroidPayTokenizationParameter> parameters; |
| 171 // Value of 0 means the merchant did not specify or it was an invalid value. |
| 172 int32 min_google_play_services_version; |
| 173 |
| 174 // Basic card specific method data is parsed in the renderer. |
| 175 array<BasicCardNetwork> supported_networks; |
| 176 array<BasicCardType> supported_types; |
| 177 }; |
| 178 |
| 179 struct PaymentDetailsModifier { |
| 180 PaymentItem? total; |
| 181 array<PaymentItem> additional_display_items; |
| 182 PaymentMethodData method_data; |
| 183 }; |
| 184 |
| 185 struct PaymentDetails { |
| 186 PaymentItem? total; |
| 187 array<PaymentItem> display_items; |
| 188 array<PaymentShippingOption> shipping_options; |
| 189 array<PaymentDetailsModifier> modifiers; |
| 190 string error = ""; |
| 191 }; |
| 192 |
| 193 enum PaymentShippingType { |
| 194 SHIPPING, |
| 195 DELIVERY, |
| 196 PICKUP |
| 197 }; |
| 198 |
| 199 struct PaymentOptions { |
| 200 bool request_payer_name; |
| 201 bool request_payer_email; |
| 202 bool request_payer_phone; |
| 203 bool request_shipping; |
| 204 PaymentShippingType shipping_type; |
| 205 }; |
| 206 |
| 207 enum PaymentComplete { |
| 208 SUCCESS, |
| 209 FAIL, |
| 210 UNKNOWN |
| 211 }; |
| 212 |
| 213 interface PaymentRequest { |
| 214 Init(PaymentRequestClient client, |
| 215 array<PaymentMethodData> method_data, |
| 216 PaymentDetails details, |
| 217 PaymentOptions options); |
| 218 Show(); |
| 219 UpdateWith(PaymentDetails details); |
| 220 Abort(); |
| 221 Complete(PaymentComplete result); |
| 222 CanMakePayment(); |
| 223 }; |
OLD | NEW |