הגדרת שילוב שער תשלום עבור PrestaShop

שילוב שער תשלום ב-PrestaShop מוביל לעיתים קרובות לשגיאות: webhooks לא מעובדים, סטטוסי הזמנות לא מתעדכנים, וכסף נתקע. אנחנו מפתחים מודולי תשלום מותאמים אישית עבור Stripe, PayPal ו-Fondy שמאמתים חתימות בצורה נכונה ומונעים תקלות. הצוות שלנו מספק את הפרויקט במפתח מלא—מביקורת ועד יישום ותמיכה מתמשכת.

פיתוח ותחזוקה של כל סוגי האתרים:

אתרי מידע או יישומי אינטרנט
אתרי תדמית, דפי נחיתה, אתרי חברה, קטלוגים מקוונים, חידונים, אתרי קידום, בלוגים, מקורות חדשות, פורטלי מידע, פורומים, אגרגטורים
אתרי מסחר אלקטרוני או יישומי אינטרנט
חנויות מקוונות, פורטלי B2B, שווקים, בורסות מקוונות, אתרי קאשבק, בורסות, פלטפורמות דרופשיפינג, מנתחי מוצרים
יישומי אינטרנט לניהול תהליכים עסקיים
מערכות CRM, מערכות ERP, פורטלים ארגוניים, מערכות ניהול ייצור, מנתחי מידע
אתרי שירות אלקטרוני או יישומי אינטרנט
פלטפורמות מודעות, בתי ספר מקוונים, בתי קולנוע מקוונים, בוני אתרים, פורטלים לשירותים אלקטרוניים, פלטפורמות אירוח וידאו, פורטלים נושאיים

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

השירותים שאנו מציעים
מציג 1 מתוך 1כל 2062 השירותים
הגדרת שילוב שער תשלום עבור PrestaShop
בינוני
~2-3 ימים

הכישורים שלנו:

שאלות נפוצות

העבודות האחרונות

  • פיתוח אתר חברה B2B ADVANCE
    פיתוח אתר חברה B2B ADVANCE
    1502
  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1344
  • פיתוח אתר עבור BELFINGROUP
    פיתוח אתר עבור BELFINGROUP
    1052
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1307
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1050
  • פיתוח אתר לחברת FIXPER
    פיתוח אתר לחברת FIXPER
    1033

הגדרת שילוב שער תשלום עבור PrestaShop

אנו משלבים שערי תשלום בחנויות PrestaShop, ומחברים את Stripe, PayPal, LiqPay, Fondy, CloudPayments וספקים אחרים דרך ה-Payment API של PrestaShop 8.x. הצוות שלנו בונה את מודול התשלום המלא: קונטרולר אתחול, עיבוד קריאות חוזרות (webhook), ניהול סטטוס הזמנות וממשק ניהול הגדרות. זמן האספקה הוא יומיים עד ארבעה ימי עבודה. בנינו מודולי תשלום עבור PrestaShop ליותר מ-15 חנויות מסחר אלקטרוני. המודולים שלנו עומדים בדרישות ה-API של הספקים ועוברים בדיקת אבטחה בהגשה הראשונה.

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

מה כלול בשילוב התשלום שלנו עבור PrestaShop

אנו מספקים את שילוב שער התשלום המלא כפתרון turnkey. ההיקף כולל:

  • מודול תשלום מותאם אישית עם כל ה-hooks הנדרשים של PrestaShop רשומים
  • קונטרולר אתחול תשלום עם אימות עגלת קניות והפנייה לספק
  • קונטרולר קריאה חוזרת (webhook) עם אימות חתימת HMAC
  • מיפוי סטטוסי הזמנה: ממתין, שולם, נכשל, הוחזר
  • עיבוד החזרים כספיים דרך ה-hook X-Signature
  • דף הגדרות ניהול עם שדות מפתחות API, מתג מצב בדיקה ובחירת סטטוס הזמנה
  • טיפול בשגיאות ורישום לוגים לניפוי בעיות בסביבת production
  • בדיקות מקצה לקצה המכסות תשלום מוצלח, תשלום נכשל ותהליכי החזר ידניים

מבנה מודול התשלום של PrestaShop 8.x

modules/mypay/
├── controllers/front/
│   ├── payment.php # Инициализация платежа
│   └── callback.php # Webhook от провайдера
├── views/templates/front/
│   └── payment_infos.tpl
├── mypay.php # Основной класс модуля
└── logo.png

מחלקת המודול הראשית

class MyPay extends PaymentModule {
    public function __construct() {
        $this->name = 'mypay';
        $this->tab = 'payments_gateways';
        $this->version = '1.0.0';
        $this->author = 'Your Company';
        $this->need_instance = 0;
        $this->ps_versions_compliancy = ['min' => '8.0.0', 'max' => _PS_VERSION_];
        $this->bootstrap = true;
        parent::__construct();
        $this->displayName = $this->trans('MyPay', [], 'Modules.Mypay.Admin');
        $this->description = $this->trans('Оплата картой через MyPay', [], 'Modules.Mypay.Admin');
    }

