Menetapkan Jenis Pembayaran yang Berbeda

Platform Actions Center mendukung berbagai konfigurasi untuk menerima pembayaran. Panduan Mengaktifkan Pembayaran membahas aspek integrasi yang umum untuk semua integrasi pembayaran, termasuk:

  1. Mengonfigurasi feed untuk menyertakan informasi tokenization_parameter
  2. Memperbarui server pemesanan untuk menerima objek payment_method_token
  3. Ringkasan informasi yang dipertukarkan antara pengguna, Pusat Tindakan, partner / penjual, dan pemroses pembayaran.

Dalam panduan ini, kami akan membahas lebih lanjut cara mengonfigurasi feed untuk menentukan jenis konfigurasi pembayaran mana yang berlaku untuk penjual dan layanan Anda.

  1. Tanpa Pembayaran / Bayar di Tempat
  2. Pembayaran di Muka Penuh
  3. Denda Ketidakhadiran / Biaya Pembatalan
  4. Setoran

Semua kasus penggunaan untuk pembayaran adalah ekstensi dari kasus penggunaan tanpa pembayaran/bayar saat tiba (yang tidak memerlukan konfigurasi pembayaran), sehingga tutorial ini akan dimulai dengan menjelaskan konfigurasi tersebut dan memperlakukan konfigurasi lainnya sebagai ekstensi.

Setiap bagian juga akan membahas kolom yang akan dilacak di server pemesanan untuk menerima konfigurasi pembayaran tertentu.

Tanpa Pembayaran / Bayar di Tempat

Untuk layanan yang tidak memerlukan pembayaran apa pun pada saat pemesanan, tidak diperlukan konfigurasi pembayaran di tingkat penjual atau layanan. Namun, harga tetap diperlukan.

Ini adalah konfigurasi dasar untuk layanan, yang berisi nama, deskripsi, dan harga. Ini akan menjadi satu pesan Layanan dalam ServiceFeed:

JSON
{
    "merchant_id": "merchant-1",
    "service_id": "service-1-a",
    "name": "Men's haircut",
    "description": "One of our stylists will cut your hair",
    "price": {
        "price_micros": 15000000,
        "currency_code": "USD"
    }
}

Tidak diperlukan konfigurasi tambahan di luar implementasi standar di server pemesanan untuk mendukung pembayaran saat kedatangan.

Pembayaran di muka

Konfigurasi ini digunakan untuk menentukan bahwa jumlah untuk layanan harus dibayar penuh pada saat pemesanan.

Prabayar ditentukan di tingkat layanan melalui kolom prepayment_type dari Service. Untuk mewajibkan pembayaran layanan, nilai ini harus ditetapkan ke REQUIRED seperti pada contoh di bawah. Perhatikan bahwa harga ditentukan dengan cara yang sama seperti contoh pembayaran saat tiba. Di sini, karena kita menetapkan jenis prabayar ke wajib, kartu kredit akan dikumpulkan dan harga ini dapat ditagih pada saat checkout.

JSON
{
    "merchant_id": "merchant-1",
    "service_id": "service-2-b",
    "name": "Spa Treatment",
    "description": "A full spa treatment",
    "price": {
        "price_micros": "200000000",
        "currency_code": "USD"
    }
    "prepayment_type": "REQUIRED"
}

Booking Server

Saat menerima prabayar, token pembayaran akan diteruskan ke server pemesanan Anda dalam panggilan ke CreateBooking melalui kolom payment_processing_parameters.unparsed_payment_method_token. Anda diwajibkan untuk menagih jumlah yang sama persis dengan yang ditentukan melalui kolom harga dalam feed dan Anda diwajibkan untuk menggunakan mata uang yang ditentukan dalam feed. Tagihan ini harus mengikuti alur yang dijelaskan dalam Panduan Mengaktifkan Pembayaran.

Saat menampilkan CreateBookingResponse kolom booking.payment_information harus ditetapkan untuk mencerminkan dengan benar bahwa prabayar telah diberikan dan diproses.

Spesifikasi PaymentInformation berisi dokumentasi lengkap untuk semua opsi informasi pembayaran. Contoh minimal untuk memproses prabayar diberikan di bawah. Harga yang ditampilkan di kolom harga harus sama persis dengan harga yang ditentukan dalam permintaan. Selain itu, jika tarif pajak ditentukan dalam feed/permintaan, tarif tersebut juga harus disertakan secara persis.

Perhatikan juga bahwa Anda harus memberikan ID transaksi. ID transaksi ini setidaknya harus unik di antara transaksi dengan penjual tersebut. Calon yang baik untuk ID transaksi adalah ID transaksi yang diberikan kepada Anda oleh pemroses pembayaran.

