- From: Marcos Cáceres <notifications@github.com>
- Date: Thu, 07 Dec 2017 02:00:17 +0000 (UTC)
- To: w3c/payment-request <payment-request@noreply.github.com>
- Cc: Subscribed <subscribed@noreply.github.com>
- Message-ID: <w3c/payment-request/issues/647/349837761@github.com>
@aestes, @michelle-stripe, @jenan-stripe, @rsolomakhin and I discussed fine grained error recovery for fields during the F2F, including the ability to "retry" the payment. Rough proposal is to add `AddressField`: ```IDL enum AddressField { "addressLine", "city", "country", "dependentLocality", "languageCode", "organization", "phone", "postalCode", "recipient", "region", "sortingCode" }; ``` Define `PaymentError` interface, somewhat matching [ApplePayError](https://developer.apple.com/documentation/applepayjs/applepayerror): ```IDL enum PaymentErrorCode { "invalidShippingAddress", "invalidBillingAddress", // Do we need need "unknown" and "unserviceableAddress" ? }; [Constructor(PaymentErrorCode code, optional AddressField? field, optional DOMString message = "")] interface PaymentError { readonly attribute PaymentErrorCode type; readonly attribute AddressField? AddressField; readonly attribute DOMString message; }; ``` And add the following member to `PaymentDetailsUpdate`: ```IDL sequence<PaymentError> errorFields; ``` Thus, "onshippingaddresschange": ```IDL const errorField = [ new PaymentError("invalidShippingAddress", "country", "We don't ship to your country."), new PaymentError("invalidShippingAddress", "postCode", "This postcode isn't valid."), ]; ev.updateWith({ ...details, error: "Couple of issues with the shipping address.", errorFields, }); ``` Add lastly, we add `response.retry(...errors)`, which returns a promise that resolves with undefined... waits for user to try hit "Pay" again: ```JS let errors = [ new PaymentError("invalidShippingAddress", "addressLine", "I can't ship to PO boxes."), new PaymentError("invalidBillingAddress", null, "Srsly? that's an abandoned house."), ]; await response.retry(...errors); errors = checkResponse(response); if(errors.length){ // try again... this would be recursive... await response.retry(...errors); } else { const status = processPayment(response); await response.complete(status); } ``` -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/w3c/payment-request/issues/647#issuecomment-349837761
Received on Thursday, 7 December 2017 02:00:50 UTC