Đặt các hình thức thanh toán khác nhau

Nền tảng Actions Center hỗ trợ nhiều cấu hình để thanh toán. Hướng dẫn bật tính năng thanh toán sẽ trình bày các khía cạnh tích hợp phổ biến đối với mọi chế độ tích hợp thanh toán, bao gồm:

  1. Định cấu hình nguồn cấp dữ liệu để bao gồm thông tin về tokenization_parameter
  2. Đang cập nhật máy chủ đặt lịch hẹn để chấp nhận đối tượng payment_method_token
  3. Tổng quan về thông tin được trao đổi giữa người dùng, Trung tâm hành động, đối tác / người bán và công ty xử lý thanh toán.

Trong hướng dẫn này, chúng tôi sẽ đề cập chi tiết hơn về cách định cấu hình nguồn cấp dữ liệu để chỉ định những loại cấu hình thanh toán phù hợp với người bán và dịch vụ của bạn.

  1. Không thanh toán / thanh toán khi đến nơi
  2. Trả trước toàn bộ
  3. Phí vắng mặt / Phí huỷ
  4. Ký quỹ

Tất cả các trường hợp sử dụng tính năng thanh toán đều là phần mở rộng của trường hợp sử dụng không cần thanh toán/trả tiền khi đến nơi (không yêu cầu phải thiết lập thông tin thanh toán). Vì vậy, hướng dẫn này sẽ bắt đầu bằng cách mô tả cấu hình đó và coi các cấu hình khác là phần mở rộng.

Mỗi phần cũng sẽ bao gồm các trường cần theo dõi trong máy chủ đặt phòng để chấp nhận cấu hình thanh toán cụ thể.

Không thanh toán / thanh toán khi đến nơi

Đối với những dịch vụ không yêu cầu thanh toán tại thời điểm đặt trước, bạn không cần phải thiết lập thông tin thanh toán ở cấp người bán hoặc cấp dịch vụ. Tuy nhiên, bạn vẫn phải cung cấp giá.

Đây là cấu hình cơ sở của một dịch vụ, chứa tên, nội dung mô tả và giá. Đây sẽ là một thông báo Dịch vụ duy nhất trong 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"
    }
}

Máy chủ đặt phòng không cần thiết lập gì thêm ngoài cách triển khai tiêu chuẩn để hỗ trợ việc thanh toán khi đến nơi.

Trả Tiền Trước

Cấu hình này dùng để chỉ định rằng khách hàng phải thanh toán toàn bộ số tiền cho dịch vụ tại thời điểm đặt trước.

Khoản trả trước được chỉ định cho cấp dịch vụ thông qua trường prepayment_type của Service. Để yêu cầu thanh toán cho một dịch vụ, bạn phải thiết lập thuộc tính này thành REQUIRED như trong ví dụ bên dưới. Xin lưu ý rằng giá tiền được chỉ định giống như ví dụ trả tiền khi đến nơi. Ở đây, vì chúng tôi đang đặt hình thức trả trước thành bắt buộc, nên hệ thống sẽ thu thập thẻ tín dụng và tính giá này tại thời điểm thanh toán.

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"
}

Máy chủ đặt phòng

Khi chấp nhận khoản trả trước, mã thông báo thanh toán sẽ được chuyển đến máy chủ đặt trước trong lệnh gọi đến CreateBooking thông qua trường payment_processing_parameters.unparsed_payment_method_token. Bạn bắt buộc phải tính phí chính xác số tiền được chỉ định thông qua trường giá trong nguồn cấp dữ liệu và bạn phải sử dụng đơn vị tiền tệ được chỉ định trong các nguồn cấp dữ liệu đó. Các khoản phí này phải tuân theo quy trình được mô tả trong Hướng dẫn bật tính năng thanh toán.

Khi trả về một CreateBookingResponse, trường booking.payment_information phải được đặt để phản ánh chính xác rằng khoản thanh toán trước đã được cung cấp và xử lý.

