Version Description
- 11-10-2018 =
IMPORTANT This version requires PHP 5.6 or higher. If you are using an older PHP version, please read this article: PHP & Mollie API v2.
- New - Now supports Klarna Pay later and Klara Slice it, read more
- New - Implemented support for the new Orders API
- New - Tested with and updated for WooCommerce 3.5 beta compatibility
New - EPS, GiroPay: implemented support for SEPA first payments (recurring payments)
Fix - Fixed for "Uncaught Error: Call to a member function isOpen() on null"
Fix - Fixed issue with Guzzle and PhpScoper
Fix - WooCommerce emails: make sure "Payment completed by..." message is only shown once per email
Fix - WooCommerce Subscriptions: add support for "Accept Manual Renewals". This enables Bank Transfer and PayPal in checkout for subscription products.
Fix - Mollie payment gateways weren't always shows when cart was empty.
Fix - Fix for "Link expired" message after refresh methods in WooCommerce settings
Fix - Stricter check for valid API key when individual gateways are loaded
Fix - Added new action hook in Mollie_WC_Gateway_Abstract::getReturnRedirectUrlForOrder()
Fix - Improve log messages for orderNeedsPayment check, old messages where confusing to merchants
Fix - Update VVV giftcard logo filename
Release Info
| Developer | davdebcom |
| Plugin | |
| Version | 5.0.2 |
| Comparing to | |
| See all releases | |
Code changes from version 5.0.1 to 5.0.2
- includes/mollie/wc/gateway/abstract.php +29 -66
- includes/mollie/wc/gateway/giftcard.php +0 -1
- includes/mollie/wc/gateway/klarnapaylater.php +1 -1
- includes/mollie/wc/gateway/klarnasliceit.php +1 -1
- includes/mollie/wc/helper/orderlines.php +24 -34
- includes/mollie/wc/payment/object.php +4 -0
- includes/mollie/wc/payment/order.php +10 -2
- includes/mollie/wc/payment/payment.php +65 -0
- includes/mollie/wc/plugin.php +1 -1
- mollie-payments-for-woocommerce.php +1 -1
- readme.txt +3 -2
|
@@ -1179,79 +1179,42 @@ abstract class Mollie_WC_Gateway_Abstract extends WC_Payment_Gateway
|
|
| 1179 |
return $this->get_return_url( $order );
|
| 1180 |
}
|
| 1181 |
|
| 1182 |
-
|
| 1183 |
-
|
| 1184 |
-
|
| 1185 |
-
|
| 1186 |
-
|
| 1187 |
-
|
| 1188 |
-
|
| 1189 |
-
|
| 1190 |
-
|
| 1191 |
-
|
| 1192 |
-
|
| 1193 |
-
|
| 1194 |
-
if (!$order)
|
| 1195 |
-
{
|
| 1196 |
-
Mollie_WC_Plugin::debug('process_refund - could not find order ' . $order_id);
|
| 1197 |
-
|
| 1198 |
-
return false;
|
| 1199 |
-
}
|
| 1200 |
-
|
| 1201 |
-
try
|
| 1202 |
-
{
|
| 1203 |
-
$payment_object = Mollie_WC_Plugin::getPaymentObject()->getActiveMolliePayment($order_id);
|
| 1204 |
-
|
| 1205 |
-
if (!$payment_object)
|
| 1206 |
-
{
|
| 1207 |
-
Mollie_WC_Plugin::debug('process_refund - could not find active Mollie payment for order ' . $order_id);
|
| 1208 |
-
|
| 1209 |
-
return false;
|
| 1210 |
-
}
|
| 1211 |
-
elseif (!$payment_object->isPaid())
|
| 1212 |
-
{
|
| 1213 |
-
Mollie_WC_Plugin::debug('process_refund - could not refund payment ' . $payment_object->id . ' (not paid). Order ' . $order_id);
|
| 1214 |
-
|
| 1215 |
-
return false;
|
| 1216 |
-
}
|
| 1217 |
-
|
| 1218 |
-
Mollie_WC_Plugin::debug('process_refund - create refund - payment: ' . $payment_object->id . ', order: ' . $order_id . ', amount: ' . Mollie_WC_Plugin::getDataHelper()->getOrderCurrency( $order ) . $amount . (!empty($reason) ? ', reason: ' . $reason : ''));
|
| 1219 |
|
| 1220 |
-
|
|
|
|
| 1221 |
|
| 1222 |
-
|
| 1223 |
-
|
| 1224 |
|
| 1225 |
-
|
| 1226 |
-
|
| 1227 |
-
|
| 1228 |
-
|
| 1229 |
-
|
| 1230 |
-
),
|
| 1231 |
-
'description' => $reason
|
| 1232 |
-
) );
|
| 1233 |
|
| 1234 |
-
|
|
|
|
|
|
|
|
|
|
| 1235 |
|
| 1236 |
-
|
|
|
|
| 1237 |
|
| 1238 |
-
|
| 1239 |
-
/* translators: Placeholder 1: currency, placeholder 2: refunded amount, placeholder 3: optional refund reason, placeholder 4: payment ID, placeholder 5: refund ID */
|
| 1240 |
-
__('Refunded %s%s%s - Payment: %s, Refund: %s', 'mollie-payments-for-woocommerce'),
|
| 1241 |
-
Mollie_WC_Plugin::getDataHelper()->getOrderCurrency( $order ),
|
| 1242 |
-
$amount,
|
| 1243 |
-
(!empty($reason) ? ' (reason: ' . $reason . ')' : ''),
|
| 1244 |
-
$refund->paymentId,
|
| 1245 |
-
$refund->id
|
| 1246 |
-
));
|
| 1247 |
|
| 1248 |
-
|
| 1249 |
-
}
|
| 1250 |
-
catch ( \Mollie\Api\Exceptions\ApiException $e )
|
| 1251 |
-
{
|
| 1252 |
-
return new WP_Error(1, $e->getMessage());
|
| 1253 |
-
}
|
| 1254 |
-
}
|
| 1255 |
|
| 1256 |
/**
|
| 1257 |
* Output for the order received page.
|
| 1179 |
return $this->get_return_url( $order );
|
| 1180 |
}
|
| 1181 |
|
| 1182 |
+
/**
|
| 1183 |
+
* Process a refund if supported
|
| 1184 |
+
*
|
| 1185 |
+
* @param int $order_id
|
| 1186 |
+
* @param float $amount
|
| 1187 |
+
* @param string $reason
|
| 1188 |
+
*
|
| 1189 |
+
* @return bool|wp_error True or false based on success, or a WP_Error object
|
| 1190 |
+
* @since WooCommerce 2.2
|
| 1191 |
+
*/
|
| 1192 |
+
public function process_refund( $order_id, $amount = null, $reason = '' ) {
|
| 1193 |
+
$order = Mollie_WC_Plugin::getDataHelper()->getWcOrder( $order_id );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1194 |
|
| 1195 |
+
if ( ! $order ) {
|
| 1196 |
+
Mollie_WC_Plugin::debug( __METHOD__ . ' - Could not find order ' . $order_id );
|
| 1197 |
|
| 1198 |
+
return false;
|
| 1199 |
+
}
|
| 1200 |
|
| 1201 |
+
if ( version_compare( WC_VERSION, '3.0', '<' ) ) {
|
| 1202 |
+
$payment = Mollie_WC_Plugin::getPaymentObject()->getActiveMolliePayment( $order->id );
|
| 1203 |
+
} else {
|
| 1204 |
+
$payment = Mollie_WC_Plugin::getPaymentObject()->getActiveMolliePayment( $order->get_id() );
|
| 1205 |
+
}
|
|
|
|
|
|
|
|
|
|
| 1206 |
|
| 1207 |
+
// Mollie payment not found or invalid gateway
|
| 1208 |
+
if ( ! $payment || $payment->method != $this->getMollieMethodId() ) {
|
| 1209 |
+
return false;
|
| 1210 |
+
}
|
| 1211 |
|
| 1212 |
+
// TODO David: Continue improving the refund process
|
| 1213 |
+
$payment_object = Mollie_WC_Plugin::getPaymentFactoryHelper()->getPaymentObject( $payment );
|
| 1214 |
|
| 1215 |
+
return $payment_object->refund( $order, $order_id, $amount, $reason );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1216 |
|
| 1217 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1218 |
|
| 1219 |
/**
|
| 1220 |
* Output for the order received page.
|
|
@@ -11,7 +11,6 @@ class Mollie_WC_Gateway_Giftcard extends Mollie_WC_Gateway_Abstract
|
|
| 11 |
{
|
| 12 |
$this->supports = array(
|
| 13 |
'products',
|
| 14 |
-
'refunds',
|
| 15 |
);
|
| 16 |
|
| 17 |
/* Has issuers dropdown */
|
| 11 |
{
|
| 12 |
$this->supports = array(
|
| 13 |
'products',
|
|
|
|
| 14 |
);
|
| 15 |
|
| 16 |
/* Has issuers dropdown */
|
|
@@ -11,7 +11,7 @@ class Mollie_WC_Gateway_KlarnaPayLater extends Mollie_WC_Gateway_Abstract
|
|
| 11 |
{
|
| 12 |
$this->supports = array(
|
| 13 |
'products',
|
| 14 |
-
'refunds',
|
| 15 |
);
|
| 16 |
|
| 17 |
parent::__construct();
|
| 11 |
{
|
| 12 |
$this->supports = array(
|
| 13 |
'products',
|
| 14 |
+
//'refunds', TODO David: Re-add support for refunds (via Order Refund API)
|
| 15 |
);
|
| 16 |
|
| 17 |
parent::__construct();
|
|
@@ -11,7 +11,7 @@ class Mollie_WC_Gateway_KlarnaSliceIt extends Mollie_WC_Gateway_Abstract
|
|
| 11 |
{
|
| 12 |
$this->supports = array(
|
| 13 |
'products',
|
| 14 |
-
'refunds',
|
| 15 |
);
|
| 16 |
|
| 17 |
parent::__construct();
|
| 11 |
{
|
| 12 |
$this->supports = array(
|
| 13 |
'products',
|
| 14 |
+
//'refunds', TODO David: Re-add support for refunds (via Order Refund API)
|
| 15 |
);
|
| 16 |
|
| 17 |
parent::__construct();
|
|
@@ -17,9 +17,8 @@ class Mollie_WC_Helper_OrderLines {
|
|
| 17 |
private $order;
|
| 18 |
|
| 19 |
/**
|
| 20 |
-
* WooCommerce
|
| 21 |
*
|
| 22 |
-
* @var WC_Order
|
| 23 |
*/
|
| 24 |
private $currency;
|
| 25 |
|
|
@@ -88,15 +87,15 @@ class Mollie_WC_Helper_OrderLines {
|
|
| 88 |
$this->currency = Mollie_WC_Plugin::getDataHelper()->getOrderCurrency( $this->order );
|
| 89 |
|
| 90 |
$mollie_order_item = array (
|
| 91 |
-
'sku'
|
| 92 |
-
'name'
|
| 93 |
-
'quantity'
|
| 94 |
-
'vatRate'
|
| 95 |
-
'unitPrice'
|
| 96 |
'currency' => $this->currency,
|
| 97 |
'value' => Mollie_WC_Plugin::getDataHelper()->formatCurrencyValue( $this->get_item_price( $cart_item ), $this->currency ),
|
| 98 |
),
|
| 99 |
-
'totalAmount'
|
| 100 |
'currency' => $this->currency,
|
| 101 |
'value' => Mollie_WC_Plugin::getDataHelper()->formatCurrencyValue( $this->get_item_total_amount( $cart_item ), $this->currency ),
|
| 102 |
),
|
|
@@ -184,22 +183,18 @@ class Mollie_WC_Helper_OrderLines {
|
|
| 184 |
// Add separate discount line item, but only if it's a smart coupon or country is US.
|
| 185 |
if ( 'smart_coupon' === $coupon->get_discount_type() || 'US' === $this->shop_country ) {
|
| 186 |
$discount = array (
|
| 187 |
-
'name'
|
| 188 |
-
'quantity'
|
| 189 |
-
'unitPrice'
|
| 190 |
'currency' => $this->currency,
|
| 191 |
'value' => Mollie_WC_Plugin::getDataHelper()->formatCurrencyValue( $coupon_amount, $this->currency ),
|
| 192 |
),
|
| 193 |
-
'vatRate'
|
| 194 |
-
'totalAmount'
|
| 195 |
'currency' => $this->currency,
|
| 196 |
'value' => Mollie_WC_Plugin::getDataHelper()->formatCurrencyValue( $coupon_amount, $this->currency ),
|
| 197 |
),
|
| 198 |
-
'
|
| 199 |
-
'currency' => $this->currency,
|
| 200 |
-
'value' => Mollie_WC_Plugin::getDataHelper()->formatCurrencyValue( 0, $this->currency ),
|
| 201 |
-
),
|
| 202 |
-
'vatAmount' => array (
|
| 203 |
'currency' => $this->currency,
|
| 204 |
'value' => Mollie_WC_Plugin::getDataHelper()->formatCurrencyValue( $coupon_tax_amount, $this->currency ),
|
| 205 |
),
|
|
@@ -242,23 +237,19 @@ class Mollie_WC_Helper_OrderLines {
|
|
| 242 |
}
|
| 243 |
|
| 244 |
$fee = array (
|
| 245 |
-
'type'
|
| 246 |
-
'name'
|
| 247 |
-
'quantity'
|
| 248 |
-
'
|
|
|
|
| 249 |
'currency' => $this->currency,
|
| 250 |
'value' => Mollie_WC_Plugin::getDataHelper()->formatCurrencyValue( $cart_fee_total, $this->currency ),
|
| 251 |
),
|
| 252 |
-
'
|
| 253 |
-
'currency' => $this->currency,
|
| 254 |
-
'value' => Mollie_WC_Plugin::getDataHelper()->formatCurrencyValue( $cart_fee_vat_rate, $this->currency ),
|
| 255 |
-
),
|
| 256 |
-
'totalAmount' => array (
|
| 257 |
'currency' => $this->currency,
|
| 258 |
'value' => Mollie_WC_Plugin::getDataHelper()->formatCurrencyValue( $cart_fee_total, $this->currency ),
|
| 259 |
),
|
| 260 |
-
'
|
| 261 |
-
'vatAmount' => array (
|
| 262 |
'currency' => $this->currency,
|
| 263 |
'value' => Mollie_WC_Plugin::getDataHelper()->formatCurrencyValue( $cart_fee_tax_amount, $this->currency ),
|
| 264 |
),
|
|
@@ -349,7 +340,7 @@ class Mollie_WC_Helper_OrderLines {
|
|
| 349 |
private function get_item_price( $cart_item ) {
|
| 350 |
|
| 351 |
$item_subtotal = $cart_item['line_subtotal'] + $cart_item['line_subtotal_tax'];
|
| 352 |
-
$item_price
|
| 353 |
|
| 354 |
return $item_price;
|
| 355 |
}
|
|
@@ -405,7 +396,6 @@ class Mollie_WC_Helper_OrderLines {
|
|
| 405 |
|
| 406 |
$item_discount_amount = $cart_item['line_subtotal'] + $cart_item['line_subtotal_tax'] - $cart_item['line_total'] - $cart_item['line_tax'];
|
| 407 |
|
| 408 |
-
|
| 409 |
} else {
|
| 410 |
$item_discount_amount = 0;
|
| 411 |
}
|
|
@@ -472,7 +462,7 @@ class Mollie_WC_Helper_OrderLines {
|
|
| 472 |
|
| 473 |
$shipping_amount = number_format( ( WC()->cart->shipping_total + WC()->cart->shipping_tax_total ), 2, '.', '' );
|
| 474 |
|
| 475 |
-
return $shipping_amount
|
| 476 |
}
|
| 477 |
|
| 478 |
/**
|
|
@@ -486,10 +476,10 @@ class Mollie_WC_Helper_OrderLines {
|
|
| 486 |
private function get_shipping_vat_rate() {
|
| 487 |
$shipping_vat_rate = 0;
|
| 488 |
if ( WC()->cart->shipping_tax_total > 0 ) {
|
| 489 |
-
$shipping_vat_rate = round( WC()->cart->shipping_tax_total / WC()->cart->shipping_total, 2 )*100;
|
| 490 |
}
|
| 491 |
|
| 492 |
-
return
|
| 493 |
}
|
| 494 |
|
| 495 |
/**
|
| 17 |
private $order;
|
| 18 |
|
| 19 |
/**
|
| 20 |
+
* WooCommerce currency.
|
| 21 |
*
|
|
|
|
| 22 |
*/
|
| 23 |
private $currency;
|
| 24 |
|
| 87 |
$this->currency = Mollie_WC_Plugin::getDataHelper()->getOrderCurrency( $this->order );
|
| 88 |
|
| 89 |
$mollie_order_item = array (
|
| 90 |
+
'sku' => $this->get_item_reference( $product ),
|
| 91 |
+
'name' => $this->get_item_name( $cart_item ),
|
| 92 |
+
'quantity' => $this->get_item_quantity( $cart_item ),
|
| 93 |
+
'vatRate' => $this->get_item_vatRate( $cart_item, $product ),
|
| 94 |
+
'unitPrice' => array (
|
| 95 |
'currency' => $this->currency,
|
| 96 |
'value' => Mollie_WC_Plugin::getDataHelper()->formatCurrencyValue( $this->get_item_price( $cart_item ), $this->currency ),
|
| 97 |
),
|
| 98 |
+
'totalAmount' => array (
|
| 99 |
'currency' => $this->currency,
|
| 100 |
'value' => Mollie_WC_Plugin::getDataHelper()->formatCurrencyValue( $this->get_item_total_amount( $cart_item ), $this->currency ),
|
| 101 |
),
|
| 183 |
// Add separate discount line item, but only if it's a smart coupon or country is US.
|
| 184 |
if ( 'smart_coupon' === $coupon->get_discount_type() || 'US' === $this->shop_country ) {
|
| 185 |
$discount = array (
|
| 186 |
+
'name' => $coupon_key,
|
| 187 |
+
'quantity' => 1,
|
| 188 |
+
'unitPrice' => array (
|
| 189 |
'currency' => $this->currency,
|
| 190 |
'value' => Mollie_WC_Plugin::getDataHelper()->formatCurrencyValue( $coupon_amount, $this->currency ),
|
| 191 |
),
|
| 192 |
+
'vatRate' => 0,
|
| 193 |
+
'totalAmount' => array (
|
| 194 |
'currency' => $this->currency,
|
| 195 |
'value' => Mollie_WC_Plugin::getDataHelper()->formatCurrencyValue( $coupon_amount, $this->currency ),
|
| 196 |
),
|
| 197 |
+
'vatAmount' => array (
|
|
|
|
|
|
|
|
|
|
|
|
|
| 198 |
'currency' => $this->currency,
|
| 199 |
'value' => Mollie_WC_Plugin::getDataHelper()->formatCurrencyValue( $coupon_tax_amount, $this->currency ),
|
| 200 |
),
|
| 237 |
}
|
| 238 |
|
| 239 |
$fee = array (
|
| 240 |
+
'type' => 'surcharge',
|
| 241 |
+
'name' => $cart_fee->name,
|
| 242 |
+
'quantity' => 1,
|
| 243 |
+
'vatRate' => Mollie_WC_Plugin::getDataHelper()->formatCurrencyValue( $cart_fee_vat_rate, $this->currency ),
|
| 244 |
+
'unitPrice' => array (
|
| 245 |
'currency' => $this->currency,
|
| 246 |
'value' => Mollie_WC_Plugin::getDataHelper()->formatCurrencyValue( $cart_fee_total, $this->currency ),
|
| 247 |
),
|
| 248 |
+
'totalAmount' => array (
|
|
|
|
|
|
|
|
|
|
|
|
|
| 249 |
'currency' => $this->currency,
|
| 250 |
'value' => Mollie_WC_Plugin::getDataHelper()->formatCurrencyValue( $cart_fee_total, $this->currency ),
|
| 251 |
),
|
| 252 |
+
'vatAmount' => array (
|
|
|
|
| 253 |
'currency' => $this->currency,
|
| 254 |
'value' => Mollie_WC_Plugin::getDataHelper()->formatCurrencyValue( $cart_fee_tax_amount, $this->currency ),
|
| 255 |
),
|
| 340 |
private function get_item_price( $cart_item ) {
|
| 341 |
|
| 342 |
$item_subtotal = $cart_item['line_subtotal'] + $cart_item['line_subtotal_tax'];
|
| 343 |
+
$item_price = $item_subtotal / $cart_item['quantity'];
|
| 344 |
|
| 345 |
return $item_price;
|
| 346 |
}
|
| 396 |
|
| 397 |
$item_discount_amount = $cart_item['line_subtotal'] + $cart_item['line_subtotal_tax'] - $cart_item['line_total'] - $cart_item['line_tax'];
|
| 398 |
|
|
|
|
| 399 |
} else {
|
| 400 |
$item_discount_amount = 0;
|
| 401 |
}
|
| 462 |
|
| 463 |
$shipping_amount = number_format( ( WC()->cart->shipping_total + WC()->cart->shipping_tax_total ), 2, '.', '' );
|
| 464 |
|
| 465 |
+
return $shipping_amount;
|
| 466 |
}
|
| 467 |
|
| 468 |
/**
|
| 476 |
private function get_shipping_vat_rate() {
|
| 477 |
$shipping_vat_rate = 0;
|
| 478 |
if ( WC()->cart->shipping_tax_total > 0 ) {
|
| 479 |
+
$shipping_vat_rate = round( WC()->cart->shipping_tax_total / WC()->cart->shipping_total, 2 ) * 100;
|
| 480 |
}
|
| 481 |
|
| 482 |
+
return $shipping_vat_rate;
|
| 483 |
}
|
| 484 |
|
| 485 |
/**
|
|
@@ -45,6 +45,10 @@ class Mollie_WC_Payment_Object {
|
|
| 45 |
public function getPaymentObjectPayment( $payment_id, $test_mode = false, $use_cache = true ) {
|
| 46 |
try {
|
| 47 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 48 |
$payment = Mollie_WC_Plugin::getApiHelper()->getApiClient( $test_mode )->payments->get( $payment_id );
|
| 49 |
|
| 50 |
return $payment;
|
| 45 |
public function getPaymentObjectPayment( $payment_id, $test_mode = false, $use_cache = true ) {
|
| 46 |
try {
|
| 47 |
|
| 48 |
+
// Is test mode enabled?
|
| 49 |
+
$settings_helper = Mollie_WC_Plugin::getSettingsHelper();
|
| 50 |
+
$test_mode = $settings_helper->isTestModeEnabled();
|
| 51 |
+
|
| 52 |
$payment = Mollie_WC_Plugin::getApiHelper()->getApiClient( $test_mode )->payments->get( $payment_id );
|
| 53 |
|
| 54 |
return $payment;
|
|
@@ -14,6 +14,11 @@ class Mollie_WC_Payment_Order extends Mollie_WC_Payment_Object {
|
|
| 14 |
|
| 15 |
public function getPaymentObject( $payment_id, $test_mode = false, $use_cache = true ) {
|
| 16 |
try {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 17 |
self::$payment = Mollie_WC_Plugin::getApiHelper()->getApiClient( $test_mode )->orders->get( $payment_id, [ "embed" => "payments" ] );
|
| 18 |
|
| 19 |
return parent::getPaymentObject( $payment_id, $test_mode = false, $use_cache = true );
|
|
@@ -150,9 +155,12 @@ class Mollie_WC_Payment_Order extends Mollie_WC_Payment_Object {
|
|
| 150 |
|
| 151 |
public function getMolliePaymentIdFromPaymentObject() {
|
| 152 |
|
| 153 |
-
|
|
|
|
|
|
|
|
|
|
| 154 |
|
| 155 |
-
return $
|
| 156 |
|
| 157 |
}
|
| 158 |
|
| 14 |
|
| 15 |
public function getPaymentObject( $payment_id, $test_mode = false, $use_cache = true ) {
|
| 16 |
try {
|
| 17 |
+
|
| 18 |
+
// Is test mode enabled?
|
| 19 |
+
$settings_helper = Mollie_WC_Plugin::getSettingsHelper();
|
| 20 |
+
$test_mode = $settings_helper->isTestModeEnabled();
|
| 21 |
+
|
| 22 |
self::$payment = Mollie_WC_Plugin::getApiHelper()->getApiClient( $test_mode )->orders->get( $payment_id, [ "embed" => "payments" ] );
|
| 23 |
|
| 24 |
return parent::getPaymentObject( $payment_id, $test_mode = false, $use_cache = true );
|
| 155 |
|
| 156 |
public function getMolliePaymentIdFromPaymentObject() {
|
| 157 |
|
| 158 |
+
// TODO David: Quick fix, there needs to be a better way to do this!
|
| 159 |
+
$payment = $this->getPaymentObject($this->data->id);
|
| 160 |
+
|
| 161 |
+
if ( isset( $payment->_embedded->payments{0}->id ) ) {
|
| 162 |
|
| 163 |
+
return $payment->_embedded->payments{0}->id;
|
| 164 |
|
| 165 |
}
|
| 166 |
|
|
@@ -9,6 +9,10 @@ class Mollie_WC_Payment_Payment extends Mollie_WC_Payment_Object {
|
|
| 9 |
public function getPaymentObject( $payment_id, $test_mode = false, $use_cache = true ) {
|
| 10 |
try {
|
| 11 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 12 |
self::$payment = Mollie_WC_Plugin::getApiHelper()->getApiClient( $test_mode )->payments->get( $payment_id );
|
| 13 |
|
| 14 |
return parent::getPaymentObject( $payment_id, $test_mode = false, $use_cache = true );
|
|
@@ -413,4 +417,65 @@ class Mollie_WC_Payment_Payment extends Mollie_WC_Payment_Object {
|
|
| 413 |
|
| 414 |
}
|
| 415 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 416 |
}
|
| 9 |
public function getPaymentObject( $payment_id, $test_mode = false, $use_cache = true ) {
|
| 10 |
try {
|
| 11 |
|
| 12 |
+
// Is test mode enabled?
|
| 13 |
+
$settings_helper = Mollie_WC_Plugin::getSettingsHelper();
|
| 14 |
+
$test_mode = $settings_helper->isTestModeEnabled();
|
| 15 |
+
|
| 16 |
self::$payment = Mollie_WC_Plugin::getApiHelper()->getApiClient( $test_mode )->payments->get( $payment_id );
|
| 17 |
|
| 18 |
return parent::getPaymentObject( $payment_id, $test_mode = false, $use_cache = true );
|
| 417 |
|
| 418 |
}
|
| 419 |
|
| 420 |
+
/**
|
| 421 |
+
* Process a refund if supported
|
| 422 |
+
* @param int $order_id
|
| 423 |
+
* @param float $amount
|
| 424 |
+
* @param string $reason
|
| 425 |
+
* @return bool|wp_error True or false based on success, or a WP_Error object
|
| 426 |
+
* @since WooCommerce 2.2
|
| 427 |
+
*/
|
| 428 |
+
public function refund( $order, $order_id, $amount = null, $reason = '' ) {
|
| 429 |
+
|
| 430 |
+
try {
|
| 431 |
+
$payment_object = Mollie_WC_Plugin::getPaymentObject()->getActiveMolliePayment( $order_id );
|
| 432 |
+
|
| 433 |
+
if ( ! $payment_object ) {
|
| 434 |
+
Mollie_WC_Plugin::debug( __METHOD__ . ' - Could not find active Mollie payment for order ' . $order_id );
|
| 435 |
+
|
| 436 |
+
return false;
|
| 437 |
+
} elseif ( ! $payment_object->isPaid() ) {
|
| 438 |
+
Mollie_WC_Plugin::debug( __METHOD__ . ' - Could not refund payment ' . $payment_object->id . ' (not paid). Order ' . $order_id );
|
| 439 |
+
|
| 440 |
+
return false;
|
| 441 |
+
}
|
| 442 |
+
|
| 443 |
+
Mollie_WC_Plugin::debug( __METHOD__ . ' - Create refund - payment: ' . $payment_object->id . ', order: ' . $order_id . ', amount: ' . Mollie_WC_Plugin::getDataHelper()->getOrderCurrency( $order ) . $amount . ( ! empty( $reason ) ? ', reason: ' . $reason : '' ) );
|
| 444 |
+
|
| 445 |
+
do_action( Mollie_WC_Plugin::PLUGIN_ID . '_create_refund', $payment_object, $order );
|
| 446 |
+
|
| 447 |
+
// Is test mode enabled?
|
| 448 |
+
$test_mode = Mollie_WC_Plugin::getSettingsHelper()->isTestModeEnabled();
|
| 449 |
+
|
| 450 |
+
// Send refund to Mollie
|
| 451 |
+
$refund = Mollie_WC_Plugin::getApiHelper()->getApiClient( $test_mode )->payments->refund( $payment_object, array (
|
| 452 |
+
'amount' => array (
|
| 453 |
+
'currency' => Mollie_WC_Plugin::getDataHelper()->getOrderCurrency( $order ),
|
| 454 |
+
'value' => Mollie_WC_Plugin::getDataHelper()->formatCurrencyValue( $amount, Mollie_WC_Plugin::getDataHelper()->getOrderCurrency( $order ) )
|
| 455 |
+
),
|
| 456 |
+
'description' => $reason
|
| 457 |
+
) );
|
| 458 |
+
|
| 459 |
+
Mollie_WC_Plugin::debug( __METHOD__ . ' - Refund created - refund: ' . $refund->id . ', payment: ' . $payment_object->id . ', order: ' . $order_id . ', amount: ' . Mollie_WC_Plugin::getDataHelper()->getOrderCurrency( $order ) . $amount . ( ! empty( $reason ) ? ', reason: ' . $reason : '' ) );
|
| 460 |
+
|
| 461 |
+
do_action( Mollie_WC_Plugin::PLUGIN_ID . '_refund_created', $refund, $order );
|
| 462 |
+
|
| 463 |
+
$order->add_order_note( sprintf(
|
| 464 |
+
/* translators: Placeholder 1: currency, placeholder 2: refunded amount, placeholder 3: optional refund reason, placeholder 4: payment ID, placeholder 5: refund ID */
|
| 465 |
+
__( 'Refunded %s%s%s - Payment: %s, Refund: %s', 'mollie-payments-for-woocommerce' ),
|
| 466 |
+
Mollie_WC_Plugin::getDataHelper()->getOrderCurrency( $order ),
|
| 467 |
+
$amount,
|
| 468 |
+
( ! empty( $reason ) ? ' (reason: ' . $reason . ')' : '' ),
|
| 469 |
+
$refund->paymentId,
|
| 470 |
+
$refund->id
|
| 471 |
+
) );
|
| 472 |
+
|
| 473 |
+
|
| 474 |
+
return true;
|
| 475 |
+
}
|
| 476 |
+
catch ( \Mollie\Api\Exceptions\ApiException $e ) {
|
| 477 |
+
return new WP_Error( 1, $e->getMessage() );
|
| 478 |
+
}
|
| 479 |
+
}
|
| 480 |
+
|
| 481 |
}
|
|
@@ -7,7 +7,7 @@ class Mollie_WC_Plugin
|
|
| 7 |
{
|
| 8 |
const PLUGIN_ID = 'mollie-payments-for-woocommerce';
|
| 9 |
const PLUGIN_TITLE = 'Mollie Payments for WooCommerce';
|
| 10 |
-
const PLUGIN_VERSION = '5.0.
|
| 11 |
|
| 12 |
const DB_VERSION = '1.0';
|
| 13 |
const DB_VERSION_PARAM_NAME = 'mollie-db-version';
|
| 7 |
{
|
| 8 |
const PLUGIN_ID = 'mollie-payments-for-woocommerce';
|
| 9 |
const PLUGIN_TITLE = 'Mollie Payments for WooCommerce';
|
| 10 |
+
const PLUGIN_VERSION = '5.0.2';
|
| 11 |
|
| 12 |
const DB_VERSION = '1.0';
|
| 13 |
const DB_VERSION_PARAM_NAME = 'mollie-db-version';
|
|
@@ -3,7 +3,7 @@
|
|
| 3 |
* Plugin Name: Mollie Payments for WooCommerce
|
| 4 |
* Plugin URI: https://www.mollie.com
|
| 5 |
* Description: Accept payments in WooCommerce with the official Mollie plugin
|
| 6 |
-
* Version: 5.0.
|
| 7 |
* Author: Mollie
|
| 8 |
* Author URI: https://www.mollie.com
|
| 9 |
* Requires at least: 3.8
|
| 3 |
* Plugin Name: Mollie Payments for WooCommerce
|
| 4 |
* Plugin URI: https://www.mollie.com
|
| 5 |
* Description: Accept payments in WooCommerce with the official Mollie plugin
|
| 6 |
+
* Version: 5.0.2
|
| 7 |
* Author: Mollie
|
| 8 |
* Author URI: https://www.mollie.com
|
| 9 |
* Requires at least: 3.8
|
|
@@ -3,7 +3,7 @@ Contributors: daanvm, davdebcom, l.vangunst, ndijkstra, robin-mollie
|
|
| 3 |
Tags: mollie, payments, woocommerce, payment gateway, e-commerce, credit card, ideal, sofort, bancontact, bitcoin, direct debit, subscriptions
|
| 4 |
Requires at least: 3.8
|
| 5 |
Tested up to: 4.9
|
| 6 |
-
Stable tag: 5.0.
|
| 7 |
Requires PHP: 5.6
|
| 8 |
License: GPLv2 or later
|
| 9 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
|
@@ -181,7 +181,7 @@ Automatic updates should work like a charm; as always though, ensure you backup
|
|
| 181 |
|
| 182 |
== Changelog ==
|
| 183 |
|
| 184 |
-
= 5.0.
|
| 185 |
|
| 186 |
IMPORTANT
|
| 187 |
This version requires PHP 5.6 or higher. If you are using an older PHP version, please read this article: [PHP & Mollie API v2](https://github.com/mollie/WooCommerce/wiki/PHP-&-Mollie-API-v2).
|
|
@@ -191,6 +191,7 @@ This version requires PHP 5.6 or higher. If you are using an older PHP version,
|
|
| 191 |
* New - Tested with and updated for WooCommerce 3.5 beta compatibility
|
| 192 |
* New - EPS, GiroPay: implemented support for SEPA first payments (recurring payments)
|
| 193 |
|
|
|
|
| 194 |
* Fix - Fixed issue with Guzzle and PhpScoper
|
| 195 |
|
| 196 |
* Fix - WooCommerce emails: make sure "Payment completed by..." message is only shown once per email
|
| 3 |
Tags: mollie, payments, woocommerce, payment gateway, e-commerce, credit card, ideal, sofort, bancontact, bitcoin, direct debit, subscriptions
|
| 4 |
Requires at least: 3.8
|
| 5 |
Tested up to: 4.9
|
| 6 |
+
Stable tag: 5.0.2
|
| 7 |
Requires PHP: 5.6
|
| 8 |
License: GPLv2 or later
|
| 9 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
| 181 |
|
| 182 |
== Changelog ==
|
| 183 |
|
| 184 |
+
= 5.0.2 - 11-10-2018 =
|
| 185 |
|
| 186 |
IMPORTANT
|
| 187 |
This version requires PHP 5.6 or higher. If you are using an older PHP version, please read this article: [PHP & Mollie API v2](https://github.com/mollie/WooCommerce/wiki/PHP-&-Mollie-API-v2).
|
| 191 |
* New - Tested with and updated for WooCommerce 3.5 beta compatibility
|
| 192 |
* New - EPS, GiroPay: implemented support for SEPA first payments (recurring payments)
|
| 193 |
|
| 194 |
+
* Fix - Fixed for "Uncaught Error: Call to a member function isOpen() on null"
|
| 195 |
* Fix - Fixed issue with Guzzle and PhpScoper
|
| 196 |
|
| 197 |
* Fix - WooCommerce emails: make sure "Payment completed by..." message is only shown once per email
|
