Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merge pull request #37 from culqi/jysen #38

Open
wants to merge 52 commits into
base: jysen_bk
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
52 commits
Select commit Hold shift + click to select a range
058c02d
Merge pull request #37 from culqi/jysen
JoseHCalderon Sep 7, 2022
616224c
commit culqi y event
Sep 14, 2022
809e53f
url
JoseHCalderon Sep 14, 2022
0fd8c3e
delete file
JoseHCalderon Sep 14, 2022
aaaf0a8
Merge pull request #39 from culqi/jysen
JoseHCalderon Sep 14, 2022
dfbef94
Con Yape
Sep 15, 2022
f5fe846
Orden yape
Sep 16, 2022
5f98daa
fix orden
Sep 17, 2022
754af39
Merge pull request #40 from culqi/prestashop1.6-checkoutv4-js3DS-Yape
JoseHCalderon Sep 17, 2022
d531f88
ajustes_webhook
JoseHCalderon Sep 17, 2022
d45b1cf
Merge pull request #41 from culqi/jysen
JoseHCalderon Sep 17, 2022
d868d43
team
JoseHCalderon Sep 17, 2022
b79b8e5
Merge pull request #42 from culqi/jysen
JoseHCalderon Sep 17, 2022
931861d
ajustes_webhook
JoseHCalderon Sep 17, 2022
8ad9760
Merge pull request #43 from culqi/jysen
JoseHCalderon Sep 17, 2022
9fd5ee2
yape
JoseHCalderon Sep 23, 2022
9a0e933
order_id
JoseHCalderon Sep 23, 2022
d1ff336
yape
JoseHCalderon Sep 24, 2022
283c4b7
customer
JoseHCalderon Sep 24, 2022
5549aa6
upda_order_id
JoseHCalderon Sep 25, 2022
6312f71
update chargue
JoseHCalderon Sep 25, 2022
7d166de
update_order
JoseHCalderon Sep 25, 2022
1be5c70
Merge pull request #44 from culqi/hotfix/order_id
JoseHCalderon Sep 25, 2022
d7132fe
order_id_order
JoseHCalderon Sep 26, 2022
0a750b5
Merge pull request #45 from culqi/hotfix/order_id
JoseHCalderon Sep 26, 2022
1248f57
webhook
JoseHCalderon Sep 26, 2022
fdb1c90
Merge pull request #46 from culqi/hotfix/order_id
JoseHCalderon Sep 26, 2022
c026c26
ajuste
JoseHCalderon Sep 26, 2022
b250e9e
Merge pull request #47 from culqi/hotfix/order_id
JoseHCalderon Sep 26, 2022
cde2bfa
issues QA
Sep 27, 2022
d7c51c3
issues QA
Sep 29, 2022
b9706d8
issues QA
Sep 29, 2022
f9ad11d
name culqi
JoseHCalderon Sep 29, 2022
f077e3a
name culqi
JoseHCalderon Sep 29, 2022
b101bc8
Merge branch 'prestashop1.6-checkoutv4-js3DS' into jysen-new
JoseHCalderon Sep 29, 2022
472b170
Merge pull request #48 from culqi/jysen-new
JoseHCalderon Sep 29, 2022
862fb94
try
JoseHCalderon Sep 30, 2022
9ddd547
Merge pull request #49 from culqi/jysen-new
JoseHCalderon Sep 30, 2022
1c68db9
issues QA
Sep 30, 2022
4614694
Merge pull request #50 from culqi/jysen-new
JoseHCalderon Oct 1, 2022
639c959
delele file webhook
JoseHCalderon Oct 1, 2022
c878f33
Merge pull request #51 from culqi/jysen-new
JoseHCalderon Oct 1, 2022
d462257
ajuestes-readme
JoseHCalderon Oct 5, 2022
d162a36
Merge pull request #52 from culqi/prestashop1.6-checkoutv4-js3DS-readme
JoseHCalderon Oct 5, 2022
4d3e99b
url-prod
JoseHCalderon Oct 6, 2022
dae01fc
php version 5.6
Oct 7, 2022
a2da224
fix php version 5.6
Oct 7, 2022
ef49915
fix php version 5.6
Oct 7, 2022
4ee38ac
logo
JoseHCalderon Oct 10, 2022
ed7cd2a
url
JoseHCalderon Oct 11, 2022
384d46a
Merge pull request #54 from culqi/prestashop1.6-checkoutv4-js3DS-5.6
JoseHCalderon Oct 11, 2022
b496afd
img
JoseHCalderon Oct 22, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
128 changes: 127 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,129 @@
# Culqi JS Prestashop 1.7 (v3.0.4)
# Plugin - Prestashop 1.6