Thông số kỹ thuật PaymentInformation chứa tài liệu đầy đủ cho tất cả các tuỳ chọn thông tin thanh toán. Dưới đây là một ví dụ tối thiểu về việc xử lý khoản trả trước. Điều quan trọng là giá được trả về trong trường giá phải khớp chính xác với giá được chỉ định trong yêu cầu. Ngoài ra, nếu thuế suất được chỉ định trong nguồn cấp dữ liệu/yêu cầu thì thuế suất cũng phải được cung cấp chính xác.

Ngoài ra, xin lưu ý rằng bạn phải cung cấp mã giao dịch. Mã giao dịch này tối thiểu phải là duy nhất trong các giao dịch với người bán đó. Mã giao dịch phù hợp là mã giao dịch mà công ty xử lý thanh toán cung cấp cho bạn.

JSON

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

Phí vắng mặt

Người dùng có thể bị tính phí vắng mặt nếu họ không tham dự yêu cầu đặt chỗ, hoặc nếu họ huỷ sau thời hạn huỷ. Nếu bạn không chỉ định cửa sổ huỷ, thì thời gian bắt đầu của khung giờ sẽ được đặt mặc định.

Để chỉ định phí vắng mặt, trong nguồn cấp dữ liệu dịch vụ, bạn cần thêm trường no_show_fee như ví dụ dưới đây:

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"
    }
}

Trong ví dụ trên, đối tác hoặc người bán được phép tính phí cố định là 25 USD như đã nêu trong trường no_show_fee.fee.price_micros nếu người đặt cuộc hẹn không tham dự cuộc hẹn. Google cũng có thể tính phí này nếu người dùng huỷ trong vòng 4 giờ (14400 giây) trước cuộc hẹn, như được nêu trong trường scheduling_rules.min_advance_online_canceling.

Để tìm hiểu cách xác định phí biểu diễn ở cấp độ phát sóng, hãy xem phần này.

Máy chủ đặt phòng

Khi xử lý một yêu cầu có bao gồm phí vắng mặt, mã thông báo thanh toán sẽ được chuyển đến máy chủ đặt chỗ trong lệnh gọi đến CreateBooking thông qua trường payment_processing_parameters.unparsed_payment_method_token. Mã thông báo này được chuyển theo cách tương tự như trong trường hợp trả trước. Tuy nhiên, vì mã thông báo chỉ được uỷ quyền trong một thời gian ngắn, nên bạn phải gọi API có liên quan của công ty xử lý thanh toán để nâng cấp mã thông báo này thành một phiên bản mà bạn có thể duy trì sử dụng sau này. Nội dung này được mô tả trong phần hướng dẫn Bật tính năng thanh toán trên quy trình về mã thông báo Phí vắng mặt.

Khi trả về một CreateBookingResponse, bạn phải đặt trường booking.payment_information để lặp lại đúng cách trạng thái của phí không hiển thị như trong ví dụ dưới đây.

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"
    }
}

Xin lưu ý rằng no_show_fee được đặt để phản ánh giá và cấu trúc của khoản phí có thể được tính phí. Ngoài ra, xin lưu ý rằng, tương tự như ví dụ về thanh toán trước, thông báo này bắt buộc phải có transaction_id.

Ngoài ra, xin lưu ý rằng booking_id được đặt trong CreateBookingResponse là trường bắt buộc đối với nội dung cập nhật theo thời gian thực phải được gửi khi tính phí vắng mặt. Mã dự kiến sẽ được lưu trữ cùng với thông tin về việc đặt vé.

Bản cập nhật theo thời gian thực

Nếu người dùng không đến để nhận lượt đặt chỗ theo lịch hoặc huỷ sau thời hạn huỷ (ví dụ: bằng cách liên hệ trực tiếp với bạn), bạn có thể tuỳ ý tính phí vắng mặt được quy định bằng cách sử dụng thông tin thanh toán mà bạn lưu trữ tại thời điểm đặt phòng. Khi tính phí vắng mặt, bạn phải gửi Thông tin cập nhật theo thời gian thực nêu rõ rằng phí vắng mặt bị tính.

Đối với các lượt đặt phòng do CreateBooking tạo, hệ thống sẽ gửi thông tin cập nhật đến notification.partners.bookings.patch. Trong phần nội dung của yêu cầu này phải là yêu cầu đặt phòng đã cập nhật, và trạng thái được đặt thành NO_SHOW_PENALIZED. Trạng thái này báo cho Google biết rằng bạn đã bị tính phí.

