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

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

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

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

  • وضع نقطة نهاية HTTPS تعالج طلبات POST. تحتاج نقطة النهاية هذه أن تكون متاحة للجمهور.
  • تعديل معاودة الاتصال آليًا لنقطة نهاية عنوان URL الخاص بجهة الإصدار. يمكنك الاطّلاع على 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 ويتم تقسيمه إلى سلسلة كما يلي: المواقع:

المُعرّف الوصف
externalPassId

رقم تعريف البطاقة الخارجية المؤهّل بالكامل تستخدم التنسيق التالي:

<issuer_id.external_pass_id>
expTimeMillis وقت انتهاء الصلاحية بالمللي ثانية منذ EPOCH. بعد وقت انتهاء الصلاحية، يلزم اعتبار الرسالة غير صالحة.
eventType يمكن أن تكون إما del أو save DELETE وSAVE
nonce إشعار لتتبّع أي عمليات تسليم مكرّرة.

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

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

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

اضبط الخادم بحيث لا يرفض الطلب. للقيام بذلك، يمكنك ضبط ما يلي في robots.txt:

User-agent: Googlebot
Disallow:

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

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

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

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