bebeboutik-scripts/replay_paypal.php
David 258cdc757a Updated gitignore
Added 2 recovery scripts
2018-01-02 17:03:48 +01:00

281 lines
14 KiB
PHP

<?php
$_SERVER['HTTP_HOST'] = 'www.bebeboutik.com';
$_SERVER['SERVER_NAME'] = 'www.bebeboutik.com';
$_SERVER['HTTP_PORT'] = 80;
$_SERVER['REMOTE_ADDR'] = '127.0.0.1';
$_SERVER['SERVER_PORT'] = 80;
@ini_set('display_errors', 'on');
include __DIR__ . '/www/config/config.inc.php';
if (version_compare(_PS_VERSION_, '1.5', '<')) {
include __DIR__ . '/www/init.php';
}
include_once(_PS_MODULE_DIR_ . 'paypal/express_checkout/process.php');
include_once(_PS_MODULE_DIR_ . 'paypal/express_checkout/submit.php');
include_once(_PS_MODULE_DIR_ . 'paypal/paypal_login/PayPalLoginUser.php');
echo 'starting' . "\n";
$scriptDebug = true;
$fp = fopen(__DIR__ . '/Download.csv', 'r');
$errorCount = 0;
$customerNotFoundCount = 0;
$count = 0;
$customerFoundCount = 0;
$emailToIdCustomerArray = array();
$report = array(
'wrongTotal' => array(),
'missingOrder' => array(),
'multipleOrders' => array(),
'foundWithEmail' => array(),
'foundWithPaypalTable' => array(),
'foundWithFnLn' => array(),
'lostCustomers' => array(),
'orderToProcess' => array()
);
if ($fp) {
echo 'Reading ' . __DIR__ . '/Download.csv' . "\n";
while (($line = fgets($fp)) !== false) {
$splitCsvLine = str_getcsv($line, ',', '"');
$error = '';
if ($splitCsvLine[1] !== 'Heure' && $splitCsvLine[10] !== 'contact@bebeboutik.com') {
$count++;
$values = array();
$values['amount'] = str_replace(',', '.', $splitCsvLine[7]);
$values['email'] = $splitCsvLine[10];
$values['firstname_lastname'] = $splitCsvLine[3];
$values['id_transaction'] = $splitCsvLine[12];
$values['shipping_cost'] = str_replace(',', '.', $splitCsvLine[17]);
$values['date'] = $splitCsvLine[0] . ' ' . $splitCsvLine[1];
$exploded = explode(' ', $values['firstname_lastname']);
if (count($exploded) === 2) {
$values['possible_first_name'] = $exploded[0];
$values['possible_last_name'] = $exploded[1];
} else {
$values['possible_first_name'] = $exploded[0];
unset($exploded[0]);
$values['possible_last_name'] = implode(' ', $exploded);
}
if (!array_key_exists($values['email'], $emailToIdCustomerArray)) {
//check paypal table first
$result = Db::getInstance()->getRow('
SELECT id_customer
FROM ps_paypal_customer
WHERE paypal_email = \'' . pSQL($values['email']) . '\'');
if ($result) {
$customer = new Customer((int)$result['id_customer']);
}
if ($customer->id !== null && $result) {
$report['foundWithPaypalTable'][$values['email']] = $customer->id;
$emailToIdCustomerArray[$values['email']] = (int)$customer->id;
} else {
$customer = new Customer();
$customer->getByEmail($values['email']);
if (Validate::isLoadedObject($customer)) {
$emailToIdCustomerArray[$values['email']] = (int)$customer->id;
$report['foundWithEmail'][$values['email']] = (int)$customer->id;
} else {
$result = Db::getInstance()->getRow('
SELECT id_customer
FROM `ps_customer`
WHERE `active` = 1
AND lower(`firstname`) = \'' . pSQL(strtolower($values['possible_first_name'])) . '\'
AND lower(`lastname`) = \'' . pSQL(strtolower($values['possible_last_name'])) . '\'
AND `deleted` = 0
AND `is_guest` = 0');
if ($result) {
$customer = new Customer((int)$result['id_customer']);
$report['foundWithFnLn'][$values['email']] = $customer->id;
$emailToIdCustomerArray[$values['email']] = (int)$customer->id;
} else {
$result = Db::getInstance()->getRow('
SELECT id_customer
FROM `ps_customer`
WHERE `active` = 1
AND lower(`lastname`) = \'' . pSQL(strtolower($values['possible_first_name'])) . '\'
AND lower(`firstname`) = \'' . pSQL(strtolower($values['possible_last_name'])) . '\'
AND `deleted` = 0
AND `is_guest` = 0');
if ($result) {
$customer = new Customer((int)$result['id_customer']);
$report['foundWithFnLn'][$values['email']] = $customer->id;
$emailToIdCustomerArray[$values['email']] = (int)$customer->id;
} else {
$report['lostCustomers'][] = array('email' => $values['email'],
'info' => $splitCsvLine);
}
}
}
}
}
if (Validate::isLoadedObject($customer)) {
$order = Db::getInstance()->getRow('
SELECT po.id_order, o.total_paid
FROM ps_paypal_order po
JOIN ps_orders o ON o.id_order = po.id_order
WHERE id_transaction = \'' . $values['id_transaction'] . '\''
);
if ($order) {
if ($values['amount'] !== $order['total_paid']) {
$report['wrongTotal'][] = $order['id_order'];
}
} else {
$orders = Db::getInstance()->ExecuteS('
SELECT o.id_order , o.total_paid
FROM `ps_orders` o
WHERE o.`id_customer` = ' . (int)$customer->id . '
AND o.date_add BETWEEN "2017-12-20 00:00:00" AND "2017-12-23 23:59:00"'
);
if ($orders) {
if (count($orders) === 1) {
if ($values['amount'] !== $orders[0]['total_paid']) {
$report['wrongTotal'][] = $orders[0]['id_order'];
}
} else {
$report['multipleOrders'][] = $customer->id;
}
} else {
//try to find
//now we try to find id_cart that could do the job
if (534175 === (int)$customer->id) {
echo 'test 534175';
}
$result = Db::getInstance()->ExecuteS('
SELECT c.`id_cart` , c.date_upd
FROM `ps_cart` c
WHERE c.`id_customer` = ' . (int)$customer->id . '
ORDER BY c.date_upd desc');
if (534175 === (int)$customer->id) {
echo json_encode($result);
}
if ($result && count($result) > 0) {
$selectedCartId = $result[0]['id_cart'];
foreach ($result as $cartResult) {
$cart = new Cart((int)$cartResult['id_cart']);
$cartValue = $cart->getOrderTotal();
if ((float)$values['amount'] === $cartValue) {
$selectedCartId = (int)$cartResult['id_cart'];
continue;
}
}
$selectedCart = new Cart($selectedCartId);
$cartValue = $selectedCart->getOrderTotal();
if ((float)$values['amount'] === $cartValue) {
$errorWIthCartValue = 'ok';
} else {
$errorWIthCartValue = 'not ok';
}
$foundVia = 'nothing';
if (array_key_exists($values['email'], $report['foundWithPaypalTable'])) {
$foundVia = 'paypaltable';
} elseif (array_key_exists($values['email'], $report['foundWithEmail'])) {
$foundVia = 'email';
} elseif (array_key_exists($values['email'], $report['foundWithFnLn'])) {
$foundVia = 'lastname';
}
$report['missingOrder'][] = array('customer_id' => $customer->id,
'amount' => $values['amount'],
'transaction_id' => $values['id_transaction'],
'id_cart' => $selectedCart->id,
'cart_value' => $cartValue,
'error_with_cart_value' => $errorWIthCartValue,
'foundVia' => $foundVia
);
if ($errorWIthCartValue === 'ok') {
$report['orderToProcess'][$values['id_transaction']] = array('customer_id' => $customer->id,
'amount' => $values['amount'],
'transaction_id' => $values['id_transaction'],
'id_cart' => $selectedCart->id,
'email' => $values['email'],
'shipping_cost' => $values['shipping_cost'],
'order_time' => $values['date']
);
}
} else {
$report['missingOrder'][] = array('customer_id' => $customer->id,
'amount' => $values['amount'],
'transaction_id' => $values['id_transaction'],
'id_cart' => 'not found'
);
}
}
}
}
}
}
$report['missingOrderCount'] = count($report['missingOrder']);
$report['wrongTotalCount'] = count($report['wrongTotal']);
$report['missingOrderCount'] = count($report['missingOrder']);
$report['foundWithEmailCount'] = count($report['foundWithEmail']);
$report['foundWithPaypalTableCount'] = count($report['foundWithPaypalTable']);
$report['foundWithFnLnCount'] = count($report['foundWithFnLn']);
$report['lostCustomersCount'] = count($report['lostCustomers']);
$report['orderToProcessCount'] = count($report['orderToProcess']);
fclose($fp);
}
if ($scriptDebug) {
echo 'count nb lines ' . $count . "\n";
echo 'unique customers found ' . count($emailToIdCustomerArray) . "\n";
echo 'customer not found ' . $customerNotFoundCount . "\n";
echo '---report' . "\n";
echo json_encode($report) . "\n";
}
unset($values);
foreach ($report['orderToProcess'] as $id_transaction => $orderToProcess) {
echo 'treating cart ' . $orderToProcess['id_cart'] . "\n";
$request_type = 'payment_cart';
$ppec = new PaypalExpressCheckout($request_type);
$cart = new Cart((int)$orderToProcess['id_cart']);
$customer = new Customer((int)$cart->id_customer);
if (!$cart->OrderExists()) {
$payment_type = (int)Configuration::get('PS_OS_PAYMENT');
$payment_status = 'Completed';
$message = $ppec->l('Payment accepted.') . '<br />';
$transaction = array(
'currency' => 'EUR',
'id_invoice' => null,
'id_transaction' => $id_transaction,
'transaction_id' => $id_transaction,
'total_paid' => (float)$orderToProcess['amount'],
'shipping' => (float)$orderToProcess['shipping_cost'],
'payment_date' => $orderToProcess['order_time'],
'payment_status' => $payment_status
);
$order_total = (float)$cart->getOrderTotal(true, Cart::BOTH);
if ($scriptDebug) {
$params = array(
'cart_id ' => (int)$cart->id,
'payment_type' => $payment_type,
'order_total' => $order_total,
'displayName' => 'PayPal',
'message' => $message,
'transaction' => $transaction,
'cart->id_currency' => (int)$cart->id_currency,
'customer->secure_key' => $customer->secure_key
);
echo json_encode($params);
} else {
$ppec->validateOrder((int)$cart->id, $payment_type, $order_total, 'PayPal', $message, $transaction,
(int)$cart->id_currency, false, $customer->secure_key);
}
}
}