إضافة طلبات معاودة الاتصال وحذفها

يشرح هذا الدليل كيفية استخدام ميزة معاودة الاتصال باستخدام Google Wallet API. عند إنشاء قيمة أو حذفها، يمكن أن تُجري Google معاودة الاتصال بنقطة نهاية HTTPS من اختيارك. وتكون معاودة الاتصال هذه خاصة بفئة معيّنة وتتضمّن بيانات عن الحدث، مثل الفئة والعنصر ونوع الحدث. ويمكن استخدام هذه البيانات للبقاء متزامنة مع عدد عمليات إضافة المستخدمين وحذفهم. على سبيل المثال، يمكن ضبط عمليات معاودة الاتصال لإرسال الأحداث إلى تطبيق إحصاءات لتتبُّع تفاعل العملاء أثناء الأحداث الترويجية.

المتطلبات الأساسية

قبل البدء، راجِع المتطلبات الأساسية التالية:

  • استخدِم نقطة نهاية HTTPS تعالج طلبات POST. يجب أن تكون نقطة النهاية هذه متاحة للجميع.
  • تعديل نقطة نهاية معاودة الاتصال آليًا لكل صف اطّلِع على السمة callbackOptions حسب الفئة في واجهة برمجة تطبيقات REST.
  • إجراء يُنصح به: استخدام مكتبة Tink للتحقّق من التوقيعات.

تنفيذ عمليات معاودة الاتصال

بالنسبة إلى كل عملية إضافة أو حذف يجريها المستخدم على عنصر، تُرجع Google الطلب إلى التجّار مع تقديم تفاصيل حول عملية الإضافة أو الحذف في عنوان URL لكل فئة. ويجب أن يستخدم التجّار أولاً المفاتيح العامة للتحقّق من صحة الرسالة. بعد التحقّق من الرسالة من خلال عمليات معاودة الاتصال، يمكن استخدام عمليات رد الاتصال لعمليات تنزيل البيانات.

إثبات صحة التوقيع

ننصحك باستخدام مكتبة 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
  }
}

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 لا يوجد مكان لتتبُّع أي عمليات تسليم مكرّرة.

معالجة الطلب من خادم Google

في ما يلي قائمة بالحقول الرئيسية في عنوان الطلب والتي يتم إرسالها إلى نقطة نهاية معاودة الاتصال:

  • وكيل المستخدم: Googlebot
  • نوع المحتوى: application/json

اضبط الخادم حتى لا يرفض الطلب. لإجراء ذلك، يمكنك ضبط ما يلي في robots.txt:

User-agent: Googlebot
Disallow:

مرات إعادة المحاولة

تُجرى عمليات معاودة الاتصال على أساس أفضل جهد. ويحاول Google مرتين لتفسير الإخفاقات العابرة. وبعد المحاولة مرّتين، تحذفها Google ولا تحاول إعادة إرسالها مرة أخرى.

عمليات تسليم مكرّرة

قد تكون هناك عمليات تسليم مكررة في بعض الحالات. وننصحك باستخدام nonce لإزالة تكرارها.