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