Payment Request API: Panduan Integrasi  |  Web  |  Google Developers Mengoptimalkan Interface Adsense - Berternak Adsense

Sunday, July 28, 2019

Payment Request API: Panduan Integrasi  |  Web  |  Google Developers Mengoptimalkan Interface Adsense

Payment Request API: Panduan Integrasi  |  Web
       |  Google Developers

Hi, berjumpa kembali, sesi kali ini akan membahas mengenai mengoptimalkan interface adsense Payment Request API: Panduan Integrasi  |  Web  |  Google Developers simak selengkapnya 

Membeli barang secara online memang praktis akan tetapi acap kali jadi pengalaman yang mengecewakan, khususnya ala perangkat seluler. Walaupun lalu lintas seluler terus meningkat, akun konversi seluler cuma sekitar sepertiga dari semua pembelian yang diselesaikan. Dengan bicara lain, pengguna meninggalkan pembelian berselang seluler dua kali lebih acap daripada pembelian berselang desktop. Mengapa?

Mengapa pengguna meninggalkan formulir pembelian berselang seluler

Formulir pembelian online adalah intensif-pengguna, sulit digunakan, lambat dimuat dengan disegarkan, serta harus berjibun langkah buat menyelesaikannya. Ini akibat kedua anasir utama pelunasan online—keamanan dengan kenyamanan—sering kali berbenturan; mengutamakan yang satu berarti mengalahkan yang lain.

Kebanyakan masalah yang menyebabkan pengabaian bisa langsung dilacak ke formulir pembelian. Setiap aplikasi atau situs memiliki entri data dengan cara validasinya sendiri, dengan pengguna acap kali merasa mengatur kudu memasukkan informasi yang sama ala setiap titik pembelian di aplikasi. Juga, developer aplikasi berusaha melahirkan anak sungai pembelian yang kondusif beberapa cara pelunasan berlainan sekaligus; bahkan antagonisme kecil pada perjanjian cara pelunasan bisa memperumit penyelesaian formulir dengan cara penyerahannya.

Sistem apa sahaja yang memperbaiki atau memecahkan satu atau beberapa masalah itu akan jadi perubahan yang disambut baik. Kita telah mulai memecahkan masalah dengan Isiotomatis, akan tetapi kita ingin membicarakan tentang solusi yang lebih komprehensif.

Memperkenalkan Payment Request API

Payment Request API adalah sistem yang dimaksudkan buat meniadakan formulir pemeriksaan. Ini amat memperbaiki anak sungai kerja pengguna selama cara pembelian, sehingga melepaskan pengalaman pengguna yang konsisten dengan membolehkan para penjual di web dengan mudah memanfaatkan cara pelunasan yang berbeda-beda. Payment Request API bukanlah cara pelunasan baru, tak jua berintegrasi langsung dengan pemroses pembayaran; melainkan, layer cara yang bertujuan:

  • Memungkinkan browser bertindak sebagai belantik antara penjual, pengguna, dengan cara pembayaran
  • Untuk menstandarkan anak sungai komunikasi pelunasan sebanyak mungkin
  • Untuk kondusif dengan bagus beragam cara pelunasan yang aman
  • Agar beraksi di browser, perangkat, atau platform apa pun—seluler atau yang lain

Payment Request API adalah cagak terbuka dengan lintas-browser yang mengambil alih anak sungai checkout konservatif yang membolehkan penjual meminta dengan melegalkan pelunasan pada satu panggilan API. Payment Request API membolehkan halaman web bertukar informasi dengan agen-pengguna ketika pengguna melepaskan masukan, sebelum menyetujui atau berkeberatan permintaan pembayaran.

Yang terpenting, dengan browser aktif sebagai perantara, semua informasi yang diperlukan buat checkout cepat bisa disimpan di browser, sehingga pengguna bisa tinggal mengonfirmasikan dengan membayar, layak dengan satu klik.

Proses bisnis pembayaran

Menggunakan Payment Request API, cara bisnis berjalan semulus agak-agak buat pengguna dengan penjual.

Proses bisnis pembayaran

Prosesnya dimulai detik situs penjual melahirkan PaymentRequest baru dengan melangsungkan semua informasi yang diperlukan ke browser buat melaksanakan pembayaran: besaran yang akan dibebankan, mata uang yang diharapkan pembayaran, dengan cara pelunasan yang makbul akibat situs tersebut. Browser akan menentukan kompatibilitas antara cara pelunasan yang makbul buat situs dengan cara yang dipasang pengguna di perangkat target.

