Plugin Directory

Changeset 3047124


Ignore:
Timestamp:
03/07/2024 01:18:17 PM (2 years ago)
Author:
monobank
Message:

Version 1.8.1

Location:
mono-checkout
Files:
4 edited
22 copied

Legend:

Unmodified
Added
Removed
  • mono-checkout/tags/1.8.1/includes/MonoApi.php

    r3045127 r3047124  
    99    public $last_raw_response;
    1010    public $last_error;
     11    public $pub_key;
    1112
    12     public function __construct($token, $url) {
    13         $this->token = $token;
    14         $this->url = $url;
     13    public static function fetch_pub_key( $token, $url ) {
     14        $pub_key_url = str_replace('personal/checkout/order/', 'personal/checkout/signature/public/key', $url);
     15        $r = json_decode(self::send_request( $pub_key_url, 'GET', $token ), true);
     16        if ($r) { return $r['key']; }
     17        return null;
    1518    }
    1619
    17     public function create_order( $request ) {
    18         return $this->do_request( $this->url, 'POST', wp_json_encode($request) );
    19     }
    20 
    21     public function update_order( $mono_order_id ) {
    22         return $this->do_request( $this->url . '/' . $mono_order_id );
    23     }
    24 
    25     protected function do_request( $url, $method = 'GET', $postdata = null ) {
     20    protected static function send_request( $url, $method, $token, $postdata = null ) {
    2621        $headers = [
    2722            'Content-Type: application/json',
    28             'X-Token: ' . $this->token,
     23            'X-Token: ' . $token,
    2924        ];
    3025        if (extension_loaded("curl")) {
     
    5752            $resultRaw = file_get_contents($url, false, $context);
    5853        }
     54        return $resultRaw;
     55    }
     56
     57    public function __construct($token, $url, $pub_key) {
     58        $this->token = $token;
     59        $this->url = $url;
     60        $this->pub_key = $pub_key;
     61    }
     62
     63    public function create_order( $request ) {
     64        return $this->do_request( $this->url, 'POST', wp_json_encode($request) );
     65    }
     66
     67    public function update_order( $mono_order_id ) {
     68        return $this->do_request( $this->url . '/' . $mono_order_id );
     69    }
     70
     71    public function validate_webhook( $xSignHeader, $data ) {
     72        $pubKeyBase64 = $this->pub_key;
     73
     74        // value from X-Sign header in webhook request
     75        $xSignBase64 = $xSignHeader;
     76
     77        $message = $data;
     78        $signature = base64_decode($xSignBase64);
     79        $publicKey = openssl_get_publickey(base64_decode($pubKeyBase64));
     80
     81        $result = openssl_verify($message, $signature, $publicKey, OPENSSL_ALGO_SHA256);
     82
     83        return $result === 1;
     84    }
     85
     86    protected function do_request( $url, $method = 'GET', $postdata = null ) {
     87        $resultRaw = self::send_request( $url, $method, $this->token, $postdata );
    5988        $this->last_raw_response = $resultRaw;
    6089        $result = rest_sanitize_object(json_decode($resultRaw, true));
  • mono-checkout/tags/1.8.1/includes/class.gateway.php

    r3045127 r3047124  
    55class Mono_Gateway extends \WC_Payment_Gateway {
    66
     7    /**
     8     * @var MonoApi
     9     */
    710    public $api;
    811
     
    717720            $url       = $this->get_option( 'base_url' );
    718721            $token     = $this->get_option( 'token' );
    719             $this->api = new MonoApi( $token, $url );
     722            $pub_key = $this->get_option( 'pub_key' );
     723            if (!$pub_key) {
     724                $pub_key = MonoApi::fetch_pub_key( $token, $url );
     725                if ($pub_key) {
     726                    $this->update_option( 'pub_key', $pub_key );
     727                }
     728            }
     729            $this->api = new MonoApi( $token, $url, $pub_key );
    720730        }
    721731        return $this->api;
     
    725735    {
    726736        $json = file_get_contents('php://input');
     737        if (!$this->get_api()->validate_webhook( @$_SERVER['HTTP_X_SIGN'], $json )) { // incorrect signature
     738            http_response_code(400);
     739            wp_die('', '', 400);
     740        }
     741
    727742        $data = rest_sanitize_object(json_decode($json, true));
    728743        if ($data) {
     
    734749                /** @var \WC_Cart $cart */
    735750                $cart = $session['cart'];
    736                 if ($cart) {
     751                if ($cart and is_object($cart)) {
    737752                    $cart->empty_cart();
    738753                }
  • mono-checkout/tags/1.8.1/mono.php

    r3045127 r3047124  
    77Plugin URI: https://checkout.mono.bank/woocomerce
    88Description: модуль Чекауту від monobank це спосіб автоматизувати процес оформлення покупки на вашому сайті. Доступний функціонал: предзаповнення даних отримувача, рекомендації по доставці та оплаті, всі доступні способи оплати від monobank: еквайринг, Покупка частинами та оплата при отриманні. Має бути підключений інтернет-еквайринг від monobank
    9 Version: 1.8.0
     9Version: 1.8.1
    1010Requires at least: 5.8
    1111Requires PHP: 7.4
  • mono-checkout/tags/1.8.1/readme.txt

    r3045127 r3047124  
    44Requires at least: 5.8
    55Tested up to: 6.4
    6 Stable tag: 1.8.0
     6Stable tag: 1.8.1
    77Requires PHP: 7.4
    88License: GPLv2 or later
    99License URI: https://www.gnu.org/licenses/gpl-2.0.html
    1010
    11 модуль Чекауту від monobank це спосіб автоматизувати процес оформлення покупки на вашому сайті
     11Модуль Чекауту від monobank це спосіб автоматизувати процес оформлення покупки на вашому сайті
    1212
    1313== Description ==
    1414
    15 модуль Чекауту від monobank це спосіб автоматизувати процес оформлення покупки на вашому сайті. Доступний функціонал: предзаповнення даних отримувача, рекомендації по доставці та оплаті, всі доступні способи оплати від monobank: еквайринг, Покупка частинами та оплата при отриманні. Має бути підключений інтернет-еквайринг від monobank.
     15Модуль Чекауту від monobank це спосіб автоматизувати процес оформлення покупки на вашому сайті. Доступний функціонал: предзаповнення даних отримувача, рекомендації по доставці та оплаті, всі доступні способи оплати від monobank: еквайринг, Покупка частинами та оплата при отриманні. Має бути підключений інтернет-еквайринг від monobank.
    1616
    17 Даний модуль використовує сервіс чекауту monobank для отримання платежів за замовлення. Детальніше про сервіс можна подивитись за посиланням https://api.monobank.ua/. Умови використання - https://www.monobank.ua/terms
     17Даний модуль використовує сервіс чекауту monobank для отримання платежів за замовлення. Детальніше про сервіс можна подивитись за [посиланням](https://api.monobank.ua/). Умови використання - [https://www.monobank.ua/terms](https://www.monobank.ua/terms)
    1818
    1919Що робить цей плагін:
     
    3939= Де взяти токен? =
    4040
    41 В web-кабінеті https://web.monobank.ua/, в налаштуваннях інтернет-еквайрингу.
     41В web-кабінеті [https://web.monobank.ua/](https://web.monobank.ua/), в налаштуваннях інтернет-еквайрингу.
    4242
    4343== Screenshots ==
     
    4949
    5050== Changelog ==
     51
     52= 1.8.1 =
     53* Покращення безпеки
    5154
    5255= 1.8.0 =
  • mono-checkout/trunk/includes/MonoApi.php

    r3045127 r3047124  
    99    public $last_raw_response;
    1010    public $last_error;
     11    public $pub_key;
    1112
    12     public function __construct($token, $url) {
    13         $this->token = $token;
    14         $this->url = $url;
     13    public static function fetch_pub_key( $token, $url ) {
     14        $pub_key_url = str_replace('personal/checkout/order/', 'personal/checkout/signature/public/key', $url);
     15        $r = json_decode(self::send_request( $pub_key_url, 'GET', $token ), true);
     16        if ($r) { return $r['key']; }
     17        return null;
    1518    }
    1619
    17     public function create_order( $request ) {
    18         return $this->do_request( $this->url, 'POST', wp_json_encode($request) );
    19     }
    20 
    21     public function update_order( $mono_order_id ) {
    22         return $this->do_request( $this->url . '/' . $mono_order_id );
    23     }
    24 
    25     protected function do_request( $url, $method = 'GET', $postdata = null ) {
     20    protected static function send_request( $url, $method, $token, $postdata = null ) {
    2621        $headers = [
    2722            'Content-Type: application/json',
    28             'X-Token: ' . $this->token,
     23            'X-Token: ' . $token,
    2924        ];
    3025        if (extension_loaded("curl")) {
     
    5752            $resultRaw = file_get_contents($url, false, $context);
    5853        }
     54        return $resultRaw;
     55    }
     56
     57    public function __construct($token, $url, $pub_key) {
     58        $this->token = $token;
     59        $this->url = $url;
     60        $this->pub_key = $pub_key;
     61    }
     62
     63    public function create_order( $request ) {
     64        return $this->do_request( $this->url, 'POST', wp_json_encode($request) );
     65    }
     66
     67    public function update_order( $mono_order_id ) {
     68        return $this->do_request( $this->url . '/' . $mono_order_id );
     69    }
     70
     71    public function validate_webhook( $xSignHeader, $data ) {
     72        $pubKeyBase64 = $this->pub_key;
     73
     74        // value from X-Sign header in webhook request
     75        $xSignBase64 = $xSignHeader;
     76
     77        $message = $data;
     78        $signature = base64_decode($xSignBase64);
     79        $publicKey = openssl_get_publickey(base64_decode($pubKeyBase64));
     80
     81        $result = openssl_verify($message, $signature, $publicKey, OPENSSL_ALGO_SHA256);
     82
     83        return $result === 1;
     84    }
     85
     86    protected function do_request( $url, $method = 'GET', $postdata = null ) {
     87        $resultRaw = self::send_request( $url, $method, $this->token, $postdata );
    5988        $this->last_raw_response = $resultRaw;
    6089        $result = rest_sanitize_object(json_decode($resultRaw, true));
  • mono-checkout/trunk/includes/class.gateway.php

    r3045127 r3047124  
    55class Mono_Gateway extends \WC_Payment_Gateway {
    66
     7    /**
     8     * @var MonoApi
     9     */
    710    public $api;
    811
     
    717720            $url       = $this->get_option( 'base_url' );
    718721            $token     = $this->get_option( 'token' );
    719             $this->api = new MonoApi( $token, $url );
     722            $pub_key = $this->get_option( 'pub_key' );
     723            if (!$pub_key) {
     724                $pub_key = MonoApi::fetch_pub_key( $token, $url );
     725                if ($pub_key) {
     726                    $this->update_option( 'pub_key', $pub_key );
     727                }
     728            }
     729            $this->api = new MonoApi( $token, $url, $pub_key );
    720730        }
    721731        return $this->api;
     
    725735    {
    726736        $json = file_get_contents('php://input');
     737        if (!$this->get_api()->validate_webhook( @$_SERVER['HTTP_X_SIGN'], $json )) { // incorrect signature
     738            http_response_code(400);
     739            wp_die('', '', 400);
     740        }
     741
    727742        $data = rest_sanitize_object(json_decode($json, true));
    728743        if ($data) {
     
    734749                /** @var \WC_Cart $cart */
    735750                $cart = $session['cart'];
    736                 if ($cart) {
     751                if ($cart and is_object($cart)) {
    737752                    $cart->empty_cart();
    738753                }
  • mono-checkout/trunk/mono.php

    r3045127 r3047124  
    77Plugin URI: https://checkout.mono.bank/woocomerce
    88Description: модуль Чекауту від monobank це спосіб автоматизувати процес оформлення покупки на вашому сайті. Доступний функціонал: предзаповнення даних отримувача, рекомендації по доставці та оплаті, всі доступні способи оплати від monobank: еквайринг, Покупка частинами та оплата при отриманні. Має бути підключений інтернет-еквайринг від monobank
    9 Version: 1.8.0
     9Version: 1.8.1
    1010Requires at least: 5.8
    1111Requires PHP: 7.4
  • mono-checkout/trunk/readme.txt

    r3045127 r3047124  
    44Requires at least: 5.8
    55Tested up to: 6.4
    6 Stable tag: 1.8.0
     6Stable tag: 1.8.1
    77Requires PHP: 7.4
    88License: GPLv2 or later
    99License URI: https://www.gnu.org/licenses/gpl-2.0.html
    1010
    11 модуль Чекауту від monobank це спосіб автоматизувати процес оформлення покупки на вашому сайті
     11Модуль Чекауту від monobank це спосіб автоматизувати процес оформлення покупки на вашому сайті
    1212
    1313== Description ==
    1414
    15 модуль Чекауту від monobank це спосіб автоматизувати процес оформлення покупки на вашому сайті. Доступний функціонал: предзаповнення даних отримувача, рекомендації по доставці та оплаті, всі доступні способи оплати від monobank: еквайринг, Покупка частинами та оплата при отриманні. Має бути підключений інтернет-еквайринг від monobank.
     15Модуль Чекауту від monobank це спосіб автоматизувати процес оформлення покупки на вашому сайті. Доступний функціонал: предзаповнення даних отримувача, рекомендації по доставці та оплаті, всі доступні способи оплати від monobank: еквайринг, Покупка частинами та оплата при отриманні. Має бути підключений інтернет-еквайринг від monobank.
    1616
    17 Даний модуль використовує сервіс чекауту monobank для отримання платежів за замовлення. Детальніше про сервіс можна подивитись за посиланням https://api.monobank.ua/. Умови використання - https://www.monobank.ua/terms
     17Даний модуль використовує сервіс чекауту monobank для отримання платежів за замовлення. Детальніше про сервіс можна подивитись за [посиланням](https://api.monobank.ua/). Умови використання - [https://www.monobank.ua/terms](https://www.monobank.ua/terms)
    1818
    1919Що робить цей плагін:
     
    3939= Де взяти токен? =
    4040
    41 В web-кабінеті https://web.monobank.ua/, в налаштуваннях інтернет-еквайрингу.
     41В web-кабінеті [https://web.monobank.ua/](https://web.monobank.ua/), в налаштуваннях інтернет-еквайрингу.
    4242
    4343== Screenshots ==
     
    4949
    5050== Changelog ==
     51
     52= 1.8.1 =
     53* Покращення безпеки
    5154
    5255= 1.8.0 =
Note: See TracChangeset for help on using the changeset viewer.