הגדרת אמצעי תשלום

עסקת תשלום באמצעות תשלומים באינטרנט מתחילה עם זיהוי אפליקציית התשלומים שלכם. כאן מוסבר איך להגדיר אמצעי תשלום ולהכין את אפליקציית התשלומים כך שמוכרים ולקוחות יוכלו לבצע תשלומים.

כדי להשתמש ב-Payment Request API, צריך לשייך אפליקציית תשלומים למזהה של אמצעי תשלום. מוכרים שרוצים לשלב עם אפליקציית תשלומים ישתמשו במזהה של אמצעי התשלום כדי לציין זאת בדפדפן. במאמר הזה מוסבר איך פועלת זיהוי אפליקציות תשלומים, ואיך להגדיר את אפליקציית התשלומים כך שדפדפן יוכל לזהות אותה ולהפעיל אותה בצורה תקינה.

אם אתם לא מכירים את המושג 'תשלומים באינטרנט' או את אופן הפעולה של עסקת תשלום דרך אפליקציות תשלום, מומלץ קודם לקרוא את המאמרים הבאים:

תשלומים באינטרנט מורכבים מכמה רכיבים טכנולוגיים שונים, וסטטוס התמיכה תלוי בדפדפן.

Chromium Safari Firefox
מחשב Android מחשב נייד מחשב/נייד
Payment Request API
Payment Handler API
אפליקציית תשלומים ל-iOS או ל-Android ✔* ✔*

איך הדפדפן מגלה אפליקציית תשלומים

כל אפליקציית תשלום צריכה לספק את הפרטים הבאים:

  • מזהה של אמצעי תשלום שמבוסס על כתובת URL
  • מניפסט של אמצעי תשלום (אלא אם מזהה אמצעי התשלום סופק על ידי צד שלישי)
  • מניפסט של אפליקציית אינטרנט
תרשים: איך הדפדפן מגלה את אפליקציית התשלום מתוך מזהה של אמצעי תשלום שמבוסס על כתובת URL

תהליך הגילוי מתחיל כשמוכר מתחיל עסקה:

  1. הדפדפן שולח בקשה לכתובת ה-URL של המזהה של אמצעי התשלום ומאחזר את המניפסט של אמצעי התשלום.
  2. הדפדפן מזהה את כתובת ה-URL של המניפסט של אפליקציית האינטרנט מהמניפסט של אמצעי התשלום ומאחזר את המניפסט של אפליקציית האינטרנט.
  3. הדפדפן קובע אם להפעיל את אפליקציית התשלומים של מערכת ההפעלה או את אפליקציית התשלומים מבוססת-האינטרנט מהמניפסט של אפליקציית האינטרנט.

בקטעים הבאים מוסבר בפירוט איך להגדיר אמצעי תשלום משלכם כדי שדפדפנים יוכלו לזהות אותו.

שלב 1: מציינים את המזהה של אמצעי התשלום

מזהה של אמצעי תשלום הוא מחרוזת שמבוססת על כתובת URL. לדוגמה, המזהה של Google Pay הוא https://google.com/pay. מפתחי אפליקציות תשלומים יכולים לבחור כל כתובת URL כמזהה של אמצעי תשלום, כל עוד יש להם שליטה בה ואפשר להציג בה תוכן שרירותי. במאמר הזה נשתמש ב-https://bobbucks.dev/pay בתור מזהה של אמצעי התשלום.

איך מוכרים משתמשים במזהה אמצעי התשלום

אובייקט PaymentRequest נוצר עם רשימה של מזהי אמצעי תשלום שמזהים את אפליקציות התשלום שהמוכר מחליט לקבל. מזהי אמצעי התשלום מוגדרים כערך של המאפיין supportedMethods. לדוגמה:

[merchant] requests payment:

const request = new PaymentRequest([{
  supportedMethods: 'https://bobbucks.dev/pay'
}], {
  total: {
    label: 'total',
    amount: { value: '10', currency: 'USD' }
  }
});

שלב 2: הצגת המניפסט של אמצעי התשלום

