Modifiche all'API di richiesta di pagamento

Chrome 62

PaymentDetailsModifier è ora disponibile

In una richiesta di pagamento, in alcuni casi potresti voler offrire uno sconto o un addebito extra a seconda del metodo di pagamento scelto dal cliente. PaymentDetailsModifier è la funzionalità che puoi utilizzare per farlo.

Aggiungi la proprietà modifiers al secondo argomento del costruttore PaymentRequest insieme a un array di oggetti PaymentDetailsModifier che sono regole dichiarative su come gli elementi di visualizzazione e il totale devono essere modificati in base al metodo di pagamento scelto dal cliente.

L'esempio seguente mostra come dichiari a un utente l'addebito di 3 $di commissioni di elaborazione per la scelta di un pagamento con carta di credito.

let methods = [{
 supportedMethods: 'basic-card',
 data: {
   supportedNetworks: ['visa', 'mastercard']
   supportedTypes: ['credit', 'debit']
 }
}];

let details = {
 displayItems: [{
   label: 'T-shirt',
   amount: { currency: 'USD', value: '68.00' }
 }],
 total: {
   label: 'Total price',
   amount: { currency: 'USD', value: '68.00' }
 },
 modifiers: [{
   supportedMethods: 'basic-card',
   data: {
     supportedTypes: ['credit']
   },
   additionalDisplayItems: [{
     label: 'Processing fee',
     amount: { currency: 'USD', value: '3.00' }
   }],
   total: {
     label: 'Credit card price',
     amount: {currency: ‘USD’, value: ‘71.00’}}
 }]
};

let options = {};

let request = new PaymentRequest(methods, details, options);

Nel foglio di richiesta di pagamento effettivo, non appena l'utente sceglie un pagamento con carta di credito, vedrà un elemento di visualizzazione aggiuntivo denominato "Commissione di elaborazione" con un addebito di 3 $, con un prezzo totale di 71,00 $.

PaymentDetailsModifier contiene i seguenti parametri:

Nome proprietà
supportedMethods Specifica il metodo di pagamento a cui si applica questa regola.
additionalDisplayItems Altri elementi display a cui vuoi aggiungere sconti o costi aggiuntivi.
total Prezzo totale dopo l'aggiunta di altriDisplayItems.
data Per il pagamento con basic-card, questo valore verrà utilizzato per filtrare tipi di carte specifici con supportedTypes. In caso contrario, l'utilizzo di questo parametro dipende dal metodo di pagamento (app di pagamento). Fai riferimento alla documentazione fornita da ciascun metodo di pagamento.

Quando sono disponibili opzioni di spedizione, la situazione può essere complicata, perché il prezzo totale di modifiers non può essere statico e richiede una modifica dinamica.

Per farlo, dovrai modificare additionalDisplayItems e total della proprietà modifiers in base agli eventi shippingaddresschange e shippingoptionchange, come faresti con la proprietà displayItems dell'oggetto PaymentDetails.

La proprietà supportedMethods ora accetta una stringa

La proprietà supportedMethods nell'oggetto PaymentMethodData (primo argomento del costruttore PaymentRequest) accetta un array di stringhe che indicano un metodo di pagamento. Ora accetta una singola stringa come argomento.

Tieni presente che, per il momento, continuerà a funzionare anche se fornisci un array.

Cosa non fare

Vecchio, ma funziona ancora per il momento.

var methodData = [{
     supportedMethods: ['basic-card'],
     data: {
       supportedNetworks: ['visa', 'mastercard', 'amex', 'jcb',
         'diners', 'discover', 'mir', 'unionpay']
     }
}, {
    supportedMethods: ['https://bobpay.xyz']
}];
Cosa fare

Nuovo, il nuovo modo.

var methodData = [{
     supportedMethods: 'basic-card',
     data: {
       supportedNetworks: ['visa', 'mastercard', 'amex', 'jcb',
         'diners', 'discover', 'mir', 'unionpay']
     }
}, {
    supportedMethods: 'https://bobpay.xyz'
}];

Chrome 61

è disponibile il metodo supportato nella scheda di base

Quando il valore di supportedMethods è "basic-card", ora puoi fornire supportedTypes per indicare i tipi di carte supportati tra "credit", "debit" e "prepaid".

var methodData = [{
 supportedMethods: 'basic-card',
 data: {
   supportedNetworks: ['visa', 'mastercard', 'amex', 'jcb',
     'diners', 'discover', 'mir', 'unionpay']
   supportedTypes: ['credit', 'debit', 'prepaid']
 }
}];

