כיצד לכתוב הרחבת תשלום

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

למעשה, שיטת תשלום היא הרחבה רגילה המממשת את ממשק IPaymentMethod (Nop.Services.Payments namespace). כפי שודאי ניחשת, ממשק IPaymentMethod משמש ליצירת הרחבת שיטת תשלום. הוא כולל מספר מתודות המיועדות באופן ספציפי לשיטת תשלום כגון ProcessPayment() ו- GetAdditionalHandlingFee(). הוסף פרויקט (ספרית מחלקות, class library) הרחבת תשלום ל- solution ובוא נתחיל.


בקרים, דפי צפיה, מודלים (Controllers, views, models)

ראשית יש ליצור בקר. בקר זה יהיה אחראי להגיב לבקשות שיתקבלו מאתר ASP.NET MVC.

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

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

[NonAction]

public override IList ValidatePaymentForm(FormCollection form)
{
var warnings = new List();
return warnings;
{

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

[NonAction]

public override ProcessPaymentRequest GetPaymentInfo(FormCollection form)
{
var paymentInfo = new ProcessPaymentRequest();
return paymentInfo;
{

2. כעת יש לממש את מתודות פעולה Configure המשמשות את הגדרת ההרחבה (ע"י מנהל האתר/חנות באיזור הניהול). מתודה זו ו-view מתאים יגדירו כיצד יראה מנהל את אפשרויות ההגדרות בלוח הניהול (מערכת > הגדרות > שיטות תשלום).

3. שלב אחרון הוא ליצור מתודת פעולה PaymentInfo. מתודה זו ו-view מתאים יקבעו כיצד הלקוחות יראו את דף מידע התשלום במשך תהליך התשלום.

ביצוע התשלום

כעת יש צורך ליצור מחלקה המממשת את ממשק IPaymentMethod. מחלקה זו תעשה את כל העבודה של התקשרות עם ספק התשלומים. כאשר מישהו מבצע הזמנה תיקרא מתודת ProcessPayment או מתודת PostProcessPayment מהמחלקה שהקמת. כך מחלקת CashOnDeliveryPaymentProcessor מוגדרת (שיטת תשלום "מזומן"):

/// /// CashOnDelivery payment processor ///

public class CashOnDeliveryPaymentProcessor : BasePlugin, IPaymentMethod

}...

לממשק IPaymentMethod יש מספר מתודות ותכונות אשר חובה לממש.

  • ProcessPayment. מתודה זו תיקרא תמיד בדיוק לפני שלקוח מבצע הזמנה. השתמש בה כאשר אתה צריך לעבד תשלום לפני שהזמנה מוכנסת לבסיס הנתונים. למשל, אימות כרטיס אשראי. בדר"כ מתודה זו משמשת כאשר לקוח אינו מופנה לאתר צד שלישי לסיום התשלום אלא כל התשלומים מטופלים באתר שלך (למשל PayPal Direct).
  • PostProcessPayment. מתודה זו תיקרא מיד לאחר שלקוח הזין הזמנה. בדר"כ מתודה זו משמשת כאשר לקוח מועבר לאתר צד שלישי לסיום התשלום (למשל PayPal Standard).
  • GetAdditionalHandlingFee. מאפשרת להחזיר כל תשלום דמי טיפול נוספים שיתווספו לסה"כ ההזמנה.
  • Capture. חלק משערי התשלום מאפשרים לך לאמת תשלומים לפני שהם נתפסים. דבר זה מאפשר למנהל החנות לעבור על פרטי הזמנה לפני שהתשלום מתבצע בפועל. במקרה כזה אתה פשוט מאשר תשלום במתודת ProcessPayment או מתודת PostProcessPayment (המתוארות למעלה) ואז פשוט "לוכד" אותו. במקרה כזה, כפתור Capture יופיע בדף פרטי הזמנה באיזור הניהול. שים לב שהזמנה צריכה להיות כבר מאושרת ותכונת SupportCapture צריכה להחזיר true.
  • Refund. מתודה זו מאפשרת לך לבצע החזרים. במקרה זה, כפתור Refund יופיע בדף פרטי ההזמנה באיזור הניהול. שים לב שההזמנה צריכה להיות כבר משולמת ותכונות SupportRefund או SupportPartiallyRefund צריכות להחזיר true.
  • Void. מתודה זו מאפשר לך לבטל הזמנה שכבר אושרה אבל טרם בוצע תהליך התשלום בפועל. במקרה זה כפתור Void יופיע בדף פרטי ההזמנה באיזור הניהול. שים לב שהזמנה צריכה להיות מאושרת ותכונה SupportVoid צריכה להחזיר ערך true.
  • ProcessRecurringPayment. השתמש במתודה זו לעיבוד תשלומים חוזרים (כגון תשלומי מנוי חודשיים).
  • CancelRecurringPayment. השתמש במתודה זו לביטול תשלומים חוזרים.
  • CanRePostProcessPayment. בדר"כ מתודה זו משמשת כאשר לקוח מועבר לאתר צד שלישי לסיום תהליך התשלום. אם התשלום באותו צד שלישי ייכשל, אופציה זו תאפשר ללקוח לנסות לסיים שוב את ההזמנה מאוחר יותר ללא הצורך להכניס הזמנה חדשה. CanRePostProcessPayment צריכה להחזיר ערך true כדי שתכונה זו תתאפשר.
  • GetConfigurationRoute. כפי שוודאי תזכור, יצרנו בקר בשלב הקודם. מתודה זו צריכה להחזיר נתיב למתודת ה- Configureשלה. למשל:

public void GetConfigurationRoute(out string actionName,
            out string controllerName,
            out RouteValueDictionary routeValues)
        {

            actionName = "Configure";            controllerName = "PaymentCashOnDelivery";
            routeValues = new RouteValueDictionary()
            {
                { "Namespaces", "Nop.Plugin.Payments.CashOnDelivery.Controllers" },
                { "area", null {
            {;
        {

  • GetPaymentInfoRoute. מתודה זו צריכה להחזיר נתיב למתודת ה- PublicInfo  של הבקר שנוצר. למשל:

public void GetPaymentInfoRoute(out string actionName,
            out string controllerName,
            out RouteValueDictionary routeValues)
        {
            actionName = "PaymentInfo";
            controllerName = "PaymentCashOnDelivery";
            routeValues = new RouteValueDictionary()
            {
                { "Namespaces", "Nop.Plugin.Payments.CashOnDelivery.Controllers" },
                { "area", null {
            {;
        {

  • GetControllerType. מתודה זו צריכה להחזיר את הסוג של הבקר שנוצר קודם.
  • SupportCapture, SupportPartiallyRefund, SupportRefund, SupportVoid. תכונות אלו מציינות האם המתודות המתאימות של שיטת התשלום שלך נתמכות.
  • RecurringPaymentType. תכונה זו מציינת אם תשלומים חוזרים נתמכים.
  • PaymentMethodType. תכונה זו מציינת את סוג שיטת התשלום. כיום קיימים 3 סוגים: Standard משמש כאשר לקוח לא מועבר לאתר צד שלישי. Redirection משמש כאשר הלקוח מועבר לאתר צד שלישי. Button דומה ל- Redirection בהבדל אחד, שכאן האופציה מוצגת ככפתור בדף עגלת הקניות (למשל יוצג כפתור " Google Checkou").

סיכום

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