Antarmuka Permintaan Pembayaran

Kemudian browser menampilkan UI pelunasan kepada pengguna, yang memilih cara pelunasan dengan meluluskan transaksi. Metode pelunasan bisa sepraktis bilyet angsuran yang telah disimpan akibat browser, atau serahasia aplikasi pihak ketiga yang ditulis khusus buat memberikan pelunasan ke situs (fungsionalitas ini sebentar lagi tersedia). Setelah pengguna meluluskan transaksi, semua perincian pelunasan yang diperlukan akan langsung dikirim kembali ke situs. Misalnya, buat pelunasan dengan bilyet kredit, situs akan memetik kembali nomor kartu, nama pemegang kartu, tanggal kedaluwarsa, dengan CVC.

PaymentRequest jua bisa diperluas buat membalas informasi tambahan, seperti bakat dengan opsi pengiriman, email pembayar, dengan telepon pembayar. Ini membolehkan Anda mendapatkan semua informasi yang diperlukan buat menuntaskan pelunasan minus menampilkan formulir checkout kepada pengguna.

Manfaat cara baru ini tiga kali lipat: dari bucu memandang -- bulu pilih bulu pengguna, semua interaksi—permintaan, otorisasi, pembayaran, dengan buatan membosankan sebelumnya—sekarang dilakukan cuma pada satu langkah; dari bucu memandang -- bulu pilih bulu situs web, ini cuma memerlukan satu panggilan JavaScript API; dari bucu memandang -- bulu pilih bulu cara pembayaran, tak ada perubahan cara apa pun.

Menggunakan Payment Request API

Muat infiks Payment Request API

Untuk meluak penderitaan mengejar API cagak hidup ini, kami sangat menyarankan Anda buat me-lanjutkan infiks ini di bagian <head> ala kode. Sisipan ini akan diperbarui begitu API berubah dengan akan berusaha alot biar aba-aba Anda ajek bekerja setidaknya ala 2 rilis utama Chrome.

<script src="https://storage.googleapis.com/prshim/v1/payment-shim.js">

Buat PaymentRequest

Langkah pertama adalah melahirkan alamat PaymentRequest dengan mendatangkan konstruktor PaymentRequest. Langkah ini biasanya (namun tak selalu) dikaitkan dengan tindakan yang diprakarsai pengguna, yang menunjukkan angan-angan mengatur buat melaksanakan pembelian. Objek tersebut dibuat memakai kriteria berisi data yang diperlukan.

var request = new PaymentRequest(
  methodData, // required payment method data
  details,    // required information about transaction
  options     // optional kriteria for things like shipping, etc.
);

Konstruktor PaymentRequest

Parameter methodData

Parameter methodData berisi daftar cara pelunasan yang didukung dan, jika relevan, informasi adendum tentang cara pembayaran. Urutan ini berisi kamus-kamus PaymentMethodData, termasuk identifier cagak yang dikaitkan dengan cara pelunasan yang ingin makbul akibat aplikasi, dengan data spesifik cara pembayaran. Lihat Arsitektur Payment Request API buat perincian selengkapnya.

Saat ini, PaymentRequest di Chrome cuma kondusif bilyet angsuran cagak berikut: 'amex', 'diners', 'discover', 'jcb', 'maestro', 'mastercard', 'unionpay', dengan 'visa'.

var methodData = [
  
    supportedMethods: ["visa", "mastercard"]
  
]

Data dengan cara pembayaran

Parameter details

Parameter details berisi informasi tentang transaksi. Ada dua anasir utama: sebuah total, yang merefleksikan besaran total dengan mata uang yang akan digunakan, dengan babak opsional displayItems yang menunjukkan cara membagi besaran akhir. Parameter ini tak dimaksudkan jadi daftar item lini, akan tetapi melainkan rangkuman anasir utama pesanan: subtotal, diskon, pajak, biaya kirim, dll.

Antarmuka Permintaan Pembayaran

Perlu diperhatikan bahwa Payment Request API tak melaksanakan aritmetika. Yaitu, beliau tak dengan tak bisa memastikan bahwa anasir bentuk menghitung dengan benar total besaran yang kudu dibayar. Penghitungan ini adalah tanggung jawab developer. Jadi Anda kudu acap memastikan bahwa besaran item daftar sama dengan besaran total. Juga, PaymentRequest tak kondusif pengembalian uang, sehingga jumlahnya kudu acap positif (namun item daftar individual bisa berupa negatif, misalnya diskon).