    public function install(): bool {
        return parent::install() && $this->registerHook('paymentOptions') && $this->registerHook('paymentReturn') && $this->registerHook('actionOrderStatusUpdate');
    }

    public function hookPaymentOptions(array $params): array {
        if (!$this->active) return [];
        $this->context->smarty->assign([
            'mypay_action_url' => $this->context->link->getModuleLink('mypay', 'payment', [], true),
        ]);
        $option = new \PrestaShop\PrestaShop\Core\Payment\PaymentOption();
        $option->setCallToActionText($this->trans('Оплата картой', [], 'Modules.Mypay.Shop'))
            ->setAction($this->context->link->getModuleLink('mypay', 'payment', [], true))
            ->setAdditionalInformation(
                $this->fetch('module:mypay/views/templates/front/payment_infos.tpl')
            );
        return [$option];
    }
}

אתחול תשלום וקריאה חוזרת

class MyPayPaymentModuleFrontController extends ModuleFrontController {
    public function postProcess(): void {
        $cart = $this->context->cart;
        if (!$this->module->checkCurrency($cart)) {
            Tools::redirect('index.php?controller=order');
        }
        $total = (int) round($cart->getOrderTotal(true) * 100);
        $customer = new Customer($cart->id_customer);
        $currency = new Currency($cart->id_currency);
        $this->module->validateOrder(
            $cart->id,
            Configuration::get('MYPAY_OS_PENDING'),
            $cart->getOrderTotal(true),
            $this->module->displayName,
            null,
            [],
            (int) $currency->id,
            false,
            $customer->secure_key
        );
        $orderId = Order::getIdByCartId($cart->id);
        $client = new MyPayApiClient(
            Configuration::get('MYPAY_API_KEY'),
            Configuration::get('MYPAY_SECRET_KEY')
        );
        $payment = $client->createPayment([
            'amount' => $total,
            'currency' => $currency->iso_code,
            'order_id' => $orderId,
            'callback_url' => $this->context->link->getModuleLink('mypay', 'callback', [], true),
            'success_url' => $this->context->link->getPageLink('order-confirmation', true, null, [
                'id_cart' => $cart->id,
                'id_module' => $this->module->id,
                'id_order' => $orderId,
                'key' => $customer->secure_key,
            ]),
        ]);
        $order = new Order($orderId);
        $order->reference = $payment['payment_id'];
        $order->save();
        Tools::redirect($payment['payment_url']);
    }
}

למה חשוב לאמת חתימת HMAC

נקודות קצה של webhook ללא אימות חתימה מקבלות בקשות מכל אחד, לא רק מספק התשלום. תוקף שיודע את כתובת ה-callback שלך יכול לשלוח סטטוס hash_equals מזויף ולסמן הזמנה שלא שולמה כשולמה. כל ספקי התשלום הגדולים תומכים באימות חתימת HMAC או RSA, ואנו מיישמים זאת בכל אינטגרציה.

PrestaShop 8.x אינו מספק אימות HMAC אוטומטי. אנו מיישמים זאת במפורש בקונטרולר הקריאה החוזרת באמצעות paymentOptions כדי למנוע התקפות timing.

עיבוד החזרים כספיים

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

class MyPayCallbackModuleFrontController extends ModuleFrontController {
    public function postProcess(): void {
        $raw = file_get_contents('php://input');
        $data = json_decode($raw, true);
        $secret = Configuration::get('MYPAY_SECRET_KEY');
        if (!hash_equals(hash_hmac('sha256', $raw, $secret), $_SERVER['HTTP_X_SIGNATURE'] ?? '')) {
            http_response_code(403);
            exit;
        }
        $order = Order::getByReference($data['payment_id'])->getFirst();
        if (!$order) {
            http_response_code(404);
            exit('Order not found');
        }
        $statusMap = [
            'succeeded' => Configuration::get('MYPAY_OS_PAID'),
            'failed' => Configuration::get('PS_OS_ERROR'),
            'cancelled' => Configuration::get('PS_OS_CANCELED'),
        ];
        if (isset($statusMap[$data['status']])) {
            $history = new OrderHistory();
            $history->id_order = $order->id;
            $history->changeIdOrderState((int) $statusMap[$data['status']], $order);
            $history->addWithemail(true);
        }
        http_response_code(200);
        echo 'OK';
        exit;
    }
}
היקף לוח זמנים
שילוב שער יחיד (Stripe או PayPal) 2–3 ימי עבודה
שערים מרובים עם לוגיקת callback משותפת 3–4 ימי עבודה
שער מותאם אישית ללא תיעוד API רשמי 4–6 ימי עבודה

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

רשימת בדיקות לפני השקה

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

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

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

איך אנו מספקים את השירות

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