Re: [paymentrequest] Use navigator.payments rather than creating a new object instance (#42)

I think there's a missing distinction here between *how* you're willing to be paid and *what* you want to be paid.  The former question is the one that the user needs to be involved in, and it has a very clear event model -- you request a payment provider with some bounds, and the user hands you one.  Then you request what you want from that provider.

```
var how = { /* how am i willing to be pad? */ };
var what = { /* what do i want to be paid? */ };
navigator.payment.getProvider(how)
.then(provider => provider.requestPayment(what));
```

This also lets us reflect all these questions around different payment schemes, shipping addresses, etc. in the type system for what's returned by `getProvider()`.  The top-level `PaymentProvider` interface might only have the `requestPayment()` method, but you could have sub-interfaces that define more nuanced interactions, or expose additional capabilities (`if (provider.shippingAddress) ...`).

This also aligns pretty cleanly with the idea of registration and delegated payment.  When you register a payment provider, you need to provide the browser what it needs to fulfill the `PaymentProvider` interface.

---
Reply to this email directly or view it on GitHub:
https://github.com/WICG/paymentrequest/issues/42#issuecomment-173260987

Received on Wednesday, 20 January 2016 16:27:28 UTC