מניפסט של אמצעי תשלום הוא קובץ JSON שמגדיר איזו אפליקציית תשלום יכולה להשתמש באמצעי התשלום הזה.

העברת המניפסט של אמצעי התשלום

כשמוכר מתחיל עסקת תשלום, הדפדפן שולח בקשת HTTP‏ GET לכתובת ה-URL של מזהה אמצעי התשלום. התגובה של השרת היא עם גוף המניפסט של אמצעי התשלום.

למניפסט של אמצעי תשלום יש שני שדות, default_applications ו-supported_origins.

שם הנכס תיאור
default_applications (חובה) מערך של כתובות URL שמצביעות על מניפסט של אפליקציות אינטרנט שבהן מתארחות אפליקציות התשלום. (כתובת ה-URL יכולה להיות יחסית). מערך זה אמור להפנות למניפסט הפיתוח, למניפסט הייצור וכו'.
supported_origins מערך של כתובות URL שמצביעות למקורות שעשויים לארח אפליקציות תשלומים של צד שלישי שמטמיעות את אותו אמצעי תשלום. לתשומת ליבכם: אפשר להטמיע אמצעי תשלום באמצעות כמה אפליקציות תשלום.
שדות מניפסט של אמצעי תשלום

קובץ מניפסט של אמצעי תשלום אמור להיראות כך:

[payment handler] /payment-manifest.json:

{
  "default_applications": ["https://bobbucks.dev/manifest.json"],
  "supported_origins": [
    "https://alicepay.friendsofalice.example"
  ]
}

כשהדפדפן קורא את השדה default_applications, הוא מוצא רשימה של קישורים למניפסטים של אפליקציות אינטרנט של אפליקציות תשלום נתמכות.

אפשר לנתב את הדפדפן כדי למצוא את המניפסט של אמצעי התשלום במיקום אחר

כתובת ה-URL של מזהה אמצעי התשלום יכולה להשיב עם כותרת Link שמצביעה על כתובת URL אחרת שבה הדפדפן יכול לאחזר את המניפסט של אמצעי התשלום. האפשרות הזו שימושית כשמניפסט של אמצעי תשלום מתארח בשרת אחר, או כשאפליקציית התשלום מוצגת על ידי צד שלישי.

איך דפדפן מגלה את אפליקציית התשלום ממזהה של אמצעי תשלום שמבוסס על כתובת URL עם הפניות אוטומטיות

מגדירים את שרת אמצעי התשלום כך שישיב עם כותרת HTTP Link עם המאפיין rel="payment-method-manifest" וכתובת ה-URL של מאניפסט של אמצעי התשלום.

לדוגמה, אם המניפסט נמצא בכתובת https://bobbucks.dev/payment-manifest.json, כותרת התגובה תכלול את הפרטים הבאים:

Link: <https://bobbucks.dev/payment-manifest.json>; rel="payment-method-manifest"

כתובת ה-URL יכולה להיות שם דומיין שמוגדר במלואו או נתיב יחסי. כדי לראות דוגמה, צריך לבדוק את https://bobbucks.dev/pay/ כדי לראות את תעבורת הנתונים ברשת. אפשר להשתמש גם בפקודה curl:

curl --include https://bobbucks.dev/pay

שלב 3: הצגת מניפסט של אפליקציית אינטרנט

מניפסט של אפליקציית אינטרנט משמש להגדרת אפליקציית אינטרנט, כפי שרומז השם. זהו קובץ מניפסט נפוץ שמשמש להגדרת אפליקציה מסוג Progressive Web App (‏PWA).

מניפסט אופייני של אפליקציית אינטרנט ייראה כך:

[payment handler] /manifest.json:

