این راهنما نحوه استفاده از تماسهای برگشتی با Google Wallet API را توضیح میدهد. هنگامی که یک مجوز ایجاد یا حذف میشود، Google میتواند به نقطه پایانی HTTPS مورد نظر شما پاسخ تماس انجام دهد. این فراخوانی مختص کلاس است و شامل دادههای مربوط به رویداد مانند کلاس، شی و نوع رویداد است. این می تواند برای پیگیری تعداد اضافه ها و حذف های کاربر که رخ می دهد استفاده شود. برای مثال، تماسهای برگشتی را میتوان به گونهای پیکربندی کرد که رویدادها را به یک برنامه تحلیلی ارسال کند تا تعامل مشتری در طول رویدادهای تبلیغاتی را ردیابی کند.
قبل از شروع، پیش نیازهای زیر را مرور کنید:
- یک نقطه پایانی HTTPS که به درخواستهای POST رسیدگی میکند. این نقطه پایانی باید به صورت عمومی در دسترس باشد.
- بهصورت برنامهریزی، نقطه پایانی پاسخ به تماس را برای هر کلاس بهروزرسانی کنید. ویژگی
callbackOptions
را بر اساس کلاس در REST API ببینید. - توصیه می شود: از کتابخانه Tink برای تأیید امضاها استفاده کنید.
به ازای هر افزودن یا حذفی که کاربر روی یک شی انجام می دهد، 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 است که به صورت رشته ای با ویژگی های زیر به صورت سریالی در می آید:
شناسه | توضیحات |
---|---|
classId | شناسه کلاس کاملاً واجد شرایط از فرمت زیر استفاده می کند: <issuer_id.class_id> |
objectId | شناسه شی کاملا واجد شرایط از فرمت زیر استفاده می کند: <issuer_id.object_id> |
expTimeMillis | زمان انقضا بر حسب میلی ثانیه از زمان EPOCH. پس از اتمام زمان، پیام باید نامعتبر تلقی شود. |
eventType | می تواند del یا save برای DELETE و SAVE باشد. |
nonce | برای ردیابی هر گونه تحویل تکراری وجود ندارد. |
در زیر لیستی از فیلدهای کلیدی در هدر درخواستی که به نقطه پایانی پاسخ به تماس شما ارسال می شود، آمده است:
- عامل کاربر:
Googlebot
- نوع محتوا:
application/json
سرور خود را طوری پیکربندی کنید که درخواست را رد نکند. برای انجام این کار، می توانید موارد زیر را در robots.txt
تنظیم کنید:
User-agent: Googlebot Disallow:
پاسخ به تماس ها بر اساس بهترین تلاش است. Google از استراتژیهای تکرار مجدد متداول استفاده میکند تا در مواردی که نقطه پایانی پاسخ به تماس پاسخ نمیدهد یا قطعی متناوب دارد، انعطافپذیر باشد و بهراحتی از تلاشها عقبنشینی میکند.
ممکن است در برخی موارد تحویل های تکراری وجود داشته باشد. توصیه می کنیم از nonce
برای فریب دادن آنها استفاده کنید.