Ví dụ: một yêu cầu có thể được gửi đến:

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

Với nội dung yêu cầu:

JSON

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

Ký quỹ

Tiền đặt cọc được dùng để thu phí ban đầu theo yêu cầu khi đặt phòng. Bạn có thể tính tiền đặt cọc tại thời điểm đặt phòng hoặc ngay sau đó. Bạn sẽ cần phải xác định điều khoản cho phép hoàn tiền đặt cọc cũng như thời điểm có thể huỷ lượt đặt phòng trực tuyến.

Để chỉ định một khoản tiền gửi, trong nguồn cấp dữ liệu dịch vụ, bạn nên thêm trường deposit như ví dụ dưới đây:

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"
    }
}

Trong ví dụ này, min_advance_online_canceling xác định thời hạn huỷ và deposit.min_advance_cancellation_sec xác định thời điểm tiền đặt cọc có thể được hoàn lại. Xin lưu ý rằng trong ví dụ ở trên, khoản tiền gửi có thể chỉ định thời gian huỷ riêng biệt với điều khoản hoàn tiền. Trong trường hợp này, người dùng có thể huỷ dịch vụ trực tuyến trước tối đa 24 giờ (86400 giây). Điều này giúp đảm bảo người bán trực tiếp nhận được thông báo về các yêu cầu huỷ trễ. Tuy nhiên, người dùng có thể vẫn đủ điều kiện được hoàn lại tiền đặt cọc cho đến 4 giờ trước khi đặt phòng (14.400 giây) trước khi đặt phòng (bằng cách liên hệ với bạn hoặc người bán để huỷ). Điều này sẽ được thể hiện trong các điều khoản ở bước thanh toán và trong email xác nhận.

Để xem cách xác định khoản tiền gửi ở cấp độ sẵn có, hãy xem phần này.

Máy chủ đặt phòng

Khi xử lý yêu cầu có một khoản tiền đặt cọc, mã thông báo thanh toán sẽ được chuyển đến máy chủ đặt trước của bạn trong lệnh gọi đến CreateBooking thông qua trường payment_processing_parameters.unparsed_payment_method_token. Mã thông báo này được chuyển theo cách tương tự như trong trường hợp thanh toán trước. Nếu bạn tính tiền đặt cọc hoặc xoá khoản tiền uỷ quyền tạm thời này tại thời điểm đặt vé, thì bạn có thể thực hiện trong yêu cầu này.

Nếu có ý định tính phí khoản tiền gửi này vào lúc khác, vì mã thông báo chỉ được uỷ quyền trong một khoảng thời gian ngắn, bạn phải gọi API liên quan của công ty xử lý thanh toán để nâng cấp mã thông báo này thành một phiên bản mà bạn có thể duy trì sử dụng sau này. Nội dung này được mô tả trong phần hướng dẫn Bật tính năng thanh toán trong quy trình mã thông báo khoản tiền gửi.

Khi trả về một CreateBookingResponse, trường booking.payment_information phải lặp lại đúng cách trạng thái của khoản tiền gửi, như trong ví dụ dưới đây.

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"
    }
}

Xin lưu ý rằng khoản tiền gửi được thiết lập để phản ánh giá và cấu trúc của khoản tiền gửi sẽ được tính hoặc giữ lại. Ngoài ra, xin lưu ý rằng, tương tự như ví dụ về thanh toán trước, thông báo này bắt buộc phải có transaction_id.

Bản cập nhật theo thời gian thực

Nếu người dùng huỷ lượt đặt trước trước thời hạn huỷ đặt cọc, bạn phải hoàn lại mọi khoản tiền đặt cọc đã tính vào thẻ người dùng. Khi hoàn tiền đặt cọc, bạn phải gửi Thông tin cập nhật theo thời gian thực để chỉ định rằng khoản tiền đó đã được hoàn lại.