{
  "name": "Pay with Bobpay",
  "short_name": "Bobpay",
  "description": "This is an example of the Payment Handler API.",
  "icons": [
    {
      "src": "images/manifest/icon-192x192.png",
      "sizes": "192x192",
      "type": "image/png"
    },
    {
      "src": "images/manifest/icon-512x512.png",
      "sizes": "512x512",
      "type": "image/png"
    }
  ],
  "serviceworker": {
    "src": "service-worker.js",
    "scope": "/",
    "use_cache": false
  },
  "start_url": "/",
  "display": "standalone",
  "theme_color": "#3f51b5",
  "background_color": "#3f51b5",
  "related_applications": [
    {
      "platform": "play",
      "id": "com.example.android.samplepay",
      "min_version": "1",
      "fingerprints": [
        {
          "type": "sha256_cert",
          "value": "4C:FC:14:C6:97:DE:66:4E:66:97:50:C0:24:CE:5F:27:00:92:EE:F3:7F:18:B3:DA:77:66:84:CD:9D:E9:D2:CB"
        }
      ]
    }
  ]
}

המידע שמתואר במניפסט של אפליקציית אינטרנט משמש גם להגדרת האופן שבו אפליקציית תשלומים מופיעה בממשק המשתמש של בקשת התשלום.

שם הנכס תיאור
name (חובה) השם הזה משמש כשם של אפליקציית התשלומים.
icons (חובה) משמש כסמל של אפליקציית התשלומים. רק ב-Chrome נעשה שימוש בסמלים האלה. בדפדפנים אחרים יכול להיות שייעשה בהם שימוש כסמלי חלופיים אם לא תציינו אותם כחלק מאמצעי התשלום.
serviceworker משמש לזיהוי ה-Service Worker שפועל כאפליקציית התשלומים מבוססת-האינטרנט.
serviceworker.src כתובת ה-URL שממנה מורידים את סקריפט ה-service worker.
serviceworker.scope מחרוזת שמייצגת כתובת URL שמגדירה את היקף ההרשמה של עובד השירות.
serviceworker.use_cache כתובת ה-URL שממנה מורידים את סקריפט ה-service worker.
related_applications משמש לזיהוי האפליקציה שמשמשת כאפליקציית התשלומים שסופקו על ידי מערכת ההפעלה. אפשר למצוא פרטים נוספים במדריך למפתחים בנושא אפליקציות תשלומים ל-Android.
prefer_related_applications משמש לקביעת אפליקציית התשלום שתופעל כשזמינות גם אפליקציית תשלום שסופקה על ידי מערכת ההפעלה וגם אפליקציית תשלום מבוססת-אינטרנט.
שדות חשובים במניפסט של אפליקציית אינטרנט
אפליקציית תשלומים עם סמל.
תווית וסמל של אפליקציית תשלומים.

הנכס name במניפסט של אפליקציית האינטרנט משמש כשם של אפליקציית התשלומים, והנכס icons משמש כסמל של אפליקציית התשלומים.

איך Chrome קובע איזו אפליקציית תשלום להפעיל

השקה של אפליקציית התשלומים הספציפית לפלטפורמה

כדי להפעיל את אפליקציית התשלומים הספציפית לפלטפורמה, צריכים להתקיים התנאים הבאים:

  • השדה related_applications מצוין במניפסט של אפליקציית האינטרנט, ו:
    • מזהה החבילה והחתימה של האפליקציה המותקנת תואמים, והגרסה המינימלית (min_version) במניפסט של אפליקציית האינטרנט קטנה מגרסת האפליקציה המותקנת או שווה לה.
  • השדה prefer_related_applications הוא true.
  • אפליקציית התשלומים הספציפית לפלטפורמה מותקנת ויש לה:
    • מסנן Intent של org.chromium.action.PAY.
    • מזהה של אמצעי תשלום שצוין כערך של המאפיין org.chromium.default_payment_method_name.

פרטים נוספים על הגדרת התכונות האלה זמינים במדריך למפתחים בנושא אפליקציות תשלומים ל-Android.

[payment handler] /manifest.json

"prefer_related_applications": true,
"related_applications": [{
  "platform": "play",
  "id": "xyz.bobpay.app",
  "min_version": "1",
  "fingerprints": [{
    "type": "sha256_cert",
    "value": "92:5A:39:05:C5:B9:EA:BC:71:48:5F:F2:05:0A:1E:57:5F:23:40:E9:E3:87:14:EC:6D:A2:04:21:E0:FD:3B:D1"
  }]
}]