JSON
{
    "prepayment_status": "PREPAYMENT_PROVIDED",
    "payment_processed_by": "PROCESSED_BY_PARTNER",
    "payment_transaction_id": "[this-transaction-id]",
    "price": {
        "price_micros": "200000000",
        "currency_code": "USD"
    }
}

Denda Ketidakhadiran

Denda ketidakhadiran dapat ditagihkan kepada pengguna jika mereka tidak menghadiri reservasi, atau jika mereka membatalkan setelah periode pembatalan. Jika periode pembatalan tidak ditentukan, periode tersebut akan ditetapkan secara default ke waktu mulai slot.

Untuk menentukan denda ketidakhadiran, di feed layanan, Anda harus menyertakan kolom no_show_fee seperti yang ditunjukkan dalam contoh di bawah:

JSON
{
    "merchant_id": "merchant-1",
    "service_id": "service-2-b",
    "name": "Spa Treatment",
    "description": "A full spa treatment",
    "price": {
        "price_micros": 200000000,
        "currency_code": "USD"
    }
    "scheduling_rules": {
        "min_advance_online_canceling": 14400,
    }
    "no_show_fee": {
        "fee": {
            "price_micros": 25000000,
            "currency_code": "USD"
        }
        "fee_type": "FIXED_RATE_DEFAULT"
    }
}

Dalam contoh di atas, partner atau penjual diberi otorisasi untuk mengenakan tarif tetap sebesar $25 seperti yang ditentukan di kolom no_show_fee.fee.price_micros jika pemegang janji temu tidak menghadiri janji temu. Biaya ini juga dapat ditagih jika pengguna membatalkan dalam waktu 4 jam (14.400 detik) sebelum janji temu, seperti yang ditentukan di kolom scheduling_rules.min_advance_online_canceling.

Untuk melihat cara menentukan denda ketidakhadiran di tingkat ketersediaan, lihat bagian ini.

Booking Server

Saat memproses permintaan yang menyertakan biaya tidak hadir, token pembayaran akan diteruskan ke server pemesanan Anda dalam panggilan ke CreateBooking melalui kolom payment_processing_parameters.unparsed_payment_method_token. Token ini diteruskan dengan cara yang sama seperti dalam kasus prabayar. Namun, karena token hanya diotorisasi untuk jangka waktu yang singkat, Anda harus memanggil API pemroses pembayaran yang relevan untuk mengupgrade token ini menjadi versi yang dapat Anda pertahankan untuk digunakan pada lain waktu. Hal ini dijelaskan di bagian panduan Mengaktifkan Pembayaran di Alur token Biaya Tidak Hadir.

Saat menampilkan CreateBookingResponse, kolom booking.payment_information harus ditetapkan untuk merespons status denda ketidakhadiran dengan benar seperti dalam contoh di bawah.

JSON
{
    "prepayment_status": "PREPAYMENT_PROVIDED",
    "payment_processed_by": "PROCESSED_BY_PARTNER",
    "payment_transaction_id": "[this-transaction-id]",
    "price": {
        "price_micros": "200000000",
        "currency_code": "USD"
    }
    "no_show_fee": {
        "fee": {
            "price_micros": 25000000,
            "currency_code": "USD"
        }
        "fee_type": "FIXED_RATE_DEFAULT"
    }
}

Perhatikan bahwa no_show_fee ditetapkan untuk mencerminkan harga dan struktur biaya yang dapat dikenakan. Perhatikan juga bahwa, mirip dengan contoh prabayar, transaction_id diperlukan dalam pesan ini.

Perhatikan juga bahwa booking_id yang ditetapkan di CreateBookingResponse adalah kolom wajib untuk pembaruan real-time yang harus dikirim saat menagih denda ketidakhadiran. ID ini diharapkan disimpan bersama informasi tentang pemesanan.

Real-Time Updates

Jika pengguna tidak datang untuk pemesanan terjadwal, atau membatalkan setelah periode pembatalan (misalnya, dengan menghubungi Anda secara langsung), Anda dapat secara opsional mengenakan biaya ketidakhadiran yang ditentukan menggunakan informasi pembayaran yang Anda simpan pada saat pemesanan. Saat menagih biaya ketidakhadiran, Anda harus mengirim Pembaruan Real-Time yang menentukan bahwa biaya ketidakhadiran telah ditagih.

Untuk pemesanan yang dibuat oleh CreateBooking, pembaruan harus dikirim ke notification.partners.bookings.patch. Dalam isi permintaan ini harus ada pemesanan yang diperbarui, dengan status ditetapkan ke NO_SHOW_PENALIZED. Status ini memberi tahu Google bahwa tagihan telah dilakukan.

