เพิ่มและลบโค้ดเรียกกลับ

คู่มือนี้อธิบายวิธีใช้การเรียกกลับกับ Google Wallet API เมื่อมีการสร้างหรือลบบัตร Google จะเรียกกลับไปยังปลายทาง HTTPS ที่คุณเลือกได้ การเรียกกลับนี้เป็นแบบเฉพาะคลาส และมีข้อมูล เกี่ยวกับเหตุการณ์ เช่น คลาส ออบเจ็กต์ และประเภทเหตุการณ์ ซึ่งใช้เพื่อ ติดตามจำนวนการเพิ่มและการลบผู้ใช้ที่เกิดขึ้นได้ เช่น คุณสามารถกำหนดค่าการเรียกกลับเพื่อส่งเหตุการณ์ไปยังแอปพลิเคชันวิเคราะห์เพื่อติดตามการมีส่วนร่วมของลูกค้าในระหว่างกิจกรรมส่งเสริมการขาย

ข้อกำหนดเบื้องต้น

โปรดอ่านข้อกำหนดเบื้องต้นต่อไปนี้ก่อนเริ่มต้น

  • สร้างปลายทาง HTTPS ที่จัดการคำขอ POST ปลายทางนี้ต้อง พร้อมใช้งานแบบสาธารณะ
  • อัปเดตปลายทางการเรียกกลับสำหรับแต่ละชั้นเรียนโดยอัตโนมัติ ดูพร็อพเพอร์ตี้ callbackOptions ตามชั้นเรียนใน REST API
  • แนะนำ: ใช้ไลบรารี Tink เพื่อยืนยันลายเซ็น

ใช้ Callback

ทุกครั้งที่ผู้ใช้เพิ่มหรือลบ ออบเจ็กต์ Google จะเรียกกลับไปยังผู้ขายพร้อมรายละเอียดเกี่ยวกับการเพิ่มหรือลบใน ต่อคลาส URL ผู้ขายต้องใช้คีย์สาธารณะเพื่อยืนยันความถูกต้องของข้อความก่อน หลังจากที่ฟังก์ชันเรียกกลับยืนยันข้อความแล้ว คุณจะใช้ฟังก์ชันเรียกกลับ สำหรับการดำเนินการขั้นถัดไปได้

ยืนยันลายเซ็น

เราขอแนะนำให้คุณใช้ไลบรารี Tink เพื่อยืนยันลายเซ็นข้อความ เมื่อติดตั้งใช้งานปลายทาง HTTPS ไลบรารี Tink มี PaymentMethodTokenRecipient ซึ่งเป็นยูทิลิตีที่ ตรวจสอบลายเซ็นโดยอัตโนมัติและแสดงข้อความจริงเมื่อ การยืนยันสำเร็จ

ตัวอย่างต่อไปนี้แสดงวิธีใช้ไลบรารี Tink เพื่อติดตั้งใช้งาน 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
  }
}

รูปแบบข้อความที่คาดไว้

รูปแบบข้อความคือ JSON ที่แปลงเป็นสตริงที่มีพร็อพเพอร์ตี้ต่อไปนี้

ตัวระบุ คำอธิบาย
classId

รหัสคลาสที่สมบูรณ์ในตัวเอง โดยใช้รูปแบบต่อไปนี้

<issuer_id.class_id>
objectId

รหัสออบเจ็กต์ที่สมบูรณ์ในตัวเอง โดยใช้รูปแบบต่อไปนี้

<issuer_id.object_id>
expTimeMillis เวลาหมดอายุเป็นมิลลิวินาทีนับตั้งแต่ EPOCH หลังจากเวลาหมดอายุ ระบบจะต้องถือว่าข้อความไม่ถูกต้อง
eventType สามารถเป็น del หรือ save สำหรับ DELETE และ SAVE
nonce Nonce เพื่อติดตามการนำส่งที่ซ้ำกัน

จัดการคำขอจากเซิร์ฟเวอร์ของ Google

รายการฟิลด์หลักในส่วนหัวของคำขอที่ส่งไปยังปลายทางการเรียกกลับมีดังนี้

  • User-Agent: Googlebot
  • ประเภทเนื้อหา: application/json

กำหนดค่าเซิร์ฟเวอร์เพื่อไม่ให้ปฏิเสธคำขอ โดยคุณสามารถ ตั้งค่าต่อไปนี้ใน robots.txt

User-agent: Googlebot
Disallow:

ลองอีกครั้ง

การโทรกลับจะดำเนินการอย่างเต็มความสามารถ Google จะใช้กลยุทธ์การลองใหม่ทั่วไป เพื่อให้มีความยืดหยุ่นในกรณีที่ปลายทางการเรียกกลับไม่ตอบสนองหรือมี การหยุดทำงานเป็นระยะๆ และจะพยายามลดความถี่ในการลองใหม่

การนำส่งที่ซ้ำกัน

ในบางกรณี อาจมีการนำส่งซ้ำ เราขอแนะนำให้คุณใช้ nonce เพื่อขจัดรายการที่ซ้ำกัน