אם הדפדפן קבע שאפליקציית התשלומים הספציפית לפלטפורמה זמינה, תהליך הגילוי מסתיים כאן. אחרת, הוא ממשיך לשלב הבא – הפעלת אפליקציית התשלומים מבוססת האינטרנט.

השקת אפליקציית התשלומים מבוססת האינטרנט

יש לציין את אפליקציית התשלומים מבוססת-האינטרנט בשדה serviceworker במניפסט של אפליקציית האינטרנט.

[payment handler] /manifest.json:

"serviceworker": {
  "src": "payment-handler.js"
}

הדפדפן מפעיל את אפליקציית התשלומים מבוססת-האינטרנט על ידי שליחת אירוע paymentrequest ל-service worker. אין צורך לרשום מראש את קובץ השירות. אפשר לרשום אותו בזמן אמת.

הסבר על האופטימיזציות המיוחדות

איך דפדפנים יכולים לדלג על ממשק המשתמש של בקשת התשלום ולהפעיל אפליקציית תשלומים ישירות

ב-Chrome, כשמתבצעת קריאה ל-method‏ show() של PaymentRequest, Payment Request API מציג ממשק משתמש שסופק על ידי הדפדפן שנקרא 'Payment Request UI'. ממשק המשתמש הזה מאפשר למשתמשים לבחור אפליקציית תשלום. אחרי שלוחצים על הלחצן המשך בממשק המשתמש של בקשת התשלום, אפליקציית התשלום שנבחרה מופעלת.

ממשק המשתמש של בקשת התשלום מתערב לפני הפעלה של אפליקציית התשלומים.

הצגת ממשק המשתמש של בקשת התשלום לפני השקת אפליקציית התשלום מגדילה את מספר השלבים שהמשתמש צריך לבצע כדי לבצע תשלום. כדי לייעל את התהליך, הדפדפן יכול להאציל את הקצאת המידע הזה לאפליקציות תשלום ולהפעיל אפליקציית תשלומים ישירות בלי להציג את ממשק המשתמש של בקשת התשלום בהפעלה של show().

דילוג על ממשק המשתמש של בקשת התשלום והפעלה ישירה של אפליקציית התשלומים.

כדי להפעיל אפליקציית תשלומים ישירות, צריך לעמוד בתנאים הבאים:

  • האפליקציה show() מופעלת באמצעות תנועת משתמש (לדוגמה, לחיצה בעכבר).
  • יש רק אפליקציית תשלומים אחת שמאפשרת:
    • תמיכה במזהה של אמצעי התשלום המבוקש.

מתי אפליקציית תשלומים מבוססת-אינטרנט נרשמת בזמן אמת (JIT)?

אפשר להפעיל אפליקציות תשלומים מבוססות-אינטרנט בלי שהמשתמש יבקר מראש באתר של אפליקציית התשלומים וירשם את ה-service worker. אפשר לרשום את עובד השירות בזמן אמת כשהמשתמש בוחר לשלם באמצעות אפליקציית התשלום מבוססת-האינטרנט. יש שתי אפשרויות לתזמון הרישום:

  • אם ממשק המשתמש של בקשת התשלום מוצג למשתמש, האפליקציה תירשם בזמן אמת ותופעל כשהמשתמש ילחץ על המשך.
  • אם מדלגים על ממשק המשתמש של בקשת התשלום, אפליקציית התשלומים רשומה בדיוק בזמן ומפעילים אותה ישירות. כדי לדלג על ממשק המשתמש של בקשת התשלום ולהפעיל אפליקציה שנרשמה בזמן אמת, נדרשת תנועת משתמש. כך אפשר למנוע רישום בלתי צפוי של שירותי עובדים (service workers) במקורות שונים.

השלבים הבאים

עכשיו, אחרי שהאפליקציה שלכם לתשלום זמינה, תוכלו לקרוא איך מפתחים אפליקציית תשלום ספציפית לפלטפורמה ואפליקציית תשלום מבוססת-אינטרנט.