1, 'XOF' => 1, 'EUR' => 650, 'USD' => 550]; /** * @var string */ private $public_key; /** * @var string */ private $secret_key; /** * @var string */ private $success_url; /** * @var bool */ private $autocomplete_orders; /** * Constructor for the gateway. */ public function __construct() { // The global ID for this Payment method $this->id = self::ID; // This basically defines your settings which are then loaded with init_settings() $this->init_form_fields(); // After init_settings() is called, you can get the settings and load them into variables $this->init_settings(); // Boolean. Can be set to true if you want payment fields to show on the checkout $this->has_fields = false; // Image to be displayed to the user $image_url = $this->get_image_url(); // check if Payxaf icon image exists or not if (@getimagesize($image_url)) { //Show an image on the frontend $this->icon = $image_url; } // Payment method name for order details and emails $this->title = "Payxaf"; // Payment method name for admin pages $this->method_title = "Payxaf - Payment Gateway for WooCommerce"; // The description for this Payment Gateway, shown on the actual Payment options page on the backend $this->method_description = __( "Secured payments made simple - designed exclusively for WooCommerce stores. Accept mtn mobile money, Orange money, credit cards, debit cards, and other popular payment methods. allows customers to conveniently checkout using our secure payment gateway", self::ID ); // Define user set variables $this->order_button_text = $this->get_option('order_button_text'); $this->description = $this->get_option('description'); $this->public_key = $this->get_option('public_key'); $this->secret_key = $this->get_option('secret_key'); $this->success_url = $this->get_option('success_url'); $this->autocomplete_orders = $this->get_option('autocomplete_orders') === 'yes'; // Used to perform plugin information updated by the admin add_action('woocommerce_update_options_payment_gateways_' . $this->id, [$this, 'process_admin_options']); } /** * Generates a callback url only once */ private function generate_success_url() { if (!$this->get_option('success_url')) { $this->update_option( 'success_url', get_home_url() . '/wp-json/callback/' . md5(uniqid() . mt_rand()) ); } } /** * Image to be displayed to the user */ private function get_test_mode(): string { $test_mode = $this->get_option('test_mode'); $url = ''; if ($test_mode === 'sand_box') $url = 'https://app.payxaf.com/sandbox/payment/initiate'; else if ($test_mode === 'live') $url = 'https://app.payxaf.com/payment/initiate'; return $url; } /** * Image to be displayed to the user */ private function get_checkout_theme(): string { $checkout_theme = $this->get_option('dark'); $theme = ''; if ($checkout_theme === 'dark') $theme = 'dark'; else if ($checkout_theme === 'light') $theme = 'light'; return $theme; } /** * Image to be displayed to the user */ private function get_image_url(): string { $payment_methods = $this->get_option('payment_methods'); $image = 'payxaf_operators.png'; if ($payment_methods === 'mobile') $image = 'payxaf_momo_om.png'; else if ($payment_methods === 'credit_card') $image = 'payxaf_visa_master.png'; return WP_PLUGIN_URL . '/' . plugin_basename(dirname(__FILE__)) . '/images/' . $image; } /** * Initializes gateway settings form */ public function init_form_fields() { // Generate a callback url $this->generate_success_url(); $this->form_fields = apply_filters( 'payxaf_form_fields', [ 'enabled' => [ 'title' => __('Enable/Disable', self::ID), 'type' => 'checkbox', 'label' => __('Enable Payxaf', self::ID), 'description' => __('Check to enable this plugin', self::ID), 'default' => 'yes', 'desc_tip' => true, ], 'test_mode' => [ 'title' => __('Enabled live or test environment', self::ID), 'type' => 'select', 'description' => __('Use this payment gateway in test/sandbox mode, when testing the plugin. The tesing credentials are: Test Mode eMail: test_mode@mail.com Test Mode Verification Code: 222666', self::ID), 'default' => "sandbox", 'options' => [ "sand_box" => __("Sandbox", self::ID), "live" => __("Live", self::ID), ], 'desc_tip' => true, ], 'checkout_theme' => [ 'title' => __('Select the the theme on the checkout of your shop.', self::ID), 'type' => 'select', 'description' => __('Choose either a dark or light theme for the checkout form.', self::ID), 'default' => "sandbox", 'options' => [ "sand_box" => __("Sandbox", self::ID), "live" => __("Live", self::ID), ], 'desc_tip' => true, ], 'success_url' => [ 'title' => __('Callback URL', self::ID), 'type' => 'hidden', 'description' => __('Copy the URL below and paste it in settings of your application in Payxaf
' . $this->get_option('success_url') . '
', self::ID), ], 'description' => [ 'title' => __('Description', self::ID), 'type' => 'textarea', 'description' => __('Payment method description, visible by customers on your checkout page', self::ID), 'default' => __('Pay safely using Orange Money, MTN Mobile Money, VISA, MasterCard or Payxaf Wallet', self::ID), 'desc_tip' => true, ], 'public_key' => [ 'title' => __('Public key', self::ID), 'type' => 'text', 'description' => __('Copy and paste the public key from your mechant account on Payxaf', self::ID), 'default' => '', 'desc_tip' => true, ], 'secret_key' => [ 'title' => __('Secret key', self::ID), 'type' => 'text', 'description' => __('Copy and paste the secret key from your mechant account on Payxaf', self::ID), 'default' => '', 'desc_tip' => true, ], 'payment_methods' => [ 'title' => __('Enabled payment methods', self::ID), 'type' => 'select', 'description' => __('This will change operators logos displayed on your checkout page', self::ID), 'default' => "all", 'options' => [ "all" => __("All", self::ID), "mobile" => "Mobile Money (OM + MoMo)", "credit_card" => __("Credit Card (VISA + MasterCard)", self::ID), ], 'desc_tip' => true, ], 'order_button_text' => [ 'title' => __('Payment button text', self::ID), 'type' => 'text', 'description' => __('Text of the payment button on which customers click to make the payment', self::ID), 'default' => __('Pay with Payxaf', self::ID), 'desc_tip' => true, ], 'currency' => [ 'title' => __('Payxaf currency', self::ID), 'type' => 'select', 'description' => __('This is the currency that your customers will see on payment page. If you choose Euro, only card payment will be available on payment page', self::ID), 'default' => "default", 'options' => [ "default" => __("Same as on WooCommerce", self::ID), "XAF" => "CFA Franc (FCFA)", "EUR" => __("Euro (€)", self::ID), "USD" => __("Dollar ($)", self::ID), ], 'desc_tip' => true, ], 'autocomplete_orders' => array( 'title' => __('Autocomplete orders', self::ID), 'label' => __('Autocomplete orders on payment success', self::ID), 'type' => 'checkbox', 'description' => __('If enabled, orders statuses will go directly to complete after successful payment', self::ID), 'default' => 'no', 'desc_tip' => true, ), ]); } public function get_public_key(): string { return $this->public_key; } public function get_secret_key(): string { return $this->secret_key; } public function get_success_url(): string { return $this->success_url; } public function get_autocomplete_orders(): bool { return $this->autocomplete_orders; } /** * Get order amount and currency for Payxaf * @throws Exception */ private function get_order_amount_currency(WC_Order $order): array { $woocommerce_currency = get_woocommerce_currency(); // Throws an exception when currency is not defined in PAYXAF_CURRENCIES if (!isset(self::SUPPORTED_CURRENCIES[$woocommerce_currency])) throw new Exception("Currency '$woocommerce_currency' is not currently supported. Please, try using one of the following: " . implode(', ', array_keys(self::SUPPORTED_CURRENCIES))); $currency = $this->get_option('currency'); if (!in_array($currency, self::CURRENCIES)) $currency = $woocommerce_currency; $amount = $order->get_total(); if ($currency !== $woocommerce_currency) $amount *= self::SUPPORTED_CURRENCIES[$woocommerce_currency] / self::SUPPORTED_CURRENCIES[$currency]; return compact('amount', 'currency'); } /** * Checks if billing country is CM and billing phone is a valid Mobile Money phone */ private function is_order_from_cameroon(WC_Order $order): bool { return $order->get_billing_country() === 'CM' && preg_match( '/^((\+|00)?237)?6[5789][0-9]{7}$/', preg_replace('/[^0-9]/', '', $order->get_billing_phone()) // Ignore non numeric ); } /** * Returns user's locale */ private function get_locale(): string { return strpos('fr_FR', get_locale()) != false ? 'fr' : 'en'; } /** * This function handles the processing of the order, telling WooCommerce * what status the order should have and where customers go after it’s used. */ public function process_payment($order_id) { global $woocommerce; $order = new WC_Order( $order_id ); // Mark as on-hold (we're awaiting the cheque) $order->update_status('on-hold', __( 'Awaiting cheque payment', 'woocommerce' )); //$order = wc_get_order($order_id); /* try { $order_desc = implode( ', ', array_map( function (WC_Order_Item $item) { return $item->get_name(); }, $order->get_items() ) ); */ $amount_currency = $this->get_order_amount_currency($order); $body = [ "transaction_amount" => $amount_currency['amount'], "transaction_currency" => $amount_currency['currency'], "transaction_reason" => substr($order_desc, 0, 255), // Get first 255 chars "app_transaction_ref" => $order->get_order_key(), "customer_name" => $order->get_formatted_billing_full_name(), "customer_email" => $order->get_billing_email(), "customer_lang" => $this->get_locale() ]; if ($this->is_order_from_cameroon($order)) $body['customer_phone_number'] = preg_replace('/[^0-9]/', '', $order->get_billing_phone()); // Ignore non numeric $mode = get_test_mode(); //<------------ Change to TEST for test server, PROD for production--> /* $parameters = [ 'identifier' => $identifier, 'currency' => $currency, 'amount' => $amount, 'details' => $details, 'ipn_url' => $ipn_url, 'cancel_url' => $cancel_url, 'success_url' => $success_url, 'payxaf_public_key' => $payxaf_public_key, 'site_logo' => $site_logo, 'checkout_theme' => $checkout_theme, 'customer_name' => $customer_name, 'customer_email' => $customer_email, ]; */ $url = get_test_mode(); // Get payment link from Payxaf $result = wp_remote_post($url, array( /* str_replace('{public_key}', $this->public_key, self::API_URL), ["body" => $body, "sslverify" => false] */ //byme // Passing variables from form page $identifier = uniqid(), $payxaf_public_key = "get_public_key()", $site_logo= "https://app.payxaf.com/assets/images/logoIcon/logo.png", $checkout_theme = "get_checkout_theme()", $currency = $this->get_option('currency'), $amount = $this->get_option('amount'), $details = "testing", $ipn_url = "www.one.com", $cancel_url = "www.two.com", $success_url = "www.three.com", $customer_name = $order->get_formatted_billing_full_name(), $customer_email = $order->get_billing_email(), )); if(!is_wp_error($result)) { $response_body = wp_remote_retrieve_body($result); $resp_array = json_decode($response_body); if(isset($resp_array->status)) return $resp_array->status; if(!isset($resp_array->status) && isset($resp_array->message)) return; //wc_add_notice( $resp_array->message, 'error' ); by me } else wc_add_notice( 'Failed to initiate transaction please try again later', 'error' ); } /* $ch = curl_init(); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POSTFIELDS, $parameters); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $result = curl_exec($ch); curl_close($ch); */ //$result contains the response back. //echo $result; /*$_SESSION['result'] = $result; $data = json_decode($result, false); $success = $data->success; $_SESSION['success'] = $success; $_SESSION['details'] = $details; $_SESSION['identifier'] = $identifier; $_SESSION['currency'] = $currency; $_SESSION['amount'] = $amount; */ //echo $success; //echo $details; // $data = json_decode( $resul, false); // $success = $data->success; // header("Location: $data->url"); // echo $result; // Get raw response /// $raw_response = wp_remote_retrieve_body($result); // Parse response /* $response = json_decode($raw_response, true); if (!(isset($response["success"]) && $response["success"] === "ok")) { throw new Exception($response["message"] ?? "An error has occurred. Please try again later"); } else { /* $order->set_transaction_id($response['message']); $order->add_order_note('Payxaf payment initiated with reference: ' . $response['message']); // Clear cart WC()->cart->empty_cart(); return [ 'result' => 'success', 'redirect' => $response['payment_url'] ]; */ } /* catch (Exception $ex) { $order->add_order_note("Payxaf payment init failed with message: " . $ex->getMessage()); wc_add_notice(__('Payment error : ', 'woothemes') . $ex->getMessage(), 'error'); if (isset($result)) { payxaf_log_data('Request <-----'); payxaf_log_data($result); } if (isset($raw_response)) { payxaf_log_data('Raw response <-----'); payxaf_log_data($raw_response); } if (isset($response)) { payxaf_log_data('Response <-----'); payxaf_log_data($response); } return; } */ } // } /* ============================================ INCLUDE OTHER FILE =========================================== */ // including the callback include 'include/payxaf_callback.php'; // including the order_key in wc admin order list include 'include/payxaf_hooks.php'; /*=========================================================================================================== */ //} add_action('plugins_loaded', 'payxaf_gateway_init', 0); Teach With Us – OCASET – Online Centre for Art Sciences Engineering and Technology

Why teach with Ocaset?

Are you a teacher looking for a challenge, an opportunity to learn new skills, use your professional skills in a different way and earn additional income? Then becoming a teacherpreneur with Ocaset could be for you. Join us today, from the safety and convenience of your own homes, in bringing a educational revolution via technology.

Earn Well

A surprisingly high earning potential with predictability and control in your hands!

Teach Anytime Anywhere

Connect with your students from wherever you are and whenever you want.

  Community

Be a part of a large teaching community, make friends and learn from each other!

Find Purpose

Contribute to someone’s life by sharing knowledge and experience pure joy of giving!

  Great Connections, Beautiful Stories

Connect with students from all over the country and create heart-warming learning stories!

  Training

Routine training sessions, feedback discussions on improving your teaching.

“Education is our passport to the future, for tomorrow belongs to the people who prepare for it today.”

MALCOLM X

Become a teacher

join us as a teacher

Getting started: A guide to creating a course on Ocaset

Please login to send your request!
It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout. The point of using Lorem Ipsum is that it has a more-or-less normal distribution of letters, as opposed to using 'Content here, content here', making it look like readable English.

1. Apply as Teacher
Apply by filling in a simple form.

2. Plan your course
Our experts will screen the best profiles.

3.Produce your course
Pick a topic of your choice and give a teaching demo to our experts.

4.Prolish your course
Pick a topic of your choice and give a teaching demo to our experts.

5.Publish your course
Pick a topic of your choice and give a teaching demo to our experts.

Many desktop publishing packages and web page editors now use Lorem Ipsum as their default model text, and a search for 'lorem ipsum' will uncover many web sites still in their infancy.
Various versions have evolved over the years, sometimes by accident, sometimes on purpose (injected humour and the like).

Many desktop publishing packages and web page editors now use Lorem Ipsum as their default model text, and a search for ‘lorem ipsum’ will uncover many web sites still in their infancy. Various versions have evolved over the years, sometimes by accident, sometimes on purpose (injected humour and the like). Many desktop publishing packages and web page editors now use Lorem Ipsum.
It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout. The point of using Lorem Ipsum is that it has a more-or-less normal distribution of letters, as opposed to using 'Content here, content here', making it look like readable English.

1. Apply as Teacher
Apply by filling in a simple form.

2. Plan your course
Our experts will screen the best profiles.

3.Produce your course
Pick a topic of your choice and give a teaching demo to our experts.

4.Prolish your course
Pick a topic of your choice and give a teaching demo to our experts.

5.Publish your course
Pick a topic of your choice and give a teaching demo to our experts.

Many desktop publishing packages and web page editors now use Lorem Ipsum as their default model text, and a search for 'lorem ipsum' will uncover many web sites still in their infancy.