Thêm và xoá lệnh gọi lại

Hướng dẫn này giải thích cách sử dụng lệnh gọi lại với API Google Wallet. Khi một được tạo hoặc xoá, Google có thể thực hiện lệnh gọi lại đến một HTTPS điểm cuối mà bạn chọn. Lệnh gọi lại này dành riêng cho lớp và bao gồm dữ liệu về sự kiện, chẳng hạn như lớp, đối tượng và loại sự kiện. Bạn có thể dùng thông tin này để theo dõi số lượt thêm và xoá người dùng diễn ra. Cho Ví dụ: bạn có thể định cấu hình lệnh gọi lại để gửi sự kiện đến một Analytics để theo dõi mức độ tương tác của khách hàng trong các sự kiện khuyến mãi.

Điều kiện tiên quyết

Trước khi bạn bắt đầu, hãy xem xét các điều kiện tiên quyết sau đây:

  • Thiết lập một điểm cuối HTTPS xử lý các yêu cầu POST. Điểm cuối này cần công khai.
  • Cập nhật điểm cuối của lệnh gọi lại cho mỗi lớp theo phương thức lập trình. Xem callbackOptions thuộc tính theo lớp trong API REST.
  • Đề xuất: Dùng thư viện Tink để xác minh chữ ký.

Triển khai lệnh gọi lại

Đối với mỗi thao tác thêm hoặc xoá do người dùng thực hiện trên một đối tượng , Google sẽ thực hiện lệnh gọi lại cho người bán kèm theo thông tin chi tiết về thao tác thêm hoặc xoá trên cho mỗi lớp URL. Trước tiên, người bán cần sử dụng Khoá công khai để xác minh tính xác thực của nội dung. Sau khi các lệnh gọi lại xác minh thông báo, bạn có thể sử dụng các lệnh gọi lại cho hoạt động hạ nguồn.

Xác minh chữ ký

Bạn nên sử dụng thư viện Tink để xác minh chữ ký của thư khi bạn triển khai điểm cuối HTTPS. Chiến lược phát hành đĩa đơn Thư viện Tink cung cấp PaymentMethodTokenRecipient, một tiện ích giúp tự động xác minh chữ ký và trả về thư thực sự khi xác minh thành công.

Ví dụ sau đây cho thấy cách sử dụng thư viện Tink để triển khai PaymentMethodTokenRecipient:

import java.io.IOException;
import javax.servlet.http.*;
import com.google.common.io.CharStreams;
import com.google.crypto.tink.apps.paymentmethodtoken.*;

// Replace ISSUER_ID with your issuer id
private static final String RECIPIENT_ID = "ISSUER_ID";

private static final String PUBLIC_KEY_URL = "https://pay.google.com/gp/m/issuer/keys";
private static final String SENDER_ID = "GooglePayPasses";
private static final String PROTOCOL = "ECv2SigningOnly";

private static final GooglePaymentsPublicKeysManager keysManager = new GooglePaymentsPublicKeysManager.Builder()
        .setKeysUrl(PUBLIC_KEY_URL)
        .build();

public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
  try {
    // Extract signed message with signature from POST request body.
    String signedMessage = CharStreams.toString(request.getReader());
    PaymentMethodTokenRecipient recipient =
            new PaymentMethodTokenRecipient.Builder()
                    .protocolVersion(PROTOCOL)
                    .fetchSenderVerifyingKeysWith(keysManager)
                    .senderId(SENDER_ID)
                    .recipientId(RECIPIENT_ID)
                    .build();

    String serializedJsonMessage = recipient.unseal(signedMessage);

    // Use serializedJsonMessage to extract the details
  } catch (Exception e) {
    // Handle the error
  }
}

Định dạng thông báo dự kiến

Thông báo có định dạng JSON được chuyển đổi tuần tự thành một chuỗi như sau thuộc tính:

Số nhận dạng Mô tả
classId

Mã lớp đủ điều kiện. Sử dụng định dạng sau:

<issuer_id.class_id>
objectId

Mã đối tượng đủ điều kiện. Sử dụng định dạng sau:

<issuer_id.object_id>
expTimeMillis Thời gian hết hạn tính bằng mili giây kể từ EPOCH. Sau thời gian hết hạn, thông báo cần được coi là không hợp lệ.
eventType Có thể là del hoặc save cho DELETESAVE.
nonce Số chỉ dùng một lần để theo dõi bất kỳ tệp phân phối trùng lặp nào.

Xử lý yêu cầu từ máy chủ của Google

Dưới đây là danh sách các trường chính trong phần tiêu đề của yêu cầu được gửi đến điểm cuối của lệnh gọi lại:

  • Tác nhân người dùng: Googlebot
  • Loại nội dung: application/json

Định cấu hình để máy chủ của bạn không từ chối yêu cầu. Để làm như vậy, bạn có thể thiết lập các mục sau trong robots.txt:

User-agent: Googlebot
Disallow:

Thử lại

Lệnh gọi lại sẽ luôn được thực hiện trên cơ sở nỗ lực tối đa. Google sẽ sử dụng các chiến lược thử lại phổ biến linh hoạt trong trường hợp điểm cuối của lệnh gọi lại không phản hồi hoặc gặp sự cố ngừng dịch vụ gián đoạn và sẽ dễ dàng dừng hoạt động.

Tệp phân phối trùng lặp

Có thể có các tệp phân phối trùng lặp trong một số trường hợp. Bạn nên sử dụng nonce để loại bỏ trùng lặp.