Plugin Directory

Changeset 3231483


Ignore:
Timestamp:
01/29/2025 06:14:19 PM (14 months ago)
Author:
refacilpay
Message:

Actualización a la versión 1.0.5: Mejoras en la autenticación y monitoreo.

Location:
refacil-pay/trunk
Files:
2 added
4 edited

Legend:

Unmodified
Added
Removed
  • refacil-pay/trunk/class-gateway.php

    r3178945 r3231483  
    99    private $reference1;
    1010    private $store_id;
     11    private $logger;
     12    private $environment;
    1113
    1214    public function __construct()
    1315    {
     16        $this->logger = new Logger();
     17        $this->environment = Environment::from_env();
    1418        $this->fetch_store_id_from_bd();
    1519        $this->setup_properties();
     
    2630        global $wpdb;
    2731        $table_name = $wpdb->prefix . 're_facil_store_id';
    28         $this->token = $wpdb->get_var(
    29             $wpdb->prepare("SELECT token FROM $table_name WHERE id = %d", 1));
     32        $this->token = $wpdb->get_var($wpdb->prepare("SELECT token FROM $table_name WHERE storeId = %s", $this->store_id));
    3033        $show_register_button = is_null($this->token);
    31         $this->form_fields = array(
    32             'success_registration' => array(
     34   
     35        $this->form_fields = array();
     36   
     37        if (!$show_register_button) {
     38            $this->form_fields['success_registration'] = array(
    3339                'type' => 'hidden',
    34                 'title' => __('Su plugin esta activo.', 're-facil-payments-woo'),
    35             ),
    36         );
    37         if ($show_register_button) {
    38             $this->form_fields = array(
    39                 'customize_button' => array(
    40                     'title' => __('Registrate!', 're-facil-payments-woo'),
    41                     'type' => 'button',
    42                     'custom_attributes' => array(
    43                         'onclick' => "var button = this; window.open('" .
    44                             esc_url('https://autoregistro.refacilpay.co//?comm=1&storeid=' . $this->store_id .
    45                                 '&returnurl=' . urlencode(get_site_url() . '/wp-json/api/auth/refacil')) .
    46                             "', '_blank'); button.style.display = 'none'; alert('Actualiza la página si ya te registraste.');"
    47                     ),
    48                     'description' => __('Debes registrate para poder usar este plugin.', 're-facil-payments-woo'),
    49                     'desc_tip' => true,
    50                 )
     40                'title' => __('¡El plugin Refácil Pay está activo! Comienza a realizar pagos ahora.', 're-facil-payments-woo'),
     41            );
     42        } else {
     43            $url = $this->get_register_url() . '?comm=1&storeid=' . $this->store_id . '&returnurl=' . urlencode(get_site_url() . '/wp-json/api/auth/refacil');
     44            $this->form_fields['customize_button'] = array(
     45                'title' => __('Registrarme', 're-facil-payments-woo'),
     46                'type' => 'button',
     47                'custom_attributes' => array(
     48                    'onclick' => "var button = this; button.disabled = true; button.innerText = 'Cargando...'; window.open('" .
     49                        esc_url($url) .
     50                        "', '_blank'); setTimeout(function() { button.disabled = false; button.innerText = 'Registrarme'; alert('Por favor, actualiza la página si ya completaste el registro.'); }, 5000);",
     51                    'class' => 'refacil-register-button'
     52                ),
     53                'description' => __('Debes registrarte para poder usar este plugin. Haz clic en el botón para registrarte y luego actualiza la página.', 're-facil-payments-woo'),
     54                'desc_tip' => true,
    5155            );
    5256        }
     
    7175        $data = wp_parse_args($data, $defaults);
    7276        ob_start();
    73         ?>
    74         <tr>
    75             <th scope="row" class="titledesc">
    76                 <label for="<?php echo esc_attr($field); ?>"><?php echo wp_kses_post($data['title']); ?></label>
    77                 <?php echo $this->get_tooltip_html($data); ?>
    78             </th>
    79             <td class="forminp">
    80                 <fieldset>
    81                     <legend class="screen-reader-text"><span><?php echo wp_kses_post($data['title']); ?></span></legend>
    82                     <button class="<?php echo esc_attr($data['class']); ?>" type="button"
    83                             name="<?php echo esc_attr($field); ?>" id="<?php echo esc_attr($field); ?>"
    84                             style="<?php echo esc_attr($data['css']); ?>"
    85                         <?php echo $this->get_custom_attribute_html($data); ?>>
    86                         <?php echo wp_kses_post($data['title']); ?>
    87                     </button>
    88                     <?php echo $this->get_description_html($data); ?>
    89                 </fieldset>
    90             </td>
    91         </tr>
    92         <?php
     77    ?>
     78        <div class="form-field">
     79            <label for="<?php echo esc_attr($field); ?>"><?php echo wp_kses_post($data['title']); ?></label>
     80            <?php echo $this->get_tooltip_html($data); ?>
     81            <button class="<?php echo esc_attr($data['class']); ?>" type="button"
     82                name="<?php echo esc_attr($field); ?>" id="<?php echo esc_attr($field); ?>"
     83                style="<?php echo esc_attr($data['css']); ?>"
     84                <?php echo $this->get_custom_attribute_html($data); ?>>
     85                <?php echo wp_kses_post($data['title']); ?>
     86            </button>
     87            <?php echo $this->get_description_html($data); ?>
     88        </div>
     89<?php
    9390        return ob_get_clean();
    9491    }
     
    10299    {
    103100        $order = wc_get_order($order_id);
    104         $this->get_trx_token();
    105         $this->create_payment_structure($order);
    106         $response_transaction = $this->create_transaction($order->get_id());
    107         $response_status_code = $response_transaction['response_status_code'];
    108         if ($response_status_code === '00' && isset($response_transaction['url_return'])) {
    109             $order->set_payment_method_title($this->method_title);
    110             $order->save();
     101        $this->logger->info('Processing payment for order ' . $order_id);
     102
     103        try {
     104            $this->get_trx_token();
     105            $this->create_payment_structure($order);
     106            $response_transaction = $this->create_transaction($order->get_id());
     107            $response_status_code = $response_transaction['response_status_code'];
     108
     109            if ($response_status_code === '00' && isset($response_transaction['url_return'])) {
     110                $order->set_payment_method_title($this->method_title);
     111                $order->save();
     112
     113                return array(
     114                    'result' => 'success',
     115                    'redirect' => $response_transaction['url_return'],
     116                );
     117            } else {
     118                $message = 'Error processing payment for order: ' . $order_id . ' - Response: ' . json_encode($response_transaction);
     119                $this->logger->error($message);
     120
     121                return array(
     122                    'result' => 'error',
     123                    'message' => 'Error al procesar el pago: ' . $response_status_code
     124                );
     125            }
     126        } catch (Exception $e) {
     127            $message = 'Exception processing payment for order ' . $order_id . ' - ' . $e->getMessage();
     128            $this->logger->error($message);
     129
    111130            return array(
    112                 'result' => 'success',
    113                 'redirect' => $response_transaction['url_return'],
    114             );
    115         }
    116         return array(
    117             'result' => 'error',
    118             'message' => 'Error al procesar el pago: ' . $response_status_code
    119         );
     131                'result' => 'error',
     132                'message' => 'Excepción al procesar el pago: ' . $e->getMessage()
     133            );
     134        }
    120135    }
    121136
     
    145160     * @return string
    146161     */
    147     public function get_refacil_url(): string
    148     {
    149         return 'https://pay-api.refacil.co/';
     162    public function get_pay_api_url(): string
     163    {
     164        return $this->environment->get_pay_api_url();
     165    }
     166
     167    /**
     168     * @return string
     169     */
     170    public function get_register_url(): string
     171    {
     172        return $this->environment->get_register_url();
    150173    }
    151174
     
    157180     * @return int
    158181     */
    159     public function register_transaction_log($request_body, $event_name, $response_code = null,
    160                                              $response_data = null): int
     182    public function register_transaction_log($request_body, $event_name, $response_code = null, $response_data = null): int
    161183    {
    162184        global $wpdb;
     
    193215        $this->id = self::GATEWAY_ID;
    194216        $this->method_title = __('ReFacilPay', 're-facil-gateway');
    195         $this->method_description = __('Accept payments through Refacil', 're-facil-gateway');
     217        $this->method_description = __('Acepta pagos de manera fácil y segura a través de Refácil Pay, una solución integral para tu tienda en línea.', 're-facil-gateway');
    196218        $this->has_fields = false;
    197219        $this->title = 'REFÁCIL PAY';
    198220        $this->icon = plugin_dir_url(__FILE__) . 'assets/images/refacil_logo.png';
    199         $this->description = 'Paga con  <b>Transfiya,PSE, Nequi, Daviplata, Bancolombia, TPAGA y Efectivo,' .
    200             ' </b> Refacil Pay un <b>centralizador de pagos</b> con múltiples <b>soluciones.</b>';
    201 
     221        $this->description = 'Paga con  <b>Transfiya, PSE, Nequi, Daviplata, Bancolombia, TPAGA y Efectivo,' .
     222            ' </b> Refácil Pay un <b>centralizador de pagos</b> con múltiples <b>soluciones.</b>';
    202223    }
    203224
     
    220241    private function create_payment_structure($order): void
    221242    {
     243        $webhookUrl = $this->environment->get_webhook_url();
     244        $returnUrl = $this->environment->get_return_url($order);
    222245        $name = $order->get_billing_first_name() . ' ' . $order->get_billing_last_name();
    223246        $email = $order->get_billing_email();
    224247        $cell_phone = $order->get_billing_phone();
     248
    225249        $this->request_body_pay = ([
    226250            'expiresIn' => 0,
    227251            'amount' => WC()->cart->get_total(null),
    228252            'brandId' => 62,
    229             //todo asociar urls de reales
    230             'webhookUrl' => get_site_url() . '/wp-json/api/payments/refacil',
    231             //'webhookUrl' => 'googole.com' . '/wp-json/api/payments/refacil',
    232             //'returnUrl' => 'google.com/return',
    233             'returnUrl' => $this->get_return_url($order),
     253            'webhookUrl' => $webhookUrl,
     254            'returnUrl' => $returnUrl,
    234255            'showSummary' => true,
    235256            'name' => $order->get_billing_first_name() . ' ' . $order->get_billing_last_name(),
     
    256277    private function get_trx_token(): void
    257278    {
    258         $data = array(
    259             'service' => '/cash-in/generate/payment-link/token'
    260         );
    261         $response = wp_remote_post(
    262             $this->get_refacil_url() . 'trx-token/generate',
    263             array(
    264                 'body' => wp_json_encode($data),
    265                 'headers' => array('Content-Type' => 'application/json',
    266                     'Authorization' => $this->token),
    267             )
    268         );
     279        $authorization = "{'Bearer'} {$this->token}";
     280        $request_headers = array('Content-Type' => 'application/json', 'Authorization' => $authorization);
     281        $url = $this->get_pay_api_url() . 'trx-token/generate';
     282        $data = array('service' => '/cash-in/generate/payment-link/token');
     283
     284        $response = wp_remote_post($url, array('body' => wp_json_encode($data), 'headers' => $request_headers));
    269285        $response_code = wp_remote_retrieve_response_code($response);
     286
    270287        if ($response_code === 200) {
    271288            $response_body = wp_remote_retrieve_body($response);
     
    283300        $this->reference1 = time() . str_pad($order_id, 10, '0', STR_PAD_LEFT);
    284301        $this->request_body_pay['reference1'] = $this->reference1;
    285         $authorizationHeader = "{'bearer'} {$this->token}";
     302
     303        $authorization = "{'Bearer'} {$this->token}";
     304        $request_headers = [
     305            'Content-Type' => 'application/json',
     306            'Authorization' => $authorization,
     307            'x-transaction-token' => $this->x_transaction_token,
     308        ];
     309
    286310        $response = wp_remote_post(
    287             $this->get_refacil_url() . 'cash-in/generate/payment-link/token',
    288             array(
    289                 'body' => json_encode($this->request_body_pay),
    290                 'headers' => [
    291                     'Content-Type' => 'application/json',
    292                     'Authorization' => $authorizationHeader,
    293                     'x-transaction-token' => $this->x_transaction_token,
    294                 ],
    295             )
     311            $this->get_pay_api_url() . 'cash-in/generate/payment-link/token',
     312            array('body' => json_encode($this->request_body_pay), 'headers' => $request_headers)
    296313        );
     314
    297315        $response_body = wp_remote_retrieve_body($response);
    298316        $response_data = json_decode($response_body, true);
    299317        $response_code = wp_remote_retrieve_response_code($response);
    300         $response_status_code = $response_data['statusCode'] ?? null;
     318        $response_status_code = is_array($response_data) ? $response_data['statusCode'] ?? null : null;
    301319        $url_return = null;
    302         if ($response_code >= 200 && $response_code < 300 && $response_status_code === '00') {
    303             $url_return = $response_data['data']['url'];
    304             $this->add_payment_record($order_id, $response_data['data']['reference'],
    305                 $this->reference1, $response_data['data']['resourceId'],
    306                 $response_data['data']['status']);
     320       
     321       
     322        if ($response_code >= 200 && $response_code < 300 && $response_status_code === '00' && is_array($response_data)) {
     323            $url_return = $response_data['data']['url'] ?? null;
     324            $this->add_payment_record(
     325                $order_id,
     326                $response_data['data']['reference'] ?? null,
     327                $this->reference1,
     328                $response_data['data']['resourceId'] ?? null,
     329                $response_data['data']['status'] ?? null
     330            );
    307331        } elseif ($response_code === 401) {
    308332            $this->delete_invalid_token();
    309             $this->register_transaction_log(json_encode($this->request_body_pay),
     333            $this->register_transaction_log(
     334                json_encode($this->request_body_pay),
    310335                'create_transaction_delete_invalid_token',
    311                 $response_code, $response_data['data'] ?? $response_data['message']);
    312 
     336                $response_code,
     337                json_encode($response_data)
     338            );
    313339        } else {
    314             $this->register_transaction_log(json_encode($this->request_body_pay), 'create_transaction',
    315                 $response_code, $response_data['data'] ?? $response_data['message']);
    316         }
     340            $this->register_transaction_log(
     341                json_encode($this->request_body_pay),
     342                'create_transaction',
     343                $response_code,
     344                json_encode($response_data)
     345            );
     346        }
     347
    317348        return array(
    318349            'response_status_code' => $response_status_code,
    319             'url_return' => $url_return);
     350            'url_return' => $url_return,
     351            'message' => $response_data['message'] ?? null,
     352            'data' => $response_data['data'] ?? null
     353        );
    320354    }
    321355
     
    328362     * @return void
    329363     */
    330     private function add_payment_record($order_id, $re_facil_reference, $reference1, $re_facil_resource_id,
    331                                         $re_facil_status): void
    332     {
     364    private function add_payment_record(
     365        $order_id,
     366        $re_facil_reference,
     367        $reference1,
     368        $re_facil_resource_id,
     369        $re_facil_status
     370    ): void {
    333371        global $wpdb;
    334372        $table_name = $wpdb->prefix . 're_facil_payments';
     
    362400        global $wpdb;
    363401        $table_name = sanitize_text_field($wpdb->prefix . 're_facil_store_id');
    364         $wpdb->query("UPDATE $table_name SET token = NULL WHERE id = 1");
     402        $query = $wpdb->prepare("UPDATE $table_name SET token = NULL WHERE storeId = %s", $this->store_id);
     403        $wpdb->query($query);
    365404    }
    366405}
  • refacil-pay/trunk/includes/callback-refacil.php

    r3178945 r3231483  
    11<?php
     2
     3require_once plugin_dir_path(__FILE__) . '/logger.php';
    24
    35class WC_REST_Custom_Controller
     
    68    protected string $namespace_auth = 'api/auth';
    79    protected string $rest_base = 'refacil';
     10    private $logger;
     11
     12    public function __construct()
     13    {
     14        $this->logger = new Logger();
     15    }
    816
    917    /**
     
    3442    public function process_auth(WP_REST_Request $data): WP_REST_Response
    3543    {
    36         if (is_null($data['storeId']) || is_null($data['token'])) {
    37             return new WP_REST_Response(['error' => 'Parámetros inválidos'], 422);
    38         }
     44        $message = null;
     45
     46        if (is_null($data['storeId'])) {
     47            $message = 'The storeId field is missing';
     48            $this->logger->error($message . ' - Data: ' . json_encode($data->get_params()));
     49            return new WP_REST_Response(['error' => 'The storeId field is missing'], 422);
     50        }
     51
     52        if (is_null($data['token'])) {
     53            $message = 'The token field is missing';
     54            $this->logger->error($message . ' - Data: ' . json_encode($data->get_params()));
     55            return new WP_REST_Response(['error' => 'The token field is missing'], 422);
     56        }
     57
    3958        return $this->associate_token($data);
    4059    }
     
    95114    {
    96115        global $wpdb;
     116        $message = null;
    97117        $table_name = $wpdb->prefix . 're_facil_store_id';
    98118        $storeId = $wpdb->get_var("SELECT storeId FROM $table_name");
     119
    99120        if ($storeId === $data['storeId']) {
    100121            $result = $wpdb->update(
     
    103124                array('storeId' => $storeId)
    104125            );
    105 
     126           
    106127            if ($result !== false) {
    107                 return new WP_REST_Response(['message' => 'Se le asignó correctamente el token al storeid: ' .
    108                     $storeId], 200);
     128                $message = 'Token assigned to storeId: ' . $storeId;
     129                $this->logger->info($message);
     130                return new WP_REST_Response(['message' => $message], 200);
    109131            } else {
    110                 return new WP_REST_Response(['error' => 'Error no se encontró registro relacionado al storeId: ' .
    111                     $data['storeId']], 404);
     132                $message = 'Register not found related to storeId: ' . $data['storeId'];
     133                $this->logger->error($message);
     134                return new WP_REST_Response(['error' => $message], 404);
    112135            }
    113         }
    114         return new WP_REST_Response(['error' => 'Error al asignar el token del storeId: ' . $storeId], 404);
     136        } else {
     137            $message = 'Error assigning token to storeId: ' . $storeId;
     138            $this->logger->error($message);
     139            return new WP_REST_Response(['error' => $message], 404);
     140        }
    115141    }
    116142
  • refacil-pay/trunk/re-facil-gateway.php

    r3179098 r3231483  
    11<?php
    22/*
    3 Plugin Name: Refácil Pay
     3Plugin Name: Refácil Pay
    44Description: Pasarela de pagos para Woocommerce.
    5 Version: 1.0.4
    6 Author: Refácil
    7 Author URI: https://www.refacil.co/
     5Version: 1.0.5
     6Author: Refácil Pay
     7Author URI: https://refacilpay.com/
    88License: GPL-2.0+
    99License URI: http://www.gnu.org/licenses/gpl-2.0.txt
    10 Text Domain: refacil-pay
     10Text Domain: custom-gateway
     11Domain Path: /languages
    1112*/
    1213
     
    2627    require_once plugin_dir_path(__FILE__) . '/includes/callback-refacil.php';
    2728    require_once plugin_dir_path(__FILE__) . '/includes/event-log-refacil.php';
     29    require_once plugin_dir_path(__FILE__) . '/includes/logger.php';
     30    require_once plugin_dir_path(__FILE__) . 'environment.php';
    2831    new Event_Log_Re_Facil_Table_Creator();
    2932}
     
    4447{
    4548    create_refacil_cronjob();
    46 
    4749}
    4850
     
    6062 * @return array
    6163 */
    62 function update_pending_orders_schedule(): array
     64function update_pending_orders_schedule($schedules): array
    6365{
    6466    $schedules['10minutes'] = array(
     
    8284function update_pending_orders(): void
    8385{
    84     $logger = wc_get_logger();
    85     $logger->info("Inicia cron órdenes pendientes ReFacilPay.");
     86    $logger = new Logger();
     87    $logger->info("Init cronjob to update pending orders");
    8688    try {
    8789        $pending_orders = wc_get_orders(array(
     
    127129            );
    128130            $response = wp_remote_post(
    129                 $re_facil_pay_gateway->get_refacil_url() . 'payment/status',
     131                $re_facil_pay_gateway->get_pay_api_url() . 'payment/status',
    130132                array(
    131133                    'body' => wp_json_encode($data),
  • refacil-pay/trunk/readme.txt

    r3179098 r3231483  
    11=== Refácil Pay ===
    2 Contributors: @refacilpay
    3 Tags: Efectivo, ventas, pagos inmediatos, transferencias, medios de pago
    4 Requires at least: 4.0
    5 Tested up to: 6.6
    6 Stable tag: 1.0.4
    7 Requires PHP: 7.0
    8 License: GPL-2.0+
    9 License URI: https://www.gnu.org/licenses/gpl-2.0.html
     2Contributors: @refacilpay 
     3Tags: efectivo, ventas, pagos inmediatos, transferencias, medios de pago, pasarela de pagos 
     4Requires at least: 4.0 
     5Tested up to: 6.4.2 
     6Stable tag: 1.0.
     7Requires PHP: 7.0 
     8License: GPL-2.0+ 
     9License URI: https://www.gnu.org/licenses/gpl-2.0.html 
    1010
    11 Here is a short description of the plugin.  This should be no more than 150 characters.  No markup here.
     11La solución de pagos más completa y económica del mercado. Refácil Pay permite a tus clientes elegir el medio de pago que deseen, entregando diversas opciones que incluyen botones de pago con entidades como:
    1212
    13 == Descripción ==
    14 Somos la solución de pagos más completa y económica del mercado.
    15 Refácil Pay permite a tus clientes elegir el medio de pago que desee, entregando diversas opciones que incluyen botones de pago con entidades como:
     13- Transfiya 
     14- Nequi (experiencia Transfiya) 
     15- Daviplata (experiencia Transfiya Bancolombia) 
     16- PSE 
     17- TPAGA 
     18- Recaudo en efectivo 
    1619
    17 Transfiya
    18 Nequi (experiencia Transfiya)
    19 Daviplata (experiencia Transfiya Bancolombia)
    20 PSE
    21 Transfiya
    22 TPAGA
    23 Recaudo en efectivo
    24 ¿Cuánto cuesta usar Refácil Pay?
     20== Descripción == 
     21Refácil Pay es una pasarela de pagos sencilla e intuitiva que permite a tus clientes realizar pagos mediante diferentes opciones disponibles en Colombia. Con integración directa a WooCommerce, facilita la aceptación de pagos en tu tienda en línea.
    2522
    26 2,5% + $500 + IVA, recuerda que puedes retirar tu dinero al día siguiente hábil de haber solicitado el retiro de tu dinero.
    27 ¿Cómo puedo comunicarme con el equipo de Refácil Pay?
     23### Ventajas:
     24- **Bajos costos:** 2,5% + $500 + IVA por transacción. 
     25- **Retiro inmediato:** Puedes retirar tus fondos al día siguiente hábil. 
     26- **Soporte integral:** Contacto vía correo electrónico y WhatsApp. 
    2827
    29 Si necesitas ayuda comunícate con nuestro equipo de atención al cliente soporte.comercial@refacil.com, WhatsApp 310 2409917
    30 == Requisitos previos ==
    31 - WooCommerce instalado y activado.
     28== Requisitos previos == 
     29- WooCommerce instalado y activado. 
    3230
    33 == Instalación ==
    34 1. Busca el plugin "Refácil Pay  para WooCommerce" en la tienda de plugins de WordPress.
     31== Instalación == 
     321. Busca el plugin "Refácil Pay para WooCommerce" en la tienda de plugins de WordPress. 
     332. Instala y activa el plugin desde el panel de administración de WordPress. 
     343. Configura el plugin en la sección "Métodos de Pago" de WooCommerce. 
    3535
    36 == Configuración ==
    37 Desde las configuraciones de WooCommerce, ve a "Métodos de Pago" y en la configuración del plugin se debe hacer el registro (boton 'Registrate!') del usuario del administrador del comercio para activar el plugin [Imagen 1]
     36== Configuración == 
     371. Accede a las configuraciones de WooCommerce. 
     382. Ve a "Métodos de Pago" y selecciona **Refácil Pay**. 
     393. Completa el registro del usuario administrador del comercio para activar el plugin. 
     404. Inicia sesión en Refácil Pay y completa la configuración de tu cuenta.
    3841
    39 [Imagen 1](https://s3.amazonaws.com/plataforma.refacil.co/slides/plugin-refacilpay-woocommerce.png )
     42== Frequently Asked Questions == 
     43= ¿Qué medios de pago puedo usar con Refácil Pay? = 
     44- Botón de pago Transfiya 
     45- Botón de pago Nequi (experiencia Transfiya) 
     46- Botón de pago Daviplata (experiencia Transfiya) 
     47- Botón de pago Bancolombia 
     48- Botón de pago PSE 
     49- Botón de pago TPAGA 
     50- Botón de pago Recaudo en efectivo 
    4051
     52= ¿Cuáles son las recomendaciones de seguridad para hacer uso correcto de los medios de pago? = 
     53- Confirma que los pagos se encuentren en estado exitoso antes de enviar productos o servicios. 
     54- No compartas información sobre tus usuarios y contraseñas. 
     55- Mantén tu información de perfil actualizada. 
     56- Cambia tus contraseñas al menos cada tres meses. 
    4157
    42 == Frequently Asked Questions ==
    43 = ¿Qué medios de pago puedo usar con Refacil?
    44  Botón de pago Transfiya.
    45  Botón de pago Nequi (experiencia transfiiya)
    46  Botón de pago Daviplata (experiencia transfiiya)
    47  Botón de pago Bancolombia
    48  Botón de Pago PSE
    49  Botón de pago TPAGA
    50  Botón de Pago Recaudo en efectivo
     58= ¿Cómo puedo retirar mi dinero? = 
     59En el portal de Refácil Pay (https://app.refacilpay.com/home), selecciona la opción "Retiros". Registra tu cuenta bancaria y solicita el retiro. 
    5160
    52 = ¿Cuáles son las recomendaciones de seguridad para hacer uso correcto de los
    53 medios de pago?
    54    Es importante confirmar que tus pagos se encuentren en estado exitoso
    55    antes de enviar o entregar productos o servicios.
    56    No compartir información sobre tus usuarios y contraseñas.
    57    Mantener tu información de perfil actualizada.
    58    Cambiar tus contraseñas por lo menos una vez cada tres meses.
     61= ¿Cada cuánto puedo retirar mi dinero? = 
     62- Las solicitudes se procesan de lunes a viernes (días hábiles). 
     63- Los retiros online están disponibles 24/7. 
    5964
    60 = ¿Como puedo retirar mi dinero?
    61    Dentro del portal de RefacilPay ( https://app.refacilpay.com/home), en la sesión
    62    retiros, podrás solicitar retiro de tu saldo, registrando tu cuenta en la opción
    63    solicitar retiro, ingresas el banco y numero de cuenta hacia donde requieres se
    64    traslade los recursos, esta solicitud se procesa al día siguiente laboral.
    65    También puedes solicitar retiro online a través del servicio de Transfiya
    66    retiros, este servicio te permite retirar tu dinero en línea y a cualquier de las 19
    67    entidades financieras asociadas a Transfiya.
     65= ¿Qué costo tiene el retiro? = 
     66- Un retiro semanal gratuito a cuentas Bancolombia o Nequi. 
     67- Retiro adicional: $1.000. 
     68- Para entidades financieras distintas: dos retiros gratis al mes, adicionales a $1.500. 
     69- Retiro online: $1.000 + 0,5% + IVA. 
    6870
    69 = ¿Cada cuanto lo puedo retirar?
    70    Las solicitudes de retiro se procesan de lunes a viernes (días hábiles).
    71    Los retiros online se pueden efectuar los 7 días a las semana, las 24 horas del
    72    día.
     71= ¿Cuál es el costo de una transacción rechazada? = 
     72En Refácil Pay las transacciones rechazadas no tienen costo. 
    7373
    74 = ¿Qué costo tiene el retiro?
    75    A cuentas Bancolombia o Nequi podrás efectuar un (1) retiro a la semana sin
    76    costo, los retiros adicionales tendrán un costo de $1.000.
    77    Si tu cuenta es de una entidad financiera diferente a Nequi o Bancolombia,
    78    podrás retirar dos (2) veces al mes sin costo, los retiros adicionales tendrán un
    79    costo de $1.500.
    80    Para los retiros ONLINE el costo es de cada retiro será de $1.000 + 0,5%+IVA,
    81    el límite de este retiro es de $2.000.000 y la transferencia debe ser aceptada
    82    en un máximo de doce (12) horas.
    83 
    84 = ¿Cuanto me cuesta usar cada medio de pago?
    85    2,5% + $500 + IVA por cada transacción, esta tarifa se descuenta online una
    86    vez la transacción quede en estado exitosa.
    87 
    88 = ¿Dónde puedo ver el saldo de mis movimientos?
    89    Dentro del portal de RefacilPay ( https://app.refacilpay.com/home), en la sesión
    90    retirar, puedes ver el saldo y los movimientos asociados a tu comercio.
    91 
    92 = ¿Dónde puedo ver los movimientos de mis transacciones?
    93    En el portal Refacil ( https://app.refacilpay.com/home) en la opción
    94    Movimientos, podrás ver informes transacciones con filtros de consulta para
    95    transacciones exitosas, fallidas y pendientes, igualmente podrás ver tus
    96    transacciones de retiro.
    97 
    98 = ¿Cuál es el costo de una transacción rechazada?
    99    En Refacil Pay las transacciones rechazadas NO tienen costo.
     74= ¿Dónde puedo ver el saldo y movimientos de mis transacciones? = 
     75En el portal Refácil Pay, sección "Movimientos", puedes ver informes detallados con filtros para transacciones exitosas, fallidas y pendientes. 
    10076
    10177= Si tengo dudas o requiero comunicarme con el equipo de Refácil Pay, ¿qué debo hacer?
    102    Si necesitas ayuda comunícate con nuestro equipo de atención al cliente al correo
    103    soporte.comercial@refacil.com  o al WhatsApp 310 2409917, en el Horario de Lunes
    104    a viernes: 8:00 am - 12:00 pm y de 2:00 p.m. a 6:00 p.m.
     78Si necesitas ayuda comunícate con nuestro equipo de atención al cliente al correo soporte.comercial@refacil.com o al WhatsApp 310 2409917, en el Horario de Lunes a viernes: 8:00 am - 12:00 pm y de 2:00 p.m. a 6:00 p.m.
    10579
     80== Screenshots == 
     811. [Vista de la configuración del plugin](https://s3.amazonaws.com/plataforma.refacil.co/slides/plugin-refacilpay-woocommerce.png)
    10682
     83== Changelog == 
     84= 1.0.5 = 
     85* Corrección de bug en el manejo de credenciales. 
     86* Implementación de monitoreo en la generación de recursos de pago.   
    10787
    108 == Screenshots ==
    109 1. Url de screenshots mencionados en todo el readme https://s3.amazonaws.com/plataforma.refacil.co/slides/plugin-refacilpay-woocommerce.png
     88= 1.0.1 = 
     89* Mejora en la validación de configuración del plugin. 
     90* Refactorización de queries SQL para mayor seguridad. 
    11091
    111 == Changelog ==
    112 = 1.0.0 =
    113 * Se crea el plugin.
     92= 1.0.0 = 
     93* Primera versión del plugin. 
    11494
    115 == Upgrade Notice ==
    116 = 1.0.1 =
    117 * Se agrega check para configuracion sandbox y produccion.
    118 * Se agrega seguridad a las querys usadas en el plugin.
    119 
     95== Upgrade Notice == 
     96= 1.0.5 = 
     97* Actualiza a esta versión para corregir problemas de credenciales y mejorar la seguridad de las consultas SQL.
Note: See TracChangeset for help on using the changeset viewer.