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

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

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

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

  • إعداد نقطة نهاية HTTPS تعالج طلبات POST يجب أن يكون هذا العنوان متاحًا للجميع.
  • تعديل نقطة نهاية معاودة الاتصال لكل صف برمجيًا اطّلِع على السمة callbackOptions حسب الفئة في واجهة برمجة تطبيقات REST.
  • ننصحك باستخدام مكتبة 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 وقت انتهاء الصلاحية بالمللي ثانية منذ بداية الحقبة بعد انتهاء وقت الصلاحية، يجب اعتبار الرسالة غير صالحة.
eventType يمكن أن تكون القيمة del أو save لكل من DELETE وSAVE.
nonce رقم عشوائي لتتبُّع أي عمليات تسليم مكرّرة

التعامل مع الطلب من خادم Google

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

  • User-Agent: Googlebot
  • Content-Type: application/json

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

User-agent: Googlebot
Disallow:

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

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

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

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