Assicurati di verificare il tipo di carta con il tuo gateway di pagamento, in quanto questo filtro potrebbe non funzionare perfettamente a seconda della fonte.

Chrome 57

PaymentRequest è ora disponibile all'interno degli iframe

Ora l'API Payment Request può essere chiamata da un iframe aggiungendo l'attributo allowpaymentrequest all'elemento iframe.

<iframe src="/totally/fake/url" allowpaymentrequest></iframe>

PaymentMethodData supporta "basic-card"

Il primo argomento del costruttore PaymentRequest() è un array di dati sul metodo di pagamento. Il formato PaymentMethodData è stato modificato in questa release.

Cosa non fare

Vecchio, ma funziona ancora per il momento.

var methodData = [{
     supportedMethods: ['visa', 'mastercard', 'amex', 'jcb']
}];
var request = new PaymentRequest(methodData, details, options);
Cosa fare

Nuovo: la nuova struttura.

var methodData = [{
     supportedMethods: ['basic-card'],
     data: {
       supportedNetworks: ['visa', 'mastercard', 'amex', 'jcb',
         'diners', 'discover', 'mir', 'unionpay']
     }
}];
var request = new PaymentRequest(methodData, details, options);

Il formato della proprietà data dipende dal valore in supportedMethods e si basa sulla specifica della scheda di base. Tieni presente che la specifica include supportedTypes che accetta credit, debit o prepaid, ma Chrome 57 ignora questa proprietà e tratta tutti i valori in supoprtedNetworks come carte di credito.

var methodData = [{
     supportedMethods: ['basic-card'],
     data: {
       supportedNetworks: ['visa', 'mastercard', 'amex', 'jcb',
         'diners', 'discover', 'mir', 'unionpay'],
       supportedTypes: ['credit'] <= not available
     }
}];

Chrome 56

in attesa

Nell'ambito delle informazioni sugli elementi di pagamento, gli sviluppatori possono aggiungere pending per indicare che il prezzo non è ancora stato completamente determinato. Il campo pending accetta un valore booleano.

    {
      label: "State tax",
      amount: { currency: "USD", value : "5.00" },
      pending: true
    },

Questo approccio viene comunemente utilizzato per mostrare elementi pubblicitari come gli importi di spedizione o le imposte che dipendono dalla selezione dell'indirizzo di spedizione o delle opzioni di spedizione. Chrome indica i campi in attesa nell'interfaccia utente della richiesta di pagamento.

requestPayerName

Nell'ambito dell'opzione di spedizione (terzo argomento di PaymentRequest), ora gli sviluppatori possono aggiungere requestPayerName per richiedere il nome del pagatore separatamente dalle informazioni sull'indirizzo di spedizione. requestPayerName accetta un valore booleano.

shippingType

Nell'ambito dell'opzione di spedizione (terzo argomento di PaymentRequest), ora gli sviluppatori possono aggiungere shippingType per richiedere che l'interfaccia utente mostri "consegna" o "ritiro" anziché "spedizione". shippingType accetta le stringhe shipping (predefinita), delivery o pickup.

shippingType=&#39;delivery&#39;
shippingType="delivery"
shippingType=&#39;pickup&#39;
shippingType="pickup"

Funzioni di serializzazione disponibili per PaymentResponse e PaymentAddress

L'oggetto PaymentResponse e l'oggetto PaymentAddress ora sono serializzabili in JSON. Gli sviluppatori possono convertirne uno in un oggetto JSON chiamando la funzione toJSON() ed evitare di creare funzioni toDict() complicate.

request.show().then(response => {
     let res = response.toJSON();
});

canMakePayment

Oltre alla disponibilità dell'API, puoi verificare se un utente ha un metodo di pagamento attivo prima di invocare l'API Payment Request. Ricorda che questa opzione è facoltativa, in quanto gli utenti possono comunque aggiungere un nuovo metodo di pagamento nell'interfaccia utente di pagamento.

let request = new PaymentRequest(methods, details, options);
if (request.canMakePayment) {
     request.canMakePayment().then(result => {
       if (result) {
         // Payment methods are available.
       } else {
         // Payment methods are not available, but users can still add
        // a new payment method in Payment UI.
       }
     }).catch(error => {
       // Unable to determine.
     });
}