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

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