Misalnya, permintaan dapat dikirim ke:

PATCH https://mapsbooking.googleapis.com/v1alpha/notification/partners/12345678/bookings/123123123?updateMask=status

Dengan isi permintaan:

JSON
{
    "name": "partners/12345678/bookings/123123123"
    "merchantId": "merchant-1"
    "serviceId": "service-2-b"
    "status": "NO_SHOW_PENALIZED"
}

Setoran

Deposit digunakan untuk mengumpulkan tagihan awal sebagai persyaratan untuk pemesanan. Deposit dapat ditagih pada saat pemesanan atau nanti. Anda mungkin perlu menentukan persyaratan pengembalian dana untuk deposit serta kapan pemesanan dapat dibatalkan secara online.

Untuk menentukan setoran, di feed layanan, Anda harus menyertakan kolom deposit seperti yang ditunjukkan dalam contoh di bawah:

JSON
{
    "merchant_id": "merchant-1",
    "service_id": "service-2-b",
    "name": "Spa Treatment",
    "description": "A full spa treatment",
    "price": {
        "price_micros": 200000000,
        "currency_code": "USD"
    }
    "scheduling_rules": {
        "min_advance_online_canceling": 86400,
    }
    "deposit": {
        "deposit": {
            "price_micros": 25000000,
            "currency_code": USD,
            "min_advance_cancellation_sec": 14400,
        }
        "deposit_type": "FIXED_RATE_DEFAULT"
    }
}

Dalam contoh ini, min_advance_online_canceling menentukan periode pembatalan dan deposit.min_advance_cancellation_sec menentukan kapan deposit dapat dikembalikan. Perhatikan bahwa dalam contoh di atas, deposit dapat menentukan waktu pembatalan secara terpisah dari persyaratan pengembalian dana. Dalam hal ini, pengguna dapat membatalkan layanan secara online hingga 24 jam sebelumnya (86.400 detik). Hal ini memastikan bahwa penjual langsung diberi tahu tentang pembatalan yang terlambat. Namun, pengguna mungkin masih memenuhi syarat untuk mendapatkan pengembalian dana atas depositnya hingga 4 jam sebelumnya (14.400 detik) sebelum pemesanan (dengan menghubungi Anda atau penjual untuk pembatalan), yang akan ditampilkan dalam persyaratan saat checkout dan dalam email konfirmasi.

Untuk melihat cara menentukan deposit di tingkat ketersediaan, lihat bagian ini.

Booking Server

Saat memproses permintaan yang menyertakan deposit, token pembayaran diteruskan ke server pemesanan Anda dalam panggilan ke CreateBooking melalui kolom payment_processing_parameters.unparsed_payment_method_token. Token ini diteruskan dengan cara yang sama seperti dalam kasus prabayar. Jika Anda menagih deposit atau membatalkan penangguhan pada saat pemesanan, Anda dapat melakukannya selama permintaan ini.

Jika Anda ingin menagih deposit di lain waktu, karena token hanya diotorisasi untuk jangka waktu yang singkat, Anda harus memanggil API pemroses pembayaran yang relevan untuk mengupgrade token ini menjadi versi yang dapat Anda pertahankan untuk digunakan di lain waktu. Hal ini dijelaskan di bagian panduan Mengaktifkan Pembayaran pada alur token setoran.

Saat menampilkan CreateBookingResponse, kolom booking.payment_information harus menampilkan kembali status setoran dengan benar, seperti pada contoh di bawah.

JSON
{
    "prepayment_status": "PREPAYMENT_PROVIDED",
    "payment_processed_by": "PROCESSED_BY_PARTNER",
    "payment_transaction_id": "[this-transaction-id]",
    "price": {
        "price_micros": "200000000",
        "currency_code": "USD"
    }
    "deposit": {
        "deposit": {
            "price_micros": 25000000,
            "currency_code": USD,
            "min_advance_cancellation_sec": 28800,
        }
        "deposit_type": "FIXED_RATE_DEFAULT"
    }
}

Perhatikan bahwa deposit ditetapkan untuk mencerminkan harga dan struktur deposit yang akan ditagih atau ditahan. Perhatikan juga bahwa, mirip dengan contoh prabayar, transaction_id diperlukan dalam pesan ini.

Real-Time Updates

Jika pengguna membatalkan pemesanannya sebelum periode pembatalan deposit, Anda harus mengembalikan dana deposit yang telah Anda tagihkan ke kartu pengguna. Saat mengembalikan dana deposit, Anda harus mengirimkan Pembaruan Real Time yang menentukan bahwa deposit telah dikembalikan dananya.

