- From: Adrian Hope-Bailie <notifications@github.com>
- Date: Mon, 21 Dec 2015 02:14:25 -0800
- To: WICG/paymentrequest <paymentrequest@noreply.github.com>
- Message-ID: <WICG/paymentrequest/issues/42@github.com>
@dlongley has provided some well thought out analysis of the API shape here: https://github.com/w3c/webpayments/issues/41#issuecomment-165487997
Based on this I would suggest changing the API to work more like the new `fetch()` API, although I'd recommend namespaces the functions under `navigator.payments`.
This is related to #41 in that it also proposes a different method signature.
```javascript
//Processing instructions for the payment mediator
var myOptions = {
validateRequest: true,
requestSignature: { //Example from https://tools.ietf.org/html/rfc7520#section-4.3.3
"payload": "SXTigJlzIGEgZGFuZ2Vyb3VzIGJ1c2luZXNzLCBGcm9kbywg
Z29pbmcgb3V0IHlvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9h
ZCwgYW5kIGlmIHlvdSBkb24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXi
gJlzIG5vIGtub3dpbmcgd2hlcmUgeW91IG1pZ2h0IGJlIHN3ZXB0IG9m
ZiB0by4",
"protected": "eyJhbGciOiJFUzUxMiIsImtpZCI6ImJpbGJvLmJhZ2dpbn
NAaG9iYml0b24uZXhhbXBsZSJ9",
"signature": "AE_R_YZCChjn4791jSQCrdPZCNYqHXCTZH0-JZGYNlaAjP
2kqaluUIIUnC9qvbu9Plon7KRTzoNEuT4Va2cmL1eJAQy3mtPBu_u_sD
DyYjnAMDxXPn7XrT0lw-kvAD890jl8e2puQens_IEKBpHABlsbEPX6sF
Y8OcGDqoRuBomu9xQ2"
},
encryptResponse: {
responseEncryptionAlgorithm: "AES-CBC",
publicKey: 'https://merchant.com/keys/12'
}};
//Payment request data that is passed to the payment app
// This is an array of request variations indexed by
// payment method identifiers
var myRequest = [
{
methods: ["https://paypal.com/"],
details: {}, //Details of the offer
data: {}, //Payment method specific data
},
{
methods: ["https://bitcoin.org/"],
details: {}, //Details of the offer
data: {}, //Payment method specific data
}
];
//This API shape still supports events if required
navigator.payments.addEventListener("optionsChange", function (changeEvent) {
if(changeEvent.optionGroup == "shipping")
{
// Process shipping options change and update amounts
}
});
//Request a payment
navigator.payments.requestPayment(myRequest, myoptions)
.then(function(response) {
switch (response.method)
{
case "https://paypal.com/":
//Process PayPal response
break;
case "https://bitcoin.org/":
//Process Bitcoin response
break;
};
});
```
As I have suggested in https://github.com/w3c/webpayments/issues/41 you could add a `getShippingAddress()` method that could, in the long term, be a shortcut to a generic credentials request.
```javascript
navigator.payments.getShippingAddress().then(
function(address) {
if (!address)
//We'll have to get the address through the website UI
// so close the dialogue that's currently waiting for us to
// submit another request
navigator.payments.closeDialogue();
//Build request based on supplied address
// i.e. with appropriate shipping options
```
---
Reply to this email directly or view it on GitHub:
https://github.com/WICG/paymentrequest/issues/42
Received on Monday, 21 December 2015 10:14:56 UTC