CMXX - Webhooks and giftcards
This commit is contained in:
256
checkout.php
256
checkout.php
@@ -26,6 +26,7 @@ $discounttotal = 0.00;
|
||||
$taxtotal = 0.00;
|
||||
$tax_rate = '';
|
||||
$weighttotal = 0;
|
||||
$shipping_methods = [];
|
||||
|
||||
$checkout_input = [
|
||||
"selected_country" => isset($_POST['address_country']) ? $_POST['address_country'] : $account['address_country'],
|
||||
@@ -34,11 +35,17 @@ $checkout_input = [
|
||||
"discount_code" => isset($_SESSION['discount']) ? $_SESSION['discount'] : ''
|
||||
];
|
||||
|
||||
$selected_shipping_method_name = '';
|
||||
$shipping_methods_available = [];
|
||||
// Error array, output errors on the form
|
||||
$errors = [];
|
||||
|
||||
//CALL TO API FOR shipping
|
||||
$api_url = '/v2/taxes/';
|
||||
$countries = ioAPIv2($api_url,'',$clientsecret);
|
||||
//Decode Payload
|
||||
if (!empty($countries)){$countries = json_decode($countries,true);}else{$countries = null;}
|
||||
//CountryID mapping
|
||||
$countryMap = array_column($countries, 'country', 'id');
|
||||
|
||||
// ---------------------------------------------
|
||||
// End defaults --------------------------------
|
||||
// ---------------------------------------------
|
||||
@@ -63,12 +70,15 @@ if (isset($_POST['discount_code']) && !empty($_POST['discount_code'])) {
|
||||
} else if (isset($_POST['discount_code']) && empty($_POST['discount_code']) && isset($_SESSION['discount'])) {
|
||||
unset($_SESSION['discount']);
|
||||
}
|
||||
|
||||
if (isset($_POST['address_country'])){
|
||||
// Retrieve shipping methods
|
||||
$shipping_methods = ioAPIv2('/v2/shipping/list=methods&country='.$checkout_input['selected_country'].'&price_total='.$subtotal.'&weight_total='.$weighttotal,'',$clientsecret);
|
||||
$shipping_methods = json_decode($shipping_methods,true);
|
||||
}
|
||||
//-------------------------------
|
||||
// If there are products in cart handle the checkout
|
||||
//-------------------------------
|
||||
if ($products_in_cart) {
|
||||
|
||||
//Calculate shopping_cart
|
||||
$payload = json_encode(array("cart" => $products_in_cart, "checkout_input" => $checkout_input), JSON_UNESCAPED_UNICODE);
|
||||
$products_in_cart = ioAPIv2('/v2/checkout/',$payload,$clientsecret);
|
||||
@@ -82,25 +92,24 @@ if ($products_in_cart) {
|
||||
$tax_rate = $products_in_cart['totals']['tax_rate'];
|
||||
$weighttotal = $products_in_cart['totals']['weighttotal'];
|
||||
$total = $products_in_cart['totals']['total'];
|
||||
|
||||
$selected_country = isset($_POST['address_country']) ? $_POST['address_country'] : $account['address_country'];
|
||||
$selected_shipping_method = isset($_POST['shipping_method']) ? $_POST['shipping_method'] : null;
|
||||
$selected_shipping_method_name = '';
|
||||
|
||||
// Retrieve shipping methods
|
||||
$stmt = $pdo->query('SELECT * FROM shipping');
|
||||
$shipping_methods = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
||||
|
||||
// Retrieve shipping methods
|
||||
$shipping_methods = ioAPIv2('/v2/shipping/list=methods&country='.$checkout_input['selected_country'].'&price_total='.$subtotal.'&weight_total='.$weighttotal,'',$clientsecret);
|
||||
$shipping_methods = json_decode($shipping_methods,true);
|
||||
|
||||
// Redirect the user if the shopping cart is empty
|
||||
if (empty($products_in_cart)) {
|
||||
header('Location: ' . url('index.php?page=cart'));
|
||||
exit;
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------
|
||||
// END Checkout handler
|
||||
//-------------------------------
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------
|
||||
//Place order
|
||||
//-------------------------------
|
||||
@@ -198,119 +207,122 @@ if (isset($_POST['method'], $_POST['first_name'], $_POST['last_name'], $_POST['a
|
||||
$_SESSION['account_id'] = $account_id;
|
||||
$_SESSION['account_role'] = $account ? $account['role'] : 'Member';
|
||||
}
|
||||
}
|
||||
|
||||
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
//Pay on delivery = 2
|
||||
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
//Pay on delivery = 2
|
||||
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
|
||||
if (pay_on_delivery_enabled && $place_order['payment_method'] == 2){
|
||||
header('Location: ' . url('index.php?page=placeorder'));
|
||||
exit;
|
||||
}
|
||||
|
||||
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
// Mollie = 0 ++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
|
||||
if (mollie_enabled && $_POST['method'] == 0) {
|
||||
|
||||
try {
|
||||
/*
|
||||
* Initialize the Mollie API library with your API key.
|
||||
*
|
||||
* See: https://www.mollie.com/dashboard/developers/api-keys
|
||||
*/
|
||||
require "initialize.php";
|
||||
|
||||
/*
|
||||
* Generate a unique order id for this example. It is important to include this unique attribute
|
||||
* in the redirectUrl (below) so a proper return page can be shown to the customer.
|
||||
*/
|
||||
$orderId = $place_order['transaction_id'];
|
||||
$value = number_format($place_order['payment_amount'],2,'.','');
|
||||
if (pay_on_delivery_enabled && $place_order['payment_method'] == 2){
|
||||
header('Location: ' . url('index.php?page=placeorder'));
|
||||
exit;
|
||||
}
|
||||
|
||||
/*
|
||||
* Determine the url parts to these example files.
|
||||
*/
|
||||
$protocol = isset($_SERVER['HTTPS']) && strcasecmp('off', $_SERVER['HTTPS']) !== 0 ? "https" : "http";
|
||||
$hostname = $_SERVER['HTTP_HOST'];
|
||||
$path = dirname($_SERVER['REQUEST_URI'] ?? $_SERVER['PHP_SELF']);
|
||||
|
||||
/*
|
||||
* Payment parameters:
|
||||
* amount Amount in EUROs.
|
||||
* description Description of the payment.
|
||||
* redirectUrl Redirect location. The customer will be redirected there after the payment.
|
||||
* webhookUrl Webhook location, used to report when the payment changes state.
|
||||
* metadata Custom metadata that is stored with the payment.
|
||||
*/
|
||||
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
// Mollie = 0 ++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
|
||||
if (rewrite_url){
|
||||
$redirectURL = $protocol.'://'.$hostname.$path.'placeorder/'.$orderId;
|
||||
}else{
|
||||
$redirectURL = $protocol.'://'.$hostname.$path.'index.php?page=placeorder&order_id='.$orderId;
|
||||
if (mollie_enabled && $_POST['method'] == 0) {
|
||||
|
||||
try {
|
||||
/*
|
||||
* Initialize the Mollie API library with your API key.
|
||||
*
|
||||
* See: https://www.mollie.com/dashboard/developers/api-keys
|
||||
*/
|
||||
require "initialize.php";
|
||||
|
||||
/*
|
||||
* Generate a unique order id for this example. It is important to include this unique attribute
|
||||
* in the redirectUrl (below) so a proper return page can be shown to the customer.
|
||||
*/
|
||||
$orderId = $place_order['transaction_id'];
|
||||
$value = number_format($place_order['payment_amount'],2,'.','');
|
||||
|
||||
/*
|
||||
* Determine the url parts to these example files.
|
||||
*/
|
||||
$protocol = isset($_SERVER['HTTPS']) && strcasecmp('off', $_SERVER['HTTPS']) !== 0 ? "https" : "http";
|
||||
$hostname = $_SERVER['HTTP_HOST'];
|
||||
$path = dirname($_SERVER['REQUEST_URI'] ?? $_SERVER['PHP_SELF']);
|
||||
|
||||
/*
|
||||
* Payment parameters:
|
||||
* amount Amount in EUROs.
|
||||
* description Description of the payment.
|
||||
* redirectUrl Redirect location. The customer will be redirected there after the payment.
|
||||
* webhookUrl Webhook location, used to report when the payment changes state.
|
||||
* metadata Custom metadata that is stored with the payment.
|
||||
*/
|
||||
|
||||
if (rewrite_url){
|
||||
$redirectURL = $protocol.'://'.$hostname.$path.'placeorder/'.$orderId;
|
||||
}else{
|
||||
$redirectURL = $protocol.'://'.$hostname.$path.'index.php?page=placeorder&order_id='.$orderId;
|
||||
}
|
||||
|
||||
$payment = $mollie->payments->create([
|
||||
"amount" => [
|
||||
"currency" => "EUR",
|
||||
"value" => "{$value}", // You must send the correct number of decimals, thus we enforce the use of strings
|
||||
],
|
||||
"description" => "Order #{$orderId}",
|
||||
"redirectUrl" => "$redirectURL",
|
||||
"webhookUrl" => "{$protocol}://{$hostname}{$path}webhook.php",
|
||||
"metadata" => [
|
||||
"order_id" => $orderId,
|
||||
],
|
||||
]);
|
||||
/*
|
||||
* Send the customer off to complete the payment.
|
||||
* This request should always be a GET, thus we enforce 303 http response code
|
||||
*/
|
||||
|
||||
// Send customer to checkout
|
||||
header("Location: " . $payment->getCheckoutUrl(), true, 303);
|
||||
|
||||
} catch (\Mollie\Api\Exceptions\ApiException $e) {
|
||||
echo "API call failed: " . htmlspecialchars($e->getMessage());
|
||||
}
|
||||
|
||||
$payment = $mollie->payments->create([
|
||||
"amount" => [
|
||||
"currency" => "EUR",
|
||||
"value" => "{$value}", // You must send the correct number of decimals, thus we enforce the use of strings
|
||||
],
|
||||
"description" => "Order #{$orderId}",
|
||||
"redirectUrl" => "$redirectURL",
|
||||
"webhookUrl" => "{$protocol}://{$hostname}{$path}webhook.php",
|
||||
"metadata" => [
|
||||
"order_id" => $orderId,
|
||||
],
|
||||
]);
|
||||
/*
|
||||
* Send the customer off to complete the payment.
|
||||
* This request should always be a GET, thus we enforce 303 http response code
|
||||
*/
|
||||
|
||||
// Send customer to checkout
|
||||
header("Location: " . $payment->getCheckoutUrl(), true, 303);
|
||||
|
||||
} catch (\Mollie\Api\Exceptions\ApiException $e) {
|
||||
echo "API call failed: " . htmlspecialchars($e->getMessage());
|
||||
exit;
|
||||
}
|
||||
exit;
|
||||
}
|
||||
|
||||
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
// PayPal Payment = 1 +++++++++++++++++++++++++++++++++++++++++
|
||||
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
// PayPal Payment = 1 +++++++++++++++++++++++++++++++++++++++++
|
||||
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
|
||||
if (paypal_enabled && $_POST['method'] == 'paypal') {
|
||||
|
||||
//Process Payment
|
||||
require_once __DIR__."/lib/paypal/paypal.php";
|
||||
if (paypal_enabled && $_POST['method'] == 'paypal') {
|
||||
|
||||
//Process Payment
|
||||
require_once __DIR__."/lib/paypal/paypal.php";
|
||||
|
||||
$base = PAYPAL_URL;
|
||||
$id = PAYPAL_CLIENT_ID;
|
||||
$secret = PAYPAL_CLIENT_SECRET;
|
||||
|
||||
//init input
|
||||
$order = $place_order['transaction_id'];
|
||||
$price = number_format($place_order['payment_amount'],2,'.','');
|
||||
$currency = "EUR";
|
||||
$base = PAYPAL_URL;
|
||||
$id = PAYPAL_CLIENT_ID;
|
||||
$secret = PAYPAL_CLIENT_SECRET;
|
||||
|
||||
//make payment
|
||||
$paypal = new paypalCurl();
|
||||
$paypal->init($id,$secret,$base);
|
||||
$result = $paypal->makePaymentURL($order,$price,$currency);
|
||||
//init input
|
||||
$order = $place_order['transaction_id'];
|
||||
$price = number_format($place_order['payment_amount'],2,'.','');
|
||||
$currency = "EUR";
|
||||
|
||||
//make payment
|
||||
$paypal = new paypalCurl();
|
||||
$paypal->init($id,$secret,$base);
|
||||
$result = $paypal->makePaymentURL($order,$price,$currency);
|
||||
|
||||
if ($result->status === true) {
|
||||
header("location:". $result->url);
|
||||
die;
|
||||
if ($result->status === true) {
|
||||
header("location:". $result->url);
|
||||
die;
|
||||
}
|
||||
else { //raise error
|
||||
echo $result->msg;
|
||||
die;
|
||||
}
|
||||
}
|
||||
else { //raise error
|
||||
echo $result->msg;
|
||||
die;
|
||||
} else {
|
||||
foreach ($place_order['error'] as $error){
|
||||
$errors[] = $error;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -412,8 +424,8 @@ $view .= '
|
||||
|
||||
<label for="address_country">'.$shipping_country.'</label>
|
||||
<select name="address_country" class="ajax-update form-field" required>';
|
||||
foreach(get_countries() as $country){
|
||||
$view .= ' <option value="'.$country.'" '.($country==$account['address_country'] ? ' selected' : '').'>'.$country.'</option>';
|
||||
foreach($countries as $country){
|
||||
$view .= ' <option value="'.$country['id'].'" '.($country['id']==$account['address_country'] ? ' selected' : '').'>'.(${$countryMap[$country['id']]} ?? $countryMap[$country['id']]).'</option>';
|
||||
}
|
||||
$view .= ' </select>
|
||||
|
||||
@@ -444,21 +456,19 @@ $view .= ' </span>
|
||||
</div>
|
||||
<div class="shipping-methods-container">';
|
||||
|
||||
if ($shipping_methods_available){
|
||||
if (isset($shipping_methods) && count($shipping_methods) > 0){
|
||||
$view .= ' <div class="shipping-methods">
|
||||
<h3>'.$h3_shipping_method.'</h3>';
|
||||
|
||||
foreach($shipping_methods as $k => $method){
|
||||
|
||||
if (!in_array($method['id'], $shipping_methods_available)){
|
||||
$view .= ' <div class="shipping-method">
|
||||
<input type="radio" class="ajax-update" id="sm'.$k.'" name="shipping_method" value="'.$method['id'].'" required'.($selected_shipping_method==$method['id'] ? ' checked':'').'>
|
||||
<label for="sm'.$k.'">'.$method['name'].' ('.currency_code.''.number_format($method['price'], 2).''.$method['type']=='Single Product'?' per item':''.')</label>
|
||||
foreach($shipping_methods as $method){
|
||||
$view .= ' <div class="shipping-method">
|
||||
<input type="radio" class="ajax-update" id="sm'.$method['id'].'" name="shipping_method" value="'.$method['id'].'" required'.($checkout_input['selected_shipment_method']==$method['id'] ? ' checked':'').'>
|
||||
<label for="sm'.$method['id'].'">'.$method['name'].' ('.currency_code.''.number_format($method['price'], 2).')</label>
|
||||
</div>';
|
||||
}
|
||||
$view .= '</div>';
|
||||
}
|
||||
}
|
||||
$view .= '</div>';
|
||||
|
||||
}
|
||||
$view .= ' </div>
|
||||
<div class="summary">
|
||||
<div class="subtotal">
|
||||
|
||||
Reference in New Issue
Block a user