คู่มือนี้อธิบายวิธีใช้การเรียกกลับกับ 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 เพื่อขจัดรายการที่ซ้ำกัน