Lưu và xoá thông báo

Hướng dẫn này giải thích cách sử dụng lệnh gọi lại với Google Wallet API. Khi một thẻ/vé được tạo hoặc xoá, Google có thể thực hiện một lệnh gọi lại đến điểm cuối HTTPS 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ượng người dùng được thêm và xoá. Ví dụ: bạn có thể định cấu hình các lệnh gọi lại để gửi sự kiện đến một ứng dụng phân tích nhằm theo dõi mức độ tương tác của khách hàng trong các sự kiện quảng bá.

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

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

  • 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 cung cấp công khai.
  • Cập nhật theo chương trình điểm cuối gọi lại cho từng lớp. Xem thuộc tính callbackOptions theo lớp trong API REST.
  • Khuyên dùng: Sử 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á mà người dùng thực hiện trên một đối tượng, Google sẽ 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 một URL theo từng lớp. 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 thông báo. Sau khi xác minh thông báo, các lệnh gọi lại có thể được dùng cho các thao tác tiếp theo.

Xác minh chữ ký

Bạn nên sử dụng thư viện Tink để xác minh chữ ký thông báo khi triển khai điểm cuối HTTPS. Thư viện Tink cung cấp PaymentMethodTokenRecipient, một tiện ích tự động xác minh chữ ký và trả về thông báo thực tế sau 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 tin nhắn dự kiến

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

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ừ thời gian bắt đầu của hệ thống. 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 đối với DELETESAVE.
nonce Số chỉ dùng một lần để theo dõi mọi lượt phân phối trùng lặp.

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

Sau đây là danh sách các trường khoá trong tiêu đề của yêu cầu được gửi đến điểm cuối gọi lại của bạn:

  • User-Agent: Googlebot
  • Content-Type: application/json

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

User-agent: Googlebot
Disallow:

Thử lại

Các lệnh gọi lại được thực hiện trong khả năng tốt nhất có thể. Google sẽ sử dụng các chiến lược thử lại phổ biến để có khả năng phục hồi trong trường hợp điểm cuối gọi lại không phản hồi hoặc bị gián đoạn không liên tục và sẽ giảm dần các lần thử.

Giao hàng trùng lặp

Trong một số trường hợp, có thể có nhiều thông báo trùng lặp. Bạn nên sử dụng nonce để loại bỏ các mục trùng lặp.