Browser akan merender cap seperti yang Anda definisikan dengan secara otomatis merender format mata uang yang benar berdasarkan lokal pengguna. Perhatikan, cap kudu di-render pada adab yang sama dengan materi Anda.

var details = 
  displayItems: [
    
      label: "Original donation amount",
      amount: currency: "USD", value : "65.00", // US$65.00
    ,
    
      label: "Friends and family discount",
      amount: currency: "USD", value : "-10.00", // -US$10.00
      pending: true // The price is not determined yet
    
  ],
  total:  
    label: "Total",
    amount: currency: "USD", value : "55.00", // US$55.00
  

Detail transaksi

pending umumnya digunakan buat menampilkan item seperti besaran bea atau pengiriman yang bergantung ala pemilahan bakat pengiriman atau opsi pengiriman. Chrome menunjukkan bidang tertunda ala UI buat permintaan pembayaran.

Nilai berulang atau terhitung yang digunakan pada details bisa ditetapkan apik sebagai literal string maupun variabel string individual.

var currency = "USD";
var amount = "65.00";
var discount = "-10.00";
var total = "55.00";

Variabel-variabel PaymentRequest

Tampilkan PaymentRequest

Antarmuka Permintaan Pembayaran

Aktifkan antarmuka PaymentRequest dengan mendatangkan metodenya show(). Metode ini mendatangkan UI bawaan yang membolehkan pengguna memeriksa perincian pembelian, me-lanjutkan atau mengubah informasi, dengan terakhir, membayarnya. Sebuah Promise (ditunjukkan akibat fungsi callback dengan cara then()-nya) yang ditetapkan akan dikembalikan bila pengguna melegalkan atau berkeberatan permintaan pembayaran.

request.show().then(function(paymentResponse) 
  // Process paymentResponse here
  paymentResponse.complete("success");
).catch(function(err) 
  console.error("Uh oh, something bad happened", err.message);
);

Metode show PaymentRequest

Batalkan PaymentRequest

Anda bisa dengan sengaja membatalkan PaymentRequest dengan mendatangkan cara abort(). Ini terutama berguna bila waktu sesi belanja telah habis atau item di bakul telah terjual habis selama transaksi.

Gunakan cara ini jika aplikasi harus membatalkan permintaan pelunasan setelah cara show() dipanggil akan tetapi sebelum promise diproses — Misalnya, jika sebuah item tak lagi tersedia, atau pengguna batal memverifikasi pembelian pada waktu yang dialokasikan.

Jika Anda membatalkan permintaan, Anda harus melahirkan instance baru PaymentRequest sebelum bisa mendatangkan lagi show().

var paymentTimeout = window.setTimeout(function() 
  window.clearTimeout(paymentTimeout);
  request.abort().then(function() 
    console.log('Payment timed out after 20 minutes.');
  ).catch(function() 
    console.log('Unable to abort.');
  );
, 20 * 60 * 1000);  /* 20 minutes */

Metode batalkan PaymentRequest

Proses PaymentResponse

Dengan persetujuan pengguna buat permintaan pembayaran, promise cara show() akan diproses, yang menghasilkan alamat PaymentResponse.

PaymentResponse memiliki bidang-bidang berikut:
methodName String yang menunjukkan cara pelunasan yang dipilih (mis., visa)
details Kamus berisi informasi buat methodName
shippingAddress Alamat pengiriman pengguna, jika diminta
shippingOption ID opsi pengiriman yang dipilih, jika diminta
payerEmail Alamat email pembayar, jika diminta
payerPhone Nomor telepon pembayar, jika diminta
payerName Nama pembayar, jika diminta

Untuk pelunasan dengan bilyet kredit, responsnya standar. Untuk pelunasan dengan kecuali bilyet angsuran (mis., Android Pay), respons akan didokumentasikan akibat penyedia. Respons bilyet angsuran berisi kamus berikut:

cardholderName cardNumber expiryMonth expiryYear cardSecurityCode billingAddress

Setelah informasi pelunasan diterima, aplikasi kudu memberikan informasi pelunasan kepada pemroses pelunasan buat diproses. UI akan menampilkan spinner detik permintaan terjadi. Bila respons telah kembali, aplikasi kudu mendatangkan complete() buat menangkup UI.

