מבוא ל- API של Stripe עבור Java

1. סקירה כללית

Stripe הוא שירות מבוסס ענן מאפשר לעסקים ולאנשים פרטיים לקבל תשלומים דרך האינטרנט ומציע גם ספריות בצד הלקוח (JavaScript ונייד מקורי) וגם ספריות בצד השרת (Java, Ruby, Node.js וכו ').

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

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

2. תלות

כדי להשתמש ב- API של Stripe עבור Java בפרויקט, אנו מוסיפים את התלות המתאימה שלנו pom.xml:

 com.stripe strip-java 4.2.0 

אנו יכולים למצוא את הגרסה האחרונה שלה במאגר המרכזי של Maven.

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

 org.springframework.boot spring-boot-starter-parent 2.2.6. שחרור 

אנו נשתמש גם ב- Lombok להפחתת קוד boilerplate, ו- Thymeleaf יהיה מנוע התבנית למסירת דפי אינטרנט דינמיים.

מכיוון שאנו משתמשים ב- אביב-אתחול-המתנע-הורה כדי לנהל את הגרסאות של ספריות אלה, איננו חייבים לכלול את גרסאותיהן ב pom.xml:

 org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-thymeleaf org.projectlombok lombok 

ציין זאת אם אתה משתמש ב- NetBeans, ייתכן שתרצה להשתמש ב- Lombok במפורש עם גרסה 1.16.16מאחר ובאג בגרסת Lombok שמסופק עם Spring Boot 1.5.2 גורם ל- NetBeans ליצור הרבה שגיאות.

3. מקשי API

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

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

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

4. זרימה כללית

החיוב בכרטיס האשראי יבוצע בחמישה שלבים פשוטים, הכוללים את הקצה הקדמי (מופעל בדפדפן), את הקצה האחורי (אפליקציית Spring Boot) ואת הפס:

  1. משתמש נכנס לדף הקופה ולוחץ על "שלם בכרטיס".
  2. בפני המשתמש מוצגת תיבת הדו-שיח שכבת-העל של Checkout, שם ממלאת את פרטי כרטיס האשראי.
  3. משתמש מאשר באמצעות "שלם" שיאפשר:
    • שלחו את כרטיס האשראי לסטריפ
    • קבל אסימון בתגובה שיצורף לטופס הקיים
    • הגש את הטופס הזה עם הסכום, מפתח ה- API הציבורי, הדוא"ל והאסימון למערכת שלנו
  4. אנשי הקשר האחוריים שלנו פסים עם האסימון, הסכום ומפתח ה- API הסודי.
  5. Back-end בודק תגובת פס ומספק למשתמש משוב על הפעולה.

אנו נסקור כל שלב בפירוט רב יותר בסעיפים הבאים.

5. טופס קופה

Stripe Checkout הוא יישומון הניתן להתאמה אישית, מוכן לנייד ולוקליזציה, המציג טופס להצגת פרטי כרטיס אשראי. באמצעות הכללה ותצורה של "checkout.js", היא אחראית ל:

  • עיבוד כפתור "שלם בכרטיס"

  • עיבוד דיאלוג של שכבת-על לתשלום (מופעל לאחר לחיצה על "שלם בכרטיס")

  • אימות כרטיס אשראי
  • תכונת "זכור אותי" (משייך את הכרטיס למספר נייד)
  • שליחת כרטיס האשראי לפסים והחלפתו באסימון בטופס המצורף (מופעל לאחר לחיצה על "שלם")

אם עלינו להפעיל שליטה רבה יותר על טופס התשלום מאשר המסופק על ידי Stripe Checkout, נוכל להשתמש ב- Elements Elements.

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

5.1. בקר

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

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

אנחנו גם מגדירים מַטְבֵּעַ ו כמות (מבוטא בסנט) כאן באופן ידני אך ורק למטרות הדגמה, אך ביישום אמיתי, אנו עשויים להגדיר מזהה מוצר / מכירה שיכול לשמש כדי להשיג את הערכים בפועל.

לאחר מכן נשלח לתצוגת הקופה המכילה את טופס התשלום:

@Controller מחלקה ציבורית CheckoutController {@Value ("$ {STRIPE_PUBLIC_KEY}") מחרוזת stripePublicKey פרטית; @RequestMapping ("/ checkout") קופת מחרוזות ציבורית (מודל מודל) {model.addAttribute ("סכום", 50 * 100); // במודל cents.addAttribute ("stripePublicKey", stripePublicKey); model.addAttribute ("מטבע", ChargeRequest.Currency.EUR); להחזיר "קופה"; }}

לגבי מפתחות ה- API של Stripe, אתה יכול להגדיר אותם כמשתני סביבה לכל יישום (מבחן לעומת חי).

כמו במקרה של כל סיסמה או מידע רגיש, עדיף להשאיר את המפתח הסודי מחוץ למערכת בקרת הגרסאות שלך.

5.2. טופס

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

  מחיר: 

ה "checkout.js"סקריפט מפעיל באופן אוטומטי בקשה לפסים ממש לפני ההגשה, שמוסיפה את אסימון הפס ואת כתובת הדוא"ל של משתמש הלהקה כשדות מוסתרים"stripeToken"ו"פס דואר אלקטרוני“.

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

אנו משתמשים ב- Thymeleaf כדי לעבד את התכונות "מפתח נתונים“, “כמות נתונים“, ו-“מטבע נתונים“.

הכמות ("כמות נתונים") משמש רק למטרות תצוגה (יחד עם"מטבע נתונים“). היחידה שלה היא סנטים של המטבע המשומש, ולכן אנו מחלקים אותה ל 100 כדי להציג אותה.

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

6. מבצע טעינה

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

6.1. ישות ChargeRequest

בואו נגדיר את ChargeRequest POJO שנשתמש בה כישות עסקית במהלך פעולת החיוב:

@Data class class ChargeRequest {מטבע ציבורי ציבורי {EUR, USD; } תיאור מחרוזת פרטי; סכום פרטי פרטי; מטבע מטבע פרטי; פס מחרוזת פרטי דואר אלקטרוני; stripeToken פרטי מחרוזת; }

6.2. שֵׁרוּת

בוא נכתוב א StripeService כיתה ל להעביר את פעולת הטעינה בפועל לפס:

מעמד ציבורי @Service StripeService {@Value ("$ {STRIPE_SECRET_KEY}") מחרוזת פרטית secretKey; @PostConstruct פן ריק () init () {Stripe.apiKey = secretKey; } חיוב תשלום ציבורי (ChargeRequest chargeRequest) זורק AuthenticationException, InvalidRequestException, APIConnectionException, CardException, APIException {Map chargeParams = HashMap חדש (); chargeParams.put ("סכום", chargeRequest.getAmount ()); chargeParams.put ("מטבע", chargeRequest.getCurrency ()); chargeParams.put ("תיאור", chargeRequest.getDescription ()); chargeParams.put ("מקור", chargeRequest.getStripeToken ()); החזר Charge.create (chargeParams); }}

כפי שהוצג ב CheckoutController, ה מפתח סודי השדה מאוכלס ממשתנה הסביבה STRIPE_SECRET_KEY שהעתקנו מלוח המחוונים של הפס.

לאחר אתחול השירות, נעשה שימוש במפתח זה בכל פעולות הפס הבאות.

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

6.3. בקר

לבסוף, בוא נכתוב את בקר שיקבל את בקשת ה- POST שמבוצעת על ידי טופס הקופה ויגיש את החיוב לפס דרך שלנו StripeService.

שים לב כי "ChargeRequestהפרמטר "מאותחל אוטומטית עם פרמטרי הבקשה"כמות“, “פס דואר אלקטרוני“, ו-“stripeToken”כלול בטופס:

@Controller מחלקה ציבורית ChargeController {@Autowired פרטי StripeService תשלומים שירות; @PostMapping ("/ charge") תשלום חיובי מחרוזת (ChargeRequest chargeRequest, דגם מודל) זורק StripeException {chargeRequest.setDescription ("תשלום לדוגמה"); chargeRequest.setCurrency (Currency.EUR); חיוב חיוב = PaymentService.charge (chargeRequest); model.addAttribute ("id", charge.getId ()); model.addAttribute ("סטטוס", charge.getStatus ()); model.addAttribute ("chargeId", charge.getId ()); model.addAttribute ("balance_transaction", charge.getBalanceTransaction ()); להחזיר "תוצאה"; } @ExceptionHandler (StripeException.class) handlerrror ציבורי מחרוזת (מודל דגם, StripeException לשעבר) {model.addAttribute ("שגיאה", למשל. להחזיר "תוצאה"; }}

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

שֶׁלָנוּ ExceptionHandler יעסוק בחריגים מהסוג StripeException שנזרקים במהלך פעולת הטעינה.

אם אנו זקוקים לטיפול שגיאות עדין יותר, אנו יכולים להוסיף מטפלים נפרדים לסוגי המשנה של StripeException, כמו CardException, RateLimitException, או AuthenticationException.

ה "תוֹצָאָה"תצוגה מביאה את התוצאה של פעולת הטעינה.

7. הצגת התוצאה

ה- HTML המשמש להצגת התוצאה הוא תבנית בסיסית של Thymeleaf המציגה את התוצאה של פעולת טעינה. המשתמש נשלח לכאן על ידי ה- ChargeController בין אם פעולת הטעינה הצליחה ובין אם לא:

   תוֹצָאָה 

הַצלָחָה!

מזהה: סטטוס: מזהה חיוב: מזהה עסקה יתרה: שוב קופה

לאחר ההצלחה, המשתמש יראה כמה פרטים על פעולת הטעינה:

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

8. מסקנה

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

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

פעולת הטעינה היא אחת מבין האפשרויות הרבות שמציע ה- Stripe Java API. ההפניה הרשמית ל- API תנחה אותנו בכל מערך הפעולות.

את קוד הדוגמה המשמש במדריך זה ניתן למצוא בפרויקט GitHub.


$config[zx-auto] not found$config[zx-overlay] not found