Nuestro plugin integra por tí nuestro Checkout v4 y nuestra librería JS 3DS, con los cuales tendrás la posibilidad de realizar cobros con tarjetas de débito y crédito, Yape, PagoEfectivo, billeteras móviles y Cuotéalo con solo unos simples pasos de configuración.

> Recuerda que para usar cualquier plugins necesitas tener tu llave pública y llave privada (test o live), los cuales los puedes generar a través de tu Culqipanel.

## Requisitos ##

- PHP 7.0+
- Prestashop 1.6.0+
- [Credenciales de Culqi](https://www.culqi.com)


## Instalación y activación

Descargar el zip (.zip) de nuestro plugin desde [aquí](https://github.com/culqi/culqi-prestashop/releases/download/v3.0.0/culqi.zip "download") y subirlo como un módulo.

![prestashop](https://docs.culqi.com/images/plugins/prestashop-instalar-zip.png)

Luego busca el plugin instalado con el nombre de **Culqi** y procedes a activarlo.

![prestashop](https://docs.culqi.com/images/plugins/prestashop-activar.png)

## Configuración

A continuación se presenta una imagen de la pantalla de configuración:

![prestashop](https://docs.culqi.com/images/plugins/prestashop_conf.png)

Ingresa en la sección "Settings" para configurar el plugin.
Independiente del mecanismo de instalación, los pasos para configurar el plugin son los mismos.

1. Activa tu Culqi checkout: Siempre debes mantenerlo activo para que tu checkout se muestre en tu tienda virtual.

2. Selecciona el ambiente (integración o producción): Este paso es esencial para que determines cuándo realizar pruebas y cuándo activar tu tienda en producción. Sirve también para indicar en que ambiente de CulqiPanel vas iniciar sesión.

3. Iniciar sesión: Con este boton podrás iniciar sesión en tu CulqiPanel y podrás obtener las llaves de tu comercio automáticamente.

> Recuerda que las credenciales son enviadas al correo que registraste en el proceso de afiliación.

4. Ingresa las llaves pública y privada (test o live): Lo puedes hacer de manera manual o automática. Para el segundo, haz click en "Iniciar Sesión" para entrar al CulqiPanel, luego selecciona tu comercio e inserta automáticamente tus llaves.

> Recuerda que las llaves de integración se identifican como "test" y las de producción como "live".

5. Selecciona los métodos de pago: Por defecto nuestro plugin habilita los pagos con tarjeta. Sin embargo, si deseas habilitar otros medios de pago (Banca móvil e internet, Agentes y bodegas, Billeteras móviles, Cuotéalo BCP) solo debes activar los "checks".

6. Define el tiempo de expiración de pago: Debes definirlo si habilitarás pagos con PagoEfectivo, billeteras móviles o Cuotéalo.

> Recuerda que si no configuras el tiempo de expiración, este tomará el tiempo por defecto: 24 horas.

7. Registra notificaciones de pago (Webhook): Valida en tu CulqiPanel que la URL de notificaciones de pago sea correcta.


> Recuerda que si no iniciaste sesión en el Culqipanel desde el plugin, debes configurar manualmente la URL de Webhook con el <b>evento (order.status.changed)</b>. Sigue los pasos [aquí](https://docs.culqi.com/es/documentacion/pagos-online/webhooks/).

8. Personaliza tu checkout: Con esta opción puedes cambiar los colores preestablecidos por los colores de tu marca, así como el logo.

![prestashop](https://docs.culqi.com/images/plugins/prestashop-preview-checkout.png)

9. Finalmente guarda tu configuración: ¡Listo!, Tus clientes ya pueden realizar pagos a través de tu tienda virtual.

![prestashop](https://docs.culqi.com/images/plugins/prestashop-save.png)

## Pruebas

Antes de activar tu tienda en producción, te recomendamos realizar pruebas de integración. Así garantizarás un correcto despliegue.

Si vas a empezar a vender desde tu tienda virtual, deberás seleccionar el ambiente de producción e ingresar tus llaves.

> Recuerda que si quieres probar tu integración, puedes utilizar nuestras [tarjetas de prueba.](https://docs.culqi.com/es/documentacion/pagos-online/tarjetas-de-prueba/)

## Versiones disponibles

Contamos con las siguientes versiones:

<table
class="mx-auto max-w-4xl w-full whitespace-nowrap bg-transparent divide-y divide-culqi-gray-ultra-light dark:divide-culqi-plate-light border-2 border-culqi-gray-ultra-light dark:border-culqi-plate-light">
<thead>
<tr class="bg-culqi-gray-light dark:bg-culqi-gray-ultra-light text-culqi-plate-light text-left">
<th class="px-3 py-[14px] font-semibold text-sm"></th>
<th class="px-3 py-[14px] font-semibold text-sm">Versión</th>
<th class="px-3 py-[14px] font-semibold text-sm">Descarga</th>
</tr>
</thead>
<tbody class="bg-transparent divide-y divide-culqi-gray-ultra-light dark:divide-culqi-plate-light">
<tr class="whitespace-nowrap font-normal font-Archivo text-culqi-plate-dark dark:text-white-gray">
<td class = "px-3 py-4 font-bold text-sm">
<img src="https://docs.culqi.com/images/plugins/prestashop.svg" alt="prestashop" /></br>
</td>
<td class = "px-3 py-4 font-bold text-sm">
1.6.0+
</td>
<td class = "px-3 py-4 text-sm">
<a href='https://github.com/culqi/culqi-prestashop/releases/download/v3.0.0/culqi.zip'>
Descargar
</a>
</td>
</tr>
</tbody>
</table>

## Manual de instalación y configuración

Puedes usar el manual para obtener más detalle:

<table
class="mx-auto max-w-4xl w-full whitespace-nowrap bg-transparent divide-y divide-culqi-gray-ultra-light dark:divide-culqi-plate-light border-2 border-culqi-gray-ultra-light dark:border-culqi-plate-light">
<thead>
<tr class="bg-culqi-gray-light dark:bg-culqi-gray-ultra-light text-culqi-plate-light text-left">
<th class="px-3 py-[14px] font-semibold text-sm"></th>
<th class="px-3 py-[14px] font-semibold text-sm">Descarga</th>
</tr>
</thead>
<tbody class="bg-transparent divide-y divide-culqi-gray-ultra-light dark:divide-culqi-plate-light">
<tr class="whitespace-nowrap font-normal font-Archivo text-culqi-plate-dark dark:text-white-gray">
<td class = "px-3 py-4 font-bold text-sm">
<img src="https://docs.culqi.com/images/plugins/prestashop.svg" alt="woocommerce" /></br>
</td>
<td class = "px-3 py-4 text-sm">
<a href='https://docs.culqi.com/pdf/manual_prestashop.pdf' download>
Descargar
</a>
</td>
</tr>
</tbody>
</table>



4 changes: 2 additions & 2 deletions config_es.xml
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
<?xml version="1.0" encoding="UTF-8" ?>
<module>
<name>culqi</name>
<displayName><![CDATA[Culqi Checkout]]></displayName>
<displayName><![CDATA[Culqi]]></displayName>
<version><![CDATA[3.0.4]]></version>
<description><![CDATA[Con&eacute;ctate a nuestra pasarela de pagos para aumentar tus ventas.]]></description>
<author><![CDATA[Team Culqi (Juan Ysen, Dennis Landa)]]></author>
<author><![CDATA[Culqi]]></author>
<tab><![CDATA[payments_gateways]]></tab>
<confirmUninstall><![CDATA[¿Estás seguro que quieres desintalar el módulo de Culqi?]]></confirmUninstall>
<is_configurable>1</is_configurable>
Expand Down
193 changes: 74 additions & 119 deletions controllers/front/chargeajax.php
Original file line number Diff line number Diff line change
@@ -1,130 +1,85 @@
<?php

include_once dirname(__FILE__, 3) . '/libraries/culqi-php/lib/culqi.php';
include_once dirname(__FILE__, 3) . '/culqi.php';

class CulqiChargeAjaxModuleFrontController extends ModuleFrontController
{

// OLD

/* public function initContent()
{
parent::initContent();
$this->ajax = true;
}

public function displayAjax()
{
$culqiPretashop = new Culqi();
$infoCheckout = $culqiPretashop->getCulqiInfoCheckout();

$culqi = new Culqi\Culqi(array('api_key' => $infoCheckout['llave_secreta'] ));
try {
if(phpversion() <= 5.7) {
include_once RAIZ . '/libraries/culqi-php/lib/culqi.php';
//include_once dirname(__FILE__) . '/culqi.php';
} else {
include_once dirname(__FILE__, 3) . '/libraries/culqi-php/lib/culqi.php';
// include_once dirname(__FILE__, 3) . '/culqi.php';
}

$args_charge = array(
'amount' => (int)$infoCheckout['total'],
'currency_code' => $infoCheckout['currency'],
'email' => Tools::getValue("email"),
'source_id' => Tools::getValue("token_id"),
'capture' => false, 'enviroment' => $infoCheckout['enviroment_backend'],
'antifraud_details' => array('device_finger_print_id'=>Tools::getValue("device"))
);

if(Tools::getValue("parameters3DS")!==FALSE){
$args_charge['authentication_3DS'] = Tools::getValue("parameters3DS");
}

$culqi_charge = $culqi->Charges->create( $args_charge );
class CulqiChargeAjaxModuleFrontController extends ModuleFrontController
{

} catch(Exception $e){
die(Tools::jsonEncode($e->getMessage()));
public function initContent()
{
parent::initContent();
$this->ajax = true;
}

die(Tools::jsonEncode($culqi_charge));
} */

public function initContent()
{
parent::initContent();
$this->ajax = true;
}

public function displayAjax()
{
$culqiPretashop = new Culqi();
$infoCheckout = $culqiPretashop->getCulqiInfoCheckout();
//var_dump($infoCheckout);
$amount_cart = $infoCheckout['total'];
$currency_cart = $infoCheckout['currency'];
$enviroment_cart = $infoCheckout['enviroment_backend'];

//$order_id = Tools::getValue("ps_order_id");
//var_dump($infoCheckout); exit(1);
$culqi = new Culqi\Culqi(array('api_key' => $infoCheckout['llave_secreta'] ));

try {

//PRIMERO REGISTRAMOS EL PEDIDO EN PRESTASHOP
$cart = $this->context->cart;
$customer = new Customer($cart->id_customer);
//$this->module->validateOrder((int)$cart->id, Configuration::get('CULQI_STATE_PENDING'), (float)$cart->getordertotal(true), 'Culqi', null, array(), (int)$cart->id_currency, false, $customer->secure_key);

//$order_id = Order::getOrderByCartId($this->context->cart->id);


// ENVIAMOS A GENERAR EL CARGO DE CULQI
$args_charge = array(
'amount' => (int)$amount_cart,
'currency_code' => $currency_cart,
'email' => Tools::getValue("email"),
'source_id' => Tools::getValue("token_id"),
'capture' => true,
'enviroment' => $enviroment_cart,
'antifraud_details' => array('device_finger_print_id'=>Tools::getValue("device")),
'metadata' => ["pts_order_id" => (string)$cart->id, "sponsor" => "prestashop"],
);

if(Tools::getValue("parameters3DS")!==FALSE){
$args_charge['authentication_3DS'] = Tools::getValue("parameters3DS");
}
//var_dump($args_charge); exit(1);
$culqi_charge = $culqi->Charges->create( $args_charge );
//var_dump($culqi_charge->action_code); exit(1);

// if (!$culqi_charge->action_code == 'REVIEW') {

// $order = new Order($order_id);
// $order_payment_collection = $order->getOrderPaymentCollection();

// $order_payment = $order_payment_collection[0];
// // $order_payment->card_number = Tools::getValue("card_number").'-'.Tools::getValue("chargeid");
// // $order_payment->card_brand = Tools::getValue("card_brand");
// $order_payment->transaction_id = $culqi_charge;
// $order_payment->update();
// }


//die(Tools::jsonEncode($order->id));

//$findorder = Db::getInstance()->ExecuteS("SELECT distinct * FROM " . _DB_PREFIX_ . "orders where id_order='". $order_id . "'");
//$reference = $findorder[0]['reference'];


//Db::getInstance()->ExecuteS("UPDATE SET transaction_id = '" . $culqi_charge . "' FROM ps_order_payment WHERE order_reference = '". $reference . "'");
//$order_reference = $order_payment[0]["order_reference"];

// $order = new Order($order_id);
// $order_payment_collection = $order->getOrderPaymentCollection();
// $order_payment = $order_payment_collection[0];
// $order_payment->transaction_id = $culqi_charge;
// $order_payment->update();

} catch(Exception $e){
die(Tools::jsonEncode($e->getMessage()));
public function displayAjax()
{
$culqiPretashop = new Culqi();
$infoCheckout = $culqiPretashop->getCulqiInfoCheckout();
$amount_cart = $infoCheckout['total'];
$currency_cart = $infoCheckout['currency'];
$enviroment_cart = $infoCheckout['enviroment_backend'];
$address = $infoCheckout['address'];
$country = $infoCheckout['country'];
$customer = $infoCheckout['customer'];
$firstname = $customer->firstname;
$lastname = $customer->lastname;

$culqi = new Culqi\Culqi(array('api_key' => $infoCheckout['llave_secreta']));

try {
$cart = $this->context->cart;
$customer = new Customer($cart->id_customer);

$antifraud_charges = array();
if (isset($firstname) and !empty($firstname) and !is_null($firstname) and $firstname != '') {
$antifraud_charges['first_name'] = $firstname;
}
if (isset($lastname) and !empty($lastname) and !is_null($lastname) and $lastname != '') {
$antifraud_charges['last_name'] = $lastname;
}
if (isset($address[0]['address1']) and !empty($address[0]['address1']) and !is_null($address[0]['address1']) and $address[0]['address1'] != '') {
$antifraud_charges['address'] = $address[0]['address1'];
}
if (isset($address[0]['city']) and !empty($address[0]['city']) and !is_null($address[0]['city']) and $address[0]['city'] != '') {
$antifraud_charges['address_city'] = $address[0]['city'];
}
if (isset($country[0]['iso_code']) and !empty($country[0]['iso_code']) and !is_null($country[0]['iso_code']) and $country[0]['iso_code'] != '') {
$antifraud_charges['country_code'] = $country[0]['iso_code'];
}
if (isset($address[0]['phone']) and !empty($address[0]['phone']) and !is_null($address[0]['phone']) and $address[0]['phone'] != '') {
$antifraud_charges['phone_number'] = $address[0]['phone'];
}
$antifraud_charges['device_finger_print_id'] = Tools::getValue("device");

$args_charge = array(
'amount' => (int)$amount_cart,
'currency_code' => $currency_cart,
'email' => Tools::getValue("email"),
'source_id' => Tools::getValue("token_id"),
'capture' => true,
'enviroment' => $enviroment_cart,
'antifraud_details' => $antifraud_charges,
'metadata' => ["order_id" => (string)$cart->id, "sponsor" => "prestashop"],
);

if (Tools::getValue("parameters3DS") !== FALSE) {
$args_charge['authentication_3DS'] = Tools::getValue("parameters3DS");
}
$culqi_charge = $culqi->Charges->create($args_charge);

} catch (Exception $e) {
die(Tools::jsonEncode($e->getMessage()));
}

die(Tools::jsonEncode($culqi_charge));
}

die(Tools::jsonEncode($culqi_charge));
}

}
22 changes: 9 additions & 13 deletions controllers/front/generateorder.php
Original file line number Diff line number Diff line change
@@ -1,7 +1,13 @@
<?php

include_once dirname(__FILE__, 3) . '/libraries/culqi-php/lib/culqi.php';
include_once dirname(__FILE__, 3) . '/culqi.php';
if(phpversion() <= 5.7) {
include_once RAIZ . '/libraries/culqi-php/lib/culqi.php';
// include_once dirname(__FILE__) . '/culqi.php';
} else {
include_once dirname(__FILE__, 3) . '/libraries/culqi-php/lib/culqi.php';
//include_once dirname(__FILE__, 3) . '/culqi.php';
}


class CulqiGenerateOrderModuleFrontController extends ModuleFrontController
{
Expand All @@ -11,10 +17,8 @@ public function initContent()
parent::initContent();
$this->ajax = false;

//var_dump('hi'); exit(1);
$culqiPretashop = new Culqi();
$infoCheckout = $culqiPretashop->getCulqiInfoCheckout();
//var_dump($infoCheckout); exit(1);
$culqi = new Culqi\Culqi(array('api_key' => $infoCheckout['llave_secreta'] ));
$phone = ($infoCheckout['address'][0]['phone']!='' and !is_null($infoCheckout['address'][0]['phone'])) ? $infoCheckout['address'][0]['phone'] : '999999999';
$expiration_date = time() + (int)$infoCheckout['tiempo_exp'] * 60 * 60;
Expand All @@ -38,17 +42,9 @@ public function initContent()
'expiration_date' => $expiration_date,
'confirm' => false,
'enviroment' => $infoCheckout['enviroment_backend'],
'metadata' => ["pts_order_id" => (string)$infoCheckout['orden'], "sponsor" => "prestashop"]
'metadata' => ["order_id" => (string)$infoCheckout['orden'], "sponsor" => "prestashop"]
);

//var_dump($args_order); exit(1);

$culqi_order = $culqi->Orders->create( $args_order );
//var_dump($culqi_order); exit(1);
//echo var_dump($culqi_order);

die(Tools::jsonEncode($culqi_order->id));


}
}
Loading