Untuk pemesanan yang dibuat oleh CreateBooking, pembaruan harus dikirim ke notification.partners.bookings.patch. Dalam isi permintaan ini, pemesanan yang diperbarui harus ada, dengan status ditetapkan ke CANCELED dan kolom paymentInformation.prepaymentStatus ditetapkan ke PREPAYMENT_REFUNDED. Tindakan ini akan memberi tahu Google bahwa setoran telah dikembalikan dananya.

Misalnya, permintaan dapat dikirim ke:

PATCH https://mapsbooking.googleapis.com/v1alpha/notification/partners/12345678/bookings/123123123?updateMask=status

Dengan isi permintaan:

JSON
{
    "name": "partners/12345678/bookings/123123123"
    "merchantId": "merchant-1"
    "serviceId": "service-2-b"
    "status": "CANCELED"
    "paymentInformation": {
      "prepaymentStatus": "PREPAYMENT_REFUNDED"
    }
    
}

Wajibkan Kartu Kredit

Layanan mungkin memerlukan kartu kredit sebagai verifikasi tambahan identitas pengguna. Namun, kode ini tidak boleh digunakan untuk pembayaran di muka, deposit, atau denda ketidakhadiran. Jika diperlukan, kasus penggunaan tersebut harus dikonfigurasi secara eksplisit menggunakan langkah-langkah di atas. Perhatikan juga bahwa mewajibkan kartu kredit sering kali akan menyebabkan penurunan pemesanan yang signifikan untuk layanan ini.

Untuk mewajibkan kartu kredit diberikan selama checkout, Anda harus menetapkan kolom require_credit_card ke REQUIRE_CREDIT_CARD_ALWAYS.

JSON
{
    "merchant_id": "merchant-1",
    "service_id": "service-1-a",
    "name": "Men's haircut",
    "description": "One of our stylists will cut your hair",
    "price": {
        "price_micros": 15000000,
        "currency_code": "USD"
    },
    "require_credit_card": "REQUIRE_CREDIT_CARD_ALWAYS"
}

Booking Server

Saat memproses permintaan yang menyertakan persyaratan kartu kredit, token pembayaran akan diteruskan ke server pemesanan Anda dalam panggilan ke CreateBooking melalui kolom payment_processing_parameters.unparsed_payment_method_token. Token ini diteruskan dengan cara yang sama seperti dalam kasus prabayar. Namun, karena token hanya diotorisasi untuk jangka waktu yang singkat, Anda harus memanggil API pemroses pembayaran yang relevan untuk mengupgrade token ini menjadi versi yang dapat Anda pertahankan untuk digunakan pada lain waktu.

Tidak ada informasi tambahan yang diperlukan dalam respons server Pemesanan selain kasus penggunaan pembayaran saat tiba.

Mengganti Harga di Tingkat Ketersediaan

Dalam semua contoh di atas, struktur harga / biaya ditentukan di tingkat Layanan. Dalam sebagian besar kasus, harga tingkat layanan ini harus digunakan. Namun, dalam beberapa kasus, sebaiknya ubah struktur pembayaran untuk slot ketersediaan tertentu. Misalnya, situasi berikut dapat ditangani dengan mengganti harga / biaya di tingkat ketersediaan:

  • Harga diturunkan pada hari Selasa dan dinaikkan pada hari Sabtu.
  • Denda ketidakhadiran berlaku untuk ketersediaan antara pukul 17.00 dan 19.00.

Tabel di bawah mencantumkan, untuk setiap metode pembayaran / biaya, kolom yang akan digunakan dalam feed ketersediaan untuk mengganti definisi tingkat layanan.

Jenis Pembayaran Definisi Biaya / Harga Dapat diganti?
Bayar di Tempat Service.price Harga dapat diganti melalui Availability.payment_option_id yang mereferensikan Merchant.payment_option
Pembayaran di muka Service.price Harga dapat diganti melalui Availability.payment_option_id yang mereferensikan Merchant.payment_option
Denda ketidakhadiran Service.no_show_fee Availability.no_show_fee
Setoran Service.deposit Availability.deposit
Memerlukan kartu kredit Service.require_credit_card Availability.require_credit_card

Perhatikan bahwa untuk mengganti harga di tingkat ketersediaan, Anda harus menentukan opsi pembayaran di tingkat penjual terlebih dahulu. Selain itu, untuk panduan tentang cara menambahkan periode pembatalan di tingkat ketersediaan, lihat panduan Cara Menambahkan Periode Pembatalan.