Đối với các lượt đặt phòng do CreateBooking tạo, hệ thống sẽ gửi thông tin cập nhật đến notification.partners.bookings.patch. Trong phần nội dung của yêu cầu này phải là lượt đặt phòng đã cập nhật, trong đó trạng thái được đặt thành CANCELED và trường paymentInformation.prepaymentStatus được đặt thành PREPAYMENT_REFUNDED. Email này thông báo cho Google rằng khoản tiền đặt cọc đã được hoàn lại.

Ví dụ: một yêu cầu có thể được gửi đến:

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

Với nội dung yêu cầu:

JSON

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

Yêu cầu thẻ tín dụng

Một dịch vụ có thể yêu cầu thẻ tín dụng để xác minh thêm danh tính của người dùng. Tuy nhiên, bạn không nên sử dụng tài khoản này để thanh toán trước, đặt cọc hoặc phí không tham gia chương trình. Nếu cần phải thiết lập những trường hợp sử dụng đó, bạn nên định cấu hình một cách rõ ràng bằng các bước ở trên. Ngoài ra, xin lưu ý rằng việc yêu cầu thẻ tín dụng thường sẽ dẫn đến số lượt đặt trước dịch vụ này giảm đáng kể.

Để yêu cầu cung cấp thẻ tín dụng khi thanh toán, bạn phải đặt trường require_credit_card thành 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"
}

Máy chủ đặt phòng

Khi xử lý một yêu cầu có yêu cầu về thẻ tín dụng, mã thông báo thanh toán sẽ được chuyển đến máy chủ đặt trước của bạn trong lệnh gọi đến CreateBooking thông qua trường payment_processing_parameters.unparsed_payment_method_token. Mã thông báo này được chuyển theo cách tương tự như trong trường hợp trả trước. Tuy nhiên, vì mã thông báo chỉ được uỷ quyền trong một thời gian ngắn, nên bạn phải gọi API có liên quan của công ty xử lý thanh toán để nâng cấp mã thông báo này thành một phiên bản mà bạn có thể duy trì sử dụng sau này.

Ngoài trường hợp sử dụng phương thức thanh toán khi đến nơi, bạn không cần cung cấp thêm thông tin nào khác trong phản hồi của máy chủ Đặt phòng.

Cơ chế ghi đè giá ở cấp độ sẵn có

Trong tất cả ví dụ trên, cơ cấu giá / phí được chỉ định ở cấp Dịch vụ. Trong hầu hết các trường hợp, bạn nên sử dụng mức giá ở mức dịch vụ này. Tuy nhiên, trong một số trường hợp, bạn nên thay đổi cơ cấu thanh toán cho những khung giờ còn trống nhất định. Ví dụ: Bạn có thể xử lý các trường hợp sau bằng cách ghi đè giá / phí ở cấp độ tình trạng còn hàng:

  • Giá giảm vào thứ Ba và tăng vào thứ Bảy.
  • Phí không hiển thị sẽ áp dụng nếu bạn đặt phòng trong khoảng thời gian từ 17:00 đến 19:00.

Đối với mỗi phương thức thanh toán / phí, bảng dưới đây cho biết những trường cần dùng trong nguồn cấp dữ liệu tình trạng còn hàng để ghi đè định nghĩa cấp dịch vụ.

Hình thức thanh toán Định nghĩa về phí / giá Có thể ghi đè?
Thanh toán khi đến nơi Service.price Giá có thể ghi đè thông qua Availability.payment_option_id tham chiếu đến Merchant.payment_option
Trả Tiền Trước Service.price Bạn có thể ghi đè giá thông qua Availability.payment_option_id tham chiếu đến Merchant.payment_option
Phí xem không tham dự Service.no_show_fee Availability.no_show_fee
Ký quỹ Service.deposit Availability.deposit
Yêu cầu thẻ tín dụng Service.require_credit_card Availability.require_credit_card

Xin lưu ý rằng để thay thế giá ở cấp độ tình trạng còn hàng, trước tiên bạn phải xác định một tuỳ chọn thanh toán ở cấp người bán. Ngoài ra, để biết hướng dẫn về cách thêm khoảng thời gian huỷ ở cấp độ có thể huỷ, vui lòng xem hướng dẫn Cách thêm khoảng thời gian huỷ.