افزودن و حذف تماس های برگشتی

این راهنما نحوه استفاده از تماس‌های برگشتی با Google Wallet API را توضیح می‌دهد. هنگامی که یک مجوز ایجاد یا حذف می‌شود، Google می‌تواند به نقطه پایانی HTTPS مورد نظر شما پاسخ تماس انجام دهد. این فراخوانی مختص پاس است و شامل داده‌های مربوط به رویداد مانند خارجی PassId و نوع رویداد است. این می تواند برای پیگیری تعداد اضافه ها و حذف های کاربر که رخ می دهد استفاده شود. برای مثال، تماس‌های برگشتی را می‌توان به گونه‌ای پیکربندی کرد که رویدادها را به یک برنامه تحلیلی ارسال کند تا تعامل مشتری در طول رویدادهای تبلیغاتی را ردیابی کند.

پیش نیازها

قبل از شروع، پیش نیازهای زیر را مرور کنید:

  • یک نقطه پایانی HTTPS که به درخواست‌های POST رسیدگی می‌کند. این نقطه پایانی باید به صورت عمومی در دسترس باشد.
  • به‌صورت برنامه‌نویسی URL نقطه پایانی برگشت به تماس را برای صادرکننده به‌روزرسانی کنید . ویژگی callbackOptions برای صادرکننده را در REST API ببینید.
  • توصیه می شود: از کتابخانه Tink برای تأیید امضاها استفاده کنید.

اجرای callbacks

به ازای هر افزودن یا حذفی که توسط کاربر در یک مجوز انجام می‌شود، Google با بازرگانان با جزئیات مربوط به افزودن یا حذف در URL پاسخ به تماس صادرکننده، تماس‌های برگشتی برقرار می‌کند. بازرگانان باید ابتدا از کلیدهای عمومی برای تأیید صحت پیام استفاده کنند. پس از اینکه تماس‌های برگشتی پیام را تأیید کردند، می‌توان از تماس‌های برگشتی برای عملیات پایین دستی استفاده کرد.

امضا را تایید کنید

توصیه می کنیم هنگام پیاده سازی نقطه پایانی HTTPS، از کتابخانه Tink برای تأیید امضای پیام استفاده کنید. کتابخانه 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 برای فریب دادن آنها استفاده کنید.