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 giá trị được tạo hoặc bị xoá, Google có thể thực hiện lệnh gọi lại đến điểm cuối HTTPS do bạn chọn. Lệnh gọi lại này dành riêng cho từng 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. Dữ liệu này có thể dùng để đồng bộ hoá số lượt thêm và xoá người dùng. 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 ứ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 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:

  • 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 điểm cuối gọi lại cho mỗi lớp theo phương thức lập trình. Xem thuộc tính callbackOptions theo lớp trong API REST.
  • Đề xuất: 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 lượt 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 để cung cấp thông tin chi tiết về lượt thêm hoặc xoá trên URL cho mỗi 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 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 các hoạt động xuôi dòng.

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 giúp tự động xác minh chữ ký và trả về tin nhắn thực tế khi xác minh thành công.

Ví dụ sau cho biết 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
  }
}

Expected message format

The message format is JSON that's serialized into a string with the following properties:

Identifier Description
classId

Fully qualified class ID. Uses the following format:

<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 mọi tệp phân phối trùng lặp.

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

Sau đây là danh sách các trường chính trong 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 để máy chủ không từ chối yêu cầu. Để thực hiện việc này, bạn có thể thiết lập các thuộc tính sau trong robots.txt:

User-agent: Googlebot
Disallow:

Thử lại

Các lệnh gọi lại được triển khai tối ưu. Google sẽ cố gắng hai lần để tính đến các lỗi tạm thời. Sau khi thử hai lần, Google sẽ xoá thông báo và không cố gửi lại lần nữa.

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

Có thể có những 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.