request.show().then(paymentResponse => 
  var paymentData = 
    // payment method string, e.g. “visa”
    method: paymentResponse.methodName,
    // payment details as you requested
    details: paymentResponse.details
  ;
  return fetch('/pay', 
    method: 'POST',
    credentials: 'include',
    headers: 
      'Content-Type': 'application/json'
    ,
    body: JSON.stringify(paymentData)
  ).then(res => 
    if (res.status === 200) 
      return res.json();
     else 
      throw 'Payment Error';
    
  ).then(res => 
    paymentResponse.complete("success");
  , err => 
    paymentResponse.complete("fail");
  );
).catch(err => 
  console.error("Uh oh, something bad happened", err.message);
);
Antarmuka Permintaan Pembayaran

Metode complete() akan bersedekah tahu agen-pengguna bahwa hubungan pengguna telah selesai dengan meluluskan aplikasi bersedekah tahu pengguna melanda hasilnya dengan menangani disposisi elemen UI selebihnya.

paymentResponse.complete('success').then(() => 
  // Success UI


paymentResponse.complete('fail').then(() => 
  // Error UI
;

Metode complete PaymentRequest

Mengumpulkan bakat pengiriman

Antarmuka Permintaan Pembayaran

Jika Anda penjual yang melego barang fisik, Anda agak-agak ingin akumulasi bakat pengiriman pengguna dengan memakai Payment Request API. Caranya adalah dengan me-lanjutkan requestShipping: true ke kriteria options. Bila telah memasang kriteria ini, "Shipping" akan ditambahkan ke UI, dengan pengguna bisa memilih bakat yang telah disimpan dari daftar atau me-lanjutkan bakat pengiriman baru.

Atau Anda bisa memakai "Delivery" atau "Pickup" sebagai ganti "Delivery" di UI dengan menetapkan shippingType. Hal ini cuma buat keperluan tampilan.

var options = 
  requestShipping: true,
  shippingType: "shipping" // "shipping"(default), "delivery" or "pickup"
;

var request = new PaymentRequest(methodData, details, options);

Opsi transaksi

Antarmuka Permintaan Pembayaran

Opsi pengiriman bisa dihitung secara dinamis bila pengguna memilih atau me-lanjutkan bakat pengiriman baru. Anda bisa me-lanjutkan event listener buat insiden shippingaddresschange, yang akan menembakkan pemilahan bakat pengiriman akibat pengguna. Anda beka bisa memvalidasi bakat mengalihtugaskan ke bakat itu, membagi opsi pengiriman, dengan memodernkan details.shippingOptions Anda dengan opsi pengiriman baru dengan informasi harga. Anda bisa menawarkan opsi pengiriman default dengan memasang selected ke true ala sebuah opsi.

Untuk berkeberatan bakat akibat alasan seperti daerah yang tak didukung, teruskan larik kosong ke details.shippingOptions. UI akan bersedekah tahu pengguna bahwa bakat yang dipilih tak bisa digunakan buat pengiriman.

request.addEventListener('shippingaddresschange', e => 
  e.updateWith(((details, addr) => 
    if (addr.country === 'US') 
      var shippingOption = 
        id: '',
        label: '',
        amount: currency: 'USD', value: '0.00',
        selected: true
      ;
      if (addr.region === 'US') 
        shippingOption.id = 'us';
        shippingOption.label = 'Standard shipping in US';
        shippingOption.amount.value = '0.00';
        details.total.amount.value = '55.00';
       else 
        shippingOption.id = 'others';
        shippingOption.label = 'International shipping';
        shippingOption.amount.value = '10.00';
        details.total.amount.value = '65.00';
      
      if (details.displayItems.length === 2) 
        details.displayItems.splice(1, 0, shippingOption);
       else 
        details.displayItems.splice(1, 1, shippingOption);
      
      details.shippingOptions = [shippingOption];
     else 
      details.shippingOptions = [];
    
    return Promise.resolve(details);
  )(details, request.shippingAddress));
);
Antarmuka Permintaan Pembayaran

Dengan persetujuan pengguna buat permintaan pembayaran, promise cara show() bersedekah solusi. Aplikasi boleh memakai properti .shippingAddress alamat PaymentResponse buat memberitahukan bakat pengiriman kepada pemroses pembayaran, bersama properti lainnya.

request.show().then(paymentResponse => 
  var paymentData = 
    // payment method string
    method: paymentResponse.methodName,
    // payment details as you requested
    details: paymentResponse.details.toJSON(),
    // shipping address information
    address: paymentResponse.shippingAddress.toJSON()
  ;
  // Send information to the server
);

Menambahkan opsi pengiriman

Jika fasilitas Anda membolehkan pengguna buat memilih opsi pengiriman seperti "gratis", "standar", atau "kilat", Anda jua bisa melakukannya dengan UI Payment Request. Untuk menawarkan alternatif tersebut, tambahkan properti shippingOptions dengan opsinya ke alamat details. Dengan memasang satu alternatif ke selected: true, UI akan merendernya sebagai telah terpilih (berarti besaran total Anda kudu merefleksikan harga buat opsi pengiriman itu).

var details = 
  total: label: 'Donation', amount: currency: 'USD', value: '55.00',
  displayItems: [
    
      label: 'Original donation amount',
      amount: currency: 'USD', value: '65.00'
    ,
    
      label: 'Friends and family discount',
      amount: currency: 'USD', value: '-10.00'
    
  ],
  shippingOptions: [
    
      id: 'standard',
      label: 'Standard shipping',
      amount: currency: 'USD', value: '0.00',
      selected: true
    ,
    
      id: 'express',
      label: 'Express shipping',
      amount: currency: 'USD', value: '12.00'
    
  ]
;
var request = new PaymentRequest(methodData, details, options);

Mengubah opsi pengiriman agak-agak akan menghasilkan harga yang berbeda. Untuk me-lanjutkan bayaran kirim dengan mengubah total harga, Anda bisa me-lanjutkan event listener buat insiden shippingoptionchange, yang akan terpicu detik pengguna memilih opsi pengiriman, sehingga Anda bisa melaksanakan eksplorasi terprogram terhadap data opsi. Anda jua bisa mengubah bayaran kirim sesuai bakat pengiriman.

request.addEventListener('shippingoptionchange', e => 
  e.updateWith(((details, shippingOption) => 
    var selectedShippingOption;
    var otherShippingOption;
    if (shippingOption === 'standard') 
      selectedShippingOption = details.shippingOptions[0];
      otherShippingOption = details.shippingOptions[1];
      details.total.amount.value = '55.00';
     else 
      selectedShippingOption = details.shippingOptions[1];
      otherShippingOption = details.shippingOptions[0];
      details.total.amount.value = '67.00';
    
    if (details.displayItems.length === 2) 
      details.displayItems.splice(1, 0, selectedShippingOption);
     else 
      details.displayItems.splice(1, 1, selectedShippingOption);
    
    selectedShippingOption.selected = true;
    otherShippingOption.selected = false;
    return Promise.resolve(details);
  )(details, request.shippingOption));
);
Antarmuka Permintaan Pembayaran

Dengan persetujuan pengguna buat permintaan pembayaran, promise cara show() bersedekah solusi. Aplikasi bisa memakai properti .shippingOption alamat PaymentResponse buat bersedekah tahu opsi pengiriman kepada pemroses pembayaran, bersama properti lainnya.

request.show().then(paymentResponse => 
  var paymentData = 
    // payment method string
    method: paymentResponse.methodName,
    // payment details as you requested
    details: paymentResponse.details.toJSON(),
    // shipping address information
    address: paymentResponse.shippingAddress.toJSON(),
    // shipping option
    shippingOption: paymentResponse.shippingOption
  ;
  // Send information to the server
);

Anda jua bisa akumulasi bakat email pengguna, nomor telepon, atau nama dengan mengonfigurasi alamat options.

var options = 
  requestPayerPhone: true,  // Request user's phone number
  requestPayerEmail: true,  // Request user's email address
  requestPayerName:  true   // Request user's name
;

var request = new PaymentRequest(methodData, details, options);
Antarmuka Permintaan Pembayaran

Dengan persetujuan pengguna buat permintaan pembayaran, promise cara show() bersedekah solusi. Aplikasi bisa memakai .payerPhone, .payerEmail dan/atau properti .payerName alamat PaymentResponse buat bersedekah tahu pemroses pelunasan melanda alternatif pengguna, bersama properti lainnya.

request.show().then(paymentResponse => 
  var paymentData = 
    // payment method string
    method: paymentResponse.methodName,
    // payment details as you requested
    details: paymentResponse.details.toJSON(),
    // shipping address information
    address: paymentResponse.shippingAddress.toJSON(),
    // shipping option string
    shippingOption: paymentResponse.shippingOption,
    // payer's phone number string
    phone: paymentResponse.payerPhone,
    // payer's email address string
    email: paymentResponse.payerEmail,
    // payer's name string
    name: paymentResponse.payerName
  ;
  // Send information to the server
);

Membuat PaymentRequest sebagai penyempurnaan progresif

Karena Payment Request API adalah fitur yang berkembang, berjibun browser yang belum mendukungnya. Untuk menentukan apakah fitur ini tersedia, buat kueri window.PaymentRequest.

if (window.PaymentRequest) 
  // PaymentRequest supported
  // Continue with PaymentRequest API
 else 
  // PaymentRequest NOT supported
  // Continue with existing form based solution

Menyatukan semuanya

function onBuyClicked(event) 
  if (!window.PaymentRequest) 
    return;
  
  // Payment Request API is available.
  // Stop the default anchor redirect.
  event.preventDefault();

  var supportedInstruments = [
    supportedMethods: [
      'visa', 'mastercard', 'amex', 'discover', 'maestro',
      'diners', 'jcb', 'unionpay', 'bitcoin'
    ]
  ];

  var details = 
    displayItems: [
      label: 'Original donation amount',
      amount: currency: 'USD', value: '65.00'
    , 
      label: 'Friends and family discount',
      amount: currency: 'USD', value: '-10.00'
    ],
    total: 
      label: 'Total due',
      amount: currency: 'USD', value : '55.00'
    
  ;

  var options = 
    requestShipping: true,
    requestPayerEmail: true,
    requestPayerPhone: true,
    requestPayerName: true
  ;

  // Initialization
  var request = new PaymentRequest(supportedInstruments, details, options);

  // When user selects a shipping address
  request.addEventListener('shippingaddresschange', e => 
    e.updateWith(((details, addr) => 
      var shippingOption = 
        id: '',
        label: '',
        amount: currency: 'USD', value: '0.00',
        selected: true
      ;
      // Shipping to US is supported
      if (addr.country === 'US') 
        shippingOption.id = 'us';
        shippingOption.label = 'Standard shipping in US';
        shippingOption.amount.value = '0.00';
        details.total.amount.value = '55.00';
      // Shipping to JP is supported
       else if (addr.country === 'JP') 
        shippingOption.id = 'jp';
        shippingOption.label = 'International shipping';
        shippingOption.amount.value = '10.00';
        details.total.amount.value = '65.00';
      // Shipping to elsewhere is unsupported
       else 
        // Empty array indicates rejection of the address
        details.shippingOptions = [];
        return Promise.resolve(details);
      
      // Hardcode for simplicity
      if (details.displayItems.length === 2) 
        details.displayItems[2] = shippingOption;
       else 
        details.displayItems.push(shippingOption);
      
      details.shippingOptions = [shippingOption];

      return Promise.resolve(details);
    )(details, request.shippingAddress));
  );

  // When user selects a shipping option
  request.addEventListener('shippingoptionchange', e => 
    e.updateWith(((details) => 
      // There should be only one option. Do nothing.
      return Promise.resolve(details);
    )(details));
  );

  // Show UI then continue with user payment info
  request.show().then(result => 
    // POST the result to the server
    return fetch('/pay', 
      method: 'POST',
      credentials: 'include',
      headers: 
        'Content-Type': 'application/json'
      ,
      body: JSON.stringify(result.toJSON())
    ).then(res => 
      // Only if successful
      if (res.status === 200) 
        return res.json();
       else 
        throw 'Failure';
      
    ).then(response => 
      // You should have received a JSON object
      if (response.success == true) 
        return result.complete('success');
       else 
        return result.complete('fail');
      
    ).then(() => 
      console.log('Thank you!',
          result.shippingAddress.toJSON(),
          result.methodName,
          result.details.toJSON());
    ).catch(() => 
      return result.complete('fail');
    );
  ).catch(function(err) 
    console.error('Uh oh, something bad happened: ' + err.message);
  );


// Assuming an anchor is the target for the event listener.
document.querySelector('#start').addEventListener('click', onBuyClicked);

begitulah detil perihal Payment Request API: Panduan Integrasi  |  Web  |  Google Developers semoga artikel ini menambah wawasan salam

Artikel ini diposting pada label , tanggal 04-08-2019, di kutip dari https://developers.google.com/web/fundamentals/payments/?hl=id


Comments


EmoticonEmoticon

Notification
This is just an example, you can fill it later with your own note.
Done