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

คำแนะนำนี้จะอธิบายวิธีใช้โค้ดเรียกกลับกับ 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
  }
}

Expected message format

The message format is JSON that's serialized into a string with the following properties:

Identifier Description
classId

Fully qualified class ID. Uses the following format:

<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 จะพยายามตรวจหาข้อผิดพลาดชั่วคราว 2 ครั้ง หลังจากพยายามส่ง 2 ครั้ง Google จะลบข้อความและไม่พยายามส่งซ้ำ

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

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