คำแนะนำนี้จะอธิบายวิธีใช้โค้ดเรียกกลับกับ Google Wallet API เมื่อมีการสร้างหรือลบบัตร Google จะดำเนินการเรียกกลับไปยังปลายทาง HTTPS ที่คุณเลือกได้ โค้ดเรียกกลับนี้มีไว้สำหรับคลาสโดยเฉพาะ และจะรวมข้อมูลเกี่ยวกับเหตุการณ์ เช่น คลาส ออบเจ็กต์ และประเภทเหตุการณ์ ซึ่งสามารถใช้เพื่อติดตามจำนวนการเพิ่มและการลบของผู้ใช้ที่เกิดขึ้นได้ ตัวอย่างเช่น สามารถกำหนดค่าโค้ดเรียกกลับให้ส่งเหตุการณ์ไปยังแอปพลิเคชันการวิเคราะห์เพื่อติดตามการมีส่วนร่วมของลูกค้าระหว่างกิจกรรมโปรโมชัน
ข้อกำหนดเบื้องต้น
โปรดอ่านข้อกำหนดเบื้องต้นต่อไปนี้ก่อนเริ่มต้น
- ยืนปลายทาง HTTPS ที่จัดการคำขอ POST ปลายทางนี้ต้องพร้อมใช้งานแบบสาธารณะ
-
อัปเดตปลายทางโค้ดเรียกกลับแบบเป็นโปรแกรมสำหรับแต่ละคลาส ดูพร็อพเพอร์ตี้
callbackOptions
ตามคลาสใน REST API - แนะนำ: ใช้ไลบรารี Tink เพื่อยืนยันลายเซ็น
ใช้โค้ดเรียกกลับ
สำหรับการเพิ่มหรือลบแต่ละครั้งที่ผู้ใช้ทำในออบเจ็กต์ 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 |
ไม่มีการติดตามการจัดส่งที่ซ้ำกัน |
จัดการคำขอจากเซิร์ฟเวอร์ของ Google
ต่อไปนี้คือรายการช่องคีย์ในส่วนหัวของคำขอที่ส่งไปยังปลายทางโค้ดเรียกกลับ
- User Agent:
Googlebot
- ประเภทเนื้อหา:
application/json
กำหนดค่าเซิร์ฟเวอร์เพื่อไม่ให้ปฏิเสธคำขอ ในการดำเนินการนี้ ให้ตั้งค่ารายการต่อไปนี้ใน robots.txt
User-agent: Googlebot Disallow:
การลองซ้ำ
โค้ดเรียกกลับจะทำงานอย่างเต็มความสามารถ Google จะพยายามตรวจหาข้อผิดพลาดชั่วคราว 2 ครั้ง หลังจากพยายามส่ง 2 ครั้ง Google จะลบข้อความและไม่พยายามส่งซ้ำ
การจัดส่งที่ซ้ำกัน
อาจมีการจัดส่งที่ซ้ำกันในบางกรณี เราขอแนะนำให้ใช้ nonce
เพื่อกรองข้อมูลที่ซ้ำกันออก