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

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

پیش‌نیازها

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

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

پیاده‌سازی پاسخ تماس

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

درستی‌سنجی امضا

توصیه می‌کنیم هنگام پیاده‌سازی نقطه پایانی 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 است که به‌صورت رشته‌ای با ویژگی‌های زیر سریال‌سازی شده است:

شناسه شرح
classId

شناسه کلاس کاملاً واجدشرایط. از قالب زیر استفاده می‌کند:

<issuer_id.class_id>
objectId

شناسه شیء کاملاً واجدشرایط. از قالب زیر استفاده می‌کند:

<issuer_id.object_id>
expTimeMillis زمان انقضا برحسب میلی‌ثانیه از تاریخ. پس‌از زمان انقضا، پیام باید نامعتبر تلقی شود.
eventType می‌تواند del یا save برای DELETE و SAVE باشد.
nonce Nonce برای ردیابی هرگونه تحویل تکراری.

رسیدگی به درخواست از سرور Google

در زیر فهرستی از فیلدهای کلیدی در سرایند درخواست ارائه‌شده به نقطه پایانی تماس برگشتی شما آمده است:

  • User-Agent: Googlebot یا Google-Valuables
  • نوع محتوا: application/json

سرورتان را طوری پیکربندی کنید که درخواست را رد نکند. برای انجام این کار، می‌توانید موارد زیر را در robots.txt تنظیم کنید:

User-agent: Googlebot
Disallow:

تلاش‌های مجدد

تماس‌های برگشتی براساس حداکثر تلاش انجام می‌شود. ‫Google از استراتژی‌های تلاش مجدد رایج استفاده خواهد کرد تا در مواردی که نقطه پایانی تماس برگشتی پاسخ نمی‌دهد یا قطعی متناوب دارد انعطاف‌پذیر باشد و تلاش‌ها را به‌تدریج کاهش دهد.

ارسال‌های تکراری

در برخی موارد ممکن است ارسال‌های تکراری وجود داشته باشد. توصیه می‌کنیم از nonce برای حذف موارد تکراری استفاده کنید.