Version Description
Our plugin is now compatible with WooCommerce Subscriptions for recurring payments.
Download this release
Release Info
| Developer | ndijkstra |
| Plugin | |
| Version | 2.5.2 |
| Comparing to | |
| See all releases | |
Code changes from version 2.4.1 to 2.5.2
- includes/mollie-api-php/README.mdown +2 -2
- includes/mollie-api-php/composer.json +0 -1
- includes/mollie-api-php/examples/19-update-profile.php +35 -0
- includes/mollie-api-php/examples/20-list-apikeys.php +31 -0
- includes/mollie-api-php/examples/21-reset-apikey.php +26 -0
- includes/mollie-api-php/examples/orders/.gitignore +1 -0
- includes/mollie-api-php/src/Mollie/API/Client.php +21 -1
- includes/mollie-api-php/src/Mollie/API/Object/Payment.php +15 -5
- includes/mollie-api-php/src/Mollie/API/Object/Profile/APIKey.php +73 -0
- includes/mollie-api-php/src/Mollie/API/Resource/Base.php +10 -0
- includes/mollie-api-php/src/Mollie/API/Resource/Customers/Mandates.php +2 -0
- includes/mollie-api-php/src/Mollie/API/Resource/Customers/Subscriptions.php +2 -0
- includes/mollie-api-php/src/Mollie/API/Resource/Payments/Refunds.php +4 -2
- includes/mollie-api-php/src/Mollie/API/Resource/Profiles.php +25 -1
- includes/mollie-api-php/src/Mollie/API/Resource/Profiles/APIKeys.php +63 -0
- includes/mollie-api-php/src/Mollie/API/Resource/Refunds.php +2 -2
- includes/mollie-api-php/src/Mollie/API/Resource/Settlements.php +1 -1
- includes/mollie-api-php/src/Mollie/API/cacert.pem +262 -89
- includes/mollie/wc/gateway/abstract.php +141 -67
- includes/mollie/wc/gateway/abstractseparecurring.php +207 -0
- includes/mollie/wc/gateway/abstractsubscription.php +495 -0
- includes/mollie/wc/gateway/belfius.php +1 -1
- includes/mollie/wc/gateway/creditcard.php +2 -2
- includes/mollie/wc/gateway/ideal.php +1 -1
- includes/mollie/wc/gateway/mistercash.php +1 -1
- includes/mollie/wc/gateway/sofort.php +1 -1
- includes/mollie/wc/helper/data.php +85 -12
- includes/mollie/wc/helper/settings.php +18 -1
- includes/mollie/wc/plugin.php +95 -1
- mollie-payments-for-woocommerce.php +6 -2
- readme.txt +13 -5
includes/mollie-api-php/README.mdown
CHANGED
|
@@ -24,11 +24,11 @@ To use the Mollie API client, the following things are required:
|
|
| 24 |
|
| 25 |
By far the easiest way to install the Mollie API client is to require it with [Composer](http://getcomposer.org/doc/00-intro.md).
|
| 26 |
|
| 27 |
-
$ composer require mollie/mollie-api-php:1.
|
| 28 |
|
| 29 |
{
|
| 30 |
"require": {
|
| 31 |
-
"mollie/mollie-api-php": "1.
|
| 32 |
}
|
| 33 |
}
|
| 34 |
|
| 24 |
|
| 25 |
By far the easiest way to install the Mollie API client is to require it with [Composer](http://getcomposer.org/doc/00-intro.md).
|
| 26 |
|
| 27 |
+
$ composer require mollie/mollie-api-php:1.9.*
|
| 28 |
|
| 29 |
{
|
| 30 |
"require": {
|
| 31 |
+
"mollie/mollie-api-php": "1.9.*"
|
| 32 |
}
|
| 33 |
}
|
| 34 |
|
includes/mollie-api-php/composer.json
CHANGED
|
@@ -1,7 +1,6 @@
|
|
| 1 |
{
|
| 2 |
"name": "mollie/mollie-api-php",
|
| 3 |
"description": "Mollie API client library for PHP",
|
| 4 |
-
"version": "1.7.1",
|
| 5 |
"homepage": "https://github.com/mollie/mollie-api-php",
|
| 6 |
"license": "BSD-2-Clause",
|
| 7 |
"authors": [
|
| 1 |
{
|
| 2 |
"name": "mollie/mollie-api-php",
|
| 3 |
"description": "Mollie API client library for PHP",
|
|
|
|
| 4 |
"homepage": "https://github.com/mollie/mollie-api-php",
|
| 5 |
"license": "BSD-2-Clause",
|
| 6 |
"authors": [
|
includes/mollie-api-php/examples/19-update-profile.php
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
/*
|
| 3 |
+
* Example 19 - Updating an existing profile via the Mollie API.
|
| 4 |
+
*/
|
| 5 |
+
|
| 6 |
+
try
|
| 7 |
+
{
|
| 8 |
+
/*
|
| 9 |
+
* Initialize the Mollie API library with your API key or OAuth access token.
|
| 10 |
+
*/
|
| 11 |
+
include "initialize_with_oauth.php";
|
| 12 |
+
|
| 13 |
+
/*
|
| 14 |
+
* Retrieve an existing profile by his profileId
|
| 15 |
+
*/
|
| 16 |
+
$profile = $mollie->profiles->get("pfl_eA4MSz7Bvy");
|
| 17 |
+
|
| 18 |
+
/**
|
| 19 |
+
* Profile fields that can be updated.
|
| 20 |
+
*
|
| 21 |
+
* @See https://www.mollie.com/en/docs/reference/profiles/update
|
| 22 |
+
*/
|
| 23 |
+
$profile->name = "Mollie B.V.";
|
| 24 |
+
$profile->website = 'www.mollie.com';
|
| 25 |
+
$profile->email = 'info@mollie.com';
|
| 26 |
+
$profile->phone = '0612345670';
|
| 27 |
+
$profile->categoryCode = 5399;
|
| 28 |
+
$profile = $mollie->profiles->update($profile);
|
| 29 |
+
|
| 30 |
+
echo "<p>Profile updated: " . htmlspecialchars($profile->name) . "</p>";
|
| 31 |
+
}
|
| 32 |
+
catch (Mollie_API_Exception $e)
|
| 33 |
+
{
|
| 34 |
+
echo "<p>API call failed: " . htmlspecialchars($e->getMessage()) . "</p>";
|
| 35 |
+
}
|
includes/mollie-api-php/examples/20-list-apikeys.php
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
/*
|
| 3 |
+
* Example 20 - How to get the API keys for a given profile
|
| 4 |
+
*/
|
| 5 |
+
|
| 6 |
+
try
|
| 7 |
+
{
|
| 8 |
+
/*
|
| 9 |
+
* Initialize the Mollie API library with your OAuth access token.
|
| 10 |
+
*/
|
| 11 |
+
include "initialize_with_oauth.php";
|
| 12 |
+
|
| 13 |
+
/*
|
| 14 |
+
* Retrieve an existing profile by his profileId
|
| 15 |
+
*/
|
| 16 |
+
$profile = $mollie->profiles->get("pfl_eB5MZz7Cvy");
|
| 17 |
+
|
| 18 |
+
/*
|
| 19 |
+
* Get the API keys for this profile.
|
| 20 |
+
*/
|
| 21 |
+
$api_keys = $mollie->profiles_apikeys->with($profile)->all();
|
| 22 |
+
|
| 23 |
+
foreach ($api_keys as $api_key)
|
| 24 |
+
{
|
| 25 |
+
echo htmlspecialchars($api_key->key) . "<br />";
|
| 26 |
+
}
|
| 27 |
+
}
|
| 28 |
+
catch (Mollie_API_Exception $e)
|
| 29 |
+
{
|
| 30 |
+
echo "API call failed: " . htmlspecialchars($e->getMessage());
|
| 31 |
+
}
|
includes/mollie-api-php/examples/21-reset-apikey.php
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
/*
|
| 3 |
+
* Example 21 - Reset a API key
|
| 4 |
+
*/
|
| 5 |
+
|
| 6 |
+
try
|
| 7 |
+
{
|
| 8 |
+
/*
|
| 9 |
+
* Initialize the Mollie API library with a OAuth access token.
|
| 10 |
+
*/
|
| 11 |
+
include "initialize_with_oauth.php";
|
| 12 |
+
|
| 13 |
+
/*
|
| 14 |
+
* Retrieve an existing profile by his profileId
|
| 15 |
+
*/
|
| 16 |
+
$profile = $mollie->profiles->get("pfl_eA4MSz7Bvy");
|
| 17 |
+
|
| 18 |
+
/*
|
| 19 |
+
* Reset the live API key
|
| 20 |
+
*/
|
| 21 |
+
$new_live_api_key = $mollie->profiles_apikeys->with($profile)->reset("live");
|
| 22 |
+
}
|
| 23 |
+
catch (Mollie_API_Exception $e)
|
| 24 |
+
{
|
| 25 |
+
echo "API call failed: " . htmlspecialchars($e->getMessage());
|
| 26 |
+
}
|
includes/mollie-api-php/examples/orders/.gitignore
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
| 1 |
+
*.txt
|
includes/mollie-api-php/src/Mollie/API/Client.php
CHANGED
|
@@ -34,7 +34,7 @@ class Mollie_API_Client
|
|
| 34 |
/**
|
| 35 |
* Version of our client.
|
| 36 |
*/
|
| 37 |
-
const CLIENT_VERSION = "1.
|
| 38 |
|
| 39 |
/**
|
| 40 |
* Endpoint of the remote API.
|
|
@@ -50,6 +50,8 @@ class Mollie_API_Client
|
|
| 50 |
const HTTP_POST = "POST";
|
| 51 |
const HTTP_DELETE = "DELETE";
|
| 52 |
|
|
|
|
|
|
|
| 53 |
/**
|
| 54 |
* @var string
|
| 55 |
*/
|
|
@@ -176,6 +178,11 @@ class Mollie_API_Client
|
|
| 176 |
*/
|
| 177 |
protected $pem_path;
|
| 178 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 179 |
/**
|
| 180 |
* @throws Mollie_API_Exception_IncompatiblePlatform
|
| 181 |
*/
|
|
@@ -198,6 +205,7 @@ class Mollie_API_Client
|
|
| 198 |
$this->organizations = new Mollie_API_Resource_Organizations($this);
|
| 199 |
$this->refunds = new Mollie_API_Resource_Refunds($this);
|
| 200 |
$this->profiles = new Mollie_API_Resource_Profiles($this);
|
|
|
|
| 201 |
$this->settlements = new Mollie_API_Resource_Settlements($this);
|
| 202 |
|
| 203 |
$curl_version = curl_version();
|
|
@@ -392,6 +400,8 @@ class Mollie_API_Client
|
|
| 392 |
$body = curl_exec($this->ch);
|
| 393 |
}
|
| 394 |
|
|
|
|
|
|
|
| 395 |
if (curl_errno($this->ch))
|
| 396 |
{
|
| 397 |
$message = "Unable to communicate with Mollie (".curl_errno($this->ch)."): " . curl_error($this->ch) . ".";
|
|
@@ -440,4 +450,14 @@ class Mollie_API_Client
|
|
| 440 |
|
| 441 |
return $checker;
|
| 442 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 443 |
}
|
| 34 |
/**
|
| 35 |
* Version of our client.
|
| 36 |
*/
|
| 37 |
+
const CLIENT_VERSION = "1.9.1";
|
| 38 |
|
| 39 |
/**
|
| 40 |
* Endpoint of the remote API.
|
| 50 |
const HTTP_POST = "POST";
|
| 51 |
const HTTP_DELETE = "DELETE";
|
| 52 |
|
| 53 |
+
const HTTP_STATUS_NO_CONTENT = 204;
|
| 54 |
+
|
| 55 |
/**
|
| 56 |
* @var string
|
| 57 |
*/
|
| 178 |
*/
|
| 179 |
protected $pem_path;
|
| 180 |
|
| 181 |
+
/**
|
| 182 |
+
* @var int
|
| 183 |
+
*/
|
| 184 |
+
protected $last_http_response_status_code;
|
| 185 |
+
|
| 186 |
/**
|
| 187 |
* @throws Mollie_API_Exception_IncompatiblePlatform
|
| 188 |
*/
|
| 205 |
$this->organizations = new Mollie_API_Resource_Organizations($this);
|
| 206 |
$this->refunds = new Mollie_API_Resource_Refunds($this);
|
| 207 |
$this->profiles = new Mollie_API_Resource_Profiles($this);
|
| 208 |
+
$this->profiles_apikeys = new Mollie_API_Resource_Profiles_APIKeys($this);
|
| 209 |
$this->settlements = new Mollie_API_Resource_Settlements($this);
|
| 210 |
|
| 211 |
$curl_version = curl_version();
|
| 400 |
$body = curl_exec($this->ch);
|
| 401 |
}
|
| 402 |
|
| 403 |
+
$this->last_http_response_status_code = (int) curl_getinfo($this->ch, CURLINFO_HTTP_CODE);
|
| 404 |
+
|
| 405 |
if (curl_errno($this->ch))
|
| 406 |
{
|
| 407 |
$message = "Unable to communicate with Mollie (".curl_errno($this->ch)."): " . curl_error($this->ch) . ".";
|
| 450 |
|
| 451 |
return $checker;
|
| 452 |
}
|
| 453 |
+
|
| 454 |
+
/**
|
| 455 |
+
* @deprecated Do not use this method, it should only be used internally
|
| 456 |
+
*
|
| 457 |
+
* @return int
|
| 458 |
+
*/
|
| 459 |
+
public function getLastHttpResponseStatusCode ()
|
| 460 |
+
{
|
| 461 |
+
return $this->last_http_response_status_code;
|
| 462 |
+
}
|
| 463 |
}
|
includes/mollie-api-php/src/Mollie/API/Object/Payment.php
CHANGED
|
@@ -258,7 +258,6 @@ class Mollie_API_Object_Payment
|
|
| 258 |
*/
|
| 259 |
public $links;
|
| 260 |
|
| 261 |
-
|
| 262 |
/**
|
| 263 |
* Is this payment cancelled?
|
| 264 |
*
|
|
@@ -269,7 +268,6 @@ class Mollie_API_Object_Payment
|
|
| 269 |
return $this->status == self::STATUS_CANCELLED;
|
| 270 |
}
|
| 271 |
|
| 272 |
-
|
| 273 |
/**
|
| 274 |
* Is this payment expired?
|
| 275 |
*
|
|
@@ -280,7 +278,6 @@ class Mollie_API_Object_Payment
|
|
| 280 |
return $this->status == self::STATUS_EXPIRED;
|
| 281 |
}
|
| 282 |
|
| 283 |
-
|
| 284 |
/**
|
| 285 |
* Is this payment still open / ongoing?
|
| 286 |
*
|
|
@@ -311,6 +308,19 @@ class Mollie_API_Object_Payment
|
|
| 311 |
return !empty($this->paidDatetime);
|
| 312 |
}
|
| 313 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 314 |
/**
|
| 315 |
* Is this payment (partially) refunded?
|
| 316 |
*
|
|
@@ -406,7 +416,7 @@ class Mollie_API_Object_Payment
|
|
| 406 |
return floatval($this->amountRefunded);
|
| 407 |
}
|
| 408 |
|
| 409 |
-
return 0;
|
| 410 |
}
|
| 411 |
|
| 412 |
/**
|
|
@@ -422,6 +432,6 @@ class Mollie_API_Object_Payment
|
|
| 422 |
return floatval($this->amountRemaining);
|
| 423 |
}
|
| 424 |
|
| 425 |
-
return 0;
|
| 426 |
}
|
| 427 |
}
|
| 258 |
*/
|
| 259 |
public $links;
|
| 260 |
|
|
|
|
| 261 |
/**
|
| 262 |
* Is this payment cancelled?
|
| 263 |
*
|
| 268 |
return $this->status == self::STATUS_CANCELLED;
|
| 269 |
}
|
| 270 |
|
|
|
|
| 271 |
/**
|
| 272 |
* Is this payment expired?
|
| 273 |
*
|
| 278 |
return $this->status == self::STATUS_EXPIRED;
|
| 279 |
}
|
| 280 |
|
|
|
|
| 281 |
/**
|
| 282 |
* Is this payment still open / ongoing?
|
| 283 |
*
|
| 308 |
return !empty($this->paidDatetime);
|
| 309 |
}
|
| 310 |
|
| 311 |
+
/**
|
| 312 |
+
* Has the money been transferred to the bank account of the merchant?
|
| 313 |
+
*
|
| 314 |
+
* Note: When a payment is refunded or charged back, the status 'refunded'/'charged_back' will
|
| 315 |
+
* overwrite the 'paidout' status.
|
| 316 |
+
*
|
| 317 |
+
* @return bool
|
| 318 |
+
*/
|
| 319 |
+
public function isPaidOut ()
|
| 320 |
+
{
|
| 321 |
+
return $this->status == self::STATUS_PAIDOUT;
|
| 322 |
+
}
|
| 323 |
+
|
| 324 |
/**
|
| 325 |
* Is this payment (partially) refunded?
|
| 326 |
*
|
| 416 |
return floatval($this->amountRefunded);
|
| 417 |
}
|
| 418 |
|
| 419 |
+
return 0.0;
|
| 420 |
}
|
| 421 |
|
| 422 |
/**
|
| 432 |
return floatval($this->amountRemaining);
|
| 433 |
}
|
| 434 |
|
| 435 |
+
return 0.0;
|
| 436 |
}
|
| 437 |
}
|
includes/mollie-api-php/src/Mollie/API/Object/Profile/APIKey.php
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
/**
|
| 3 |
+
* Copyright (c) 2013, Mollie B.V.
|
| 4 |
+
* All rights reserved.
|
| 5 |
+
*
|
| 6 |
+
* Redistribution and use in source and binary forms, with or without
|
| 7 |
+
* modification, are permitted provided that the following conditions are met:
|
| 8 |
+
*
|
| 9 |
+
* - Redistributions of source code must retain the above copyright notice,
|
| 10 |
+
* this list of conditions and the following disclaimer.
|
| 11 |
+
* - Redistributions in binary form must reproduce the above copyright
|
| 12 |
+
* notice, this list of conditions and the following disclaimer in the
|
| 13 |
+
* documentation and/or other materials provided with the distribution.
|
| 14 |
+
*
|
| 15 |
+
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND ANY
|
| 16 |
+
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
| 17 |
+
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
| 18 |
+
* DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY
|
| 19 |
+
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
| 20 |
+
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
| 21 |
+
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
| 22 |
+
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
| 23 |
+
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
| 24 |
+
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
|
| 25 |
+
* DAMAGE.
|
| 26 |
+
*
|
| 27 |
+
* @license Berkeley Software Distribution License (BSD-License 2) http://www.opensource.org/licenses/bsd-license.php
|
| 28 |
+
* @author Mollie B.V. <info@mollie.com>
|
| 29 |
+
* @copyright Mollie B.V.
|
| 30 |
+
* @link https://www.mollie.com
|
| 31 |
+
*/
|
| 32 |
+
class Mollie_API_Object_Profile_APIKey
|
| 33 |
+
{
|
| 34 |
+
const TEST_KEY = "test";
|
| 35 |
+
const LIVE_KEY = "live";
|
| 36 |
+
|
| 37 |
+
/**
|
| 38 |
+
* The mode ('live' or 'test') functions as the ID of the API key.
|
| 39 |
+
*
|
| 40 |
+
* @var string
|
| 41 |
+
*/
|
| 42 |
+
public $id;
|
| 43 |
+
|
| 44 |
+
/**
|
| 45 |
+
* The API key (live_... or test_...)
|
| 46 |
+
*
|
| 47 |
+
* @var string
|
| 48 |
+
*/
|
| 49 |
+
public $key;
|
| 50 |
+
|
| 51 |
+
/**
|
| 52 |
+
* The datetime at which the API key was created in ISO-8601 format.
|
| 53 |
+
*
|
| 54 |
+
* @var string
|
| 55 |
+
*/
|
| 56 |
+
public $createdDatetime;
|
| 57 |
+
|
| 58 |
+
/**
|
| 59 |
+
* @return bool
|
| 60 |
+
*/
|
| 61 |
+
public function isLiveKey ()
|
| 62 |
+
{
|
| 63 |
+
return $this->id == self::LIVE_KEY;
|
| 64 |
+
}
|
| 65 |
+
|
| 66 |
+
/**
|
| 67 |
+
* @return bool
|
| 68 |
+
*/
|
| 69 |
+
public function isTestKey ()
|
| 70 |
+
{
|
| 71 |
+
return $this->id == self::TEST_KEY;
|
| 72 |
+
}
|
| 73 |
+
}
|
includes/mollie-api-php/src/Mollie/API/Resource/Base.php
CHANGED
|
@@ -152,6 +152,11 @@ abstract class Mollie_API_Resource_Base
|
|
| 152 |
"{$rest_resource}/{$id}"
|
| 153 |
);
|
| 154 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 155 |
return $this->copy($result, $this->getResourceObject());
|
| 156 |
}
|
| 157 |
|
|
@@ -326,6 +331,11 @@ abstract class Mollie_API_Resource_Base
|
|
| 326 |
{
|
| 327 |
$body = $this->api->performHttpCall($http_method, $api_method, $http_body);
|
| 328 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 329 |
if (empty($body))
|
| 330 |
{
|
| 331 |
throw new Mollie_API_Exception("Unable to decode Mollie response: '{$body}'.");
|
| 152 |
"{$rest_resource}/{$id}"
|
| 153 |
);
|
| 154 |
|
| 155 |
+
if ($result === NULL)
|
| 156 |
+
{
|
| 157 |
+
return NULL;
|
| 158 |
+
}
|
| 159 |
+
|
| 160 |
return $this->copy($result, $this->getResourceObject());
|
| 161 |
}
|
| 162 |
|
| 331 |
{
|
| 332 |
$body = $this->api->performHttpCall($http_method, $api_method, $http_body);
|
| 333 |
|
| 334 |
+
if ($this->api->getLastHttpResponseStatusCode() == Mollie_API_Client::HTTP_STATUS_NO_CONTENT)
|
| 335 |
+
{
|
| 336 |
+
return NULL;
|
| 337 |
+
}
|
| 338 |
+
|
| 339 |
if (empty($body))
|
| 340 |
{
|
| 341 |
throw new Mollie_API_Exception("Unable to decode Mollie response: '{$body}'.");
|
includes/mollie-api-php/src/Mollie/API/Resource/Customers/Mandates.php
CHANGED
|
@@ -31,6 +31,8 @@
|
|
| 31 |
*
|
| 32 |
* @method Mollie_API_Object_Customer_Mandate[]|Mollie_API_Object_List all($offset = 0, $limit = 0, array $filters = array())
|
| 33 |
* @method Mollie_API_Object_Customer_Mandate get($mandate_id, array $filters = array())
|
|
|
|
|
|
|
| 34 |
*/
|
| 35 |
class Mollie_API_Resource_Customers_Mandates extends Mollie_API_Resource_Base
|
| 36 |
{
|
| 31 |
*
|
| 32 |
* @method Mollie_API_Object_Customer_Mandate[]|Mollie_API_Object_List all($offset = 0, $limit = 0, array $filters = array())
|
| 33 |
* @method Mollie_API_Object_Customer_Mandate get($mandate_id, array $filters = array())
|
| 34 |
+
* @method Mollie_API_Object_Customer_Mandate create(array $data, array $filters = array())
|
| 35 |
+
* @method Mollie_API_Object_Customer_Mandate delete($mandate_id)
|
| 36 |
*/
|
| 37 |
class Mollie_API_Resource_Customers_Mandates extends Mollie_API_Resource_Base
|
| 38 |
{
|
includes/mollie-api-php/src/Mollie/API/Resource/Customers/Subscriptions.php
CHANGED
|
@@ -31,6 +31,8 @@
|
|
| 31 |
*
|
| 32 |
* @method Mollie_API_Object_Customer_Subscription[]|Mollie_API_Object_List all($offset = 0, $limit = 0, array $filters = array())
|
| 33 |
* @method Mollie_API_Object_Customer_Subscription get($subscription_id, array $filters = array())
|
|
|
|
|
|
|
| 34 |
*/
|
| 35 |
class Mollie_API_Resource_Customers_Subscriptions extends Mollie_API_Resource_Base
|
| 36 |
{
|
| 31 |
*
|
| 32 |
* @method Mollie_API_Object_Customer_Subscription[]|Mollie_API_Object_List all($offset = 0, $limit = 0, array $filters = array())
|
| 33 |
* @method Mollie_API_Object_Customer_Subscription get($subscription_id, array $filters = array())
|
| 34 |
+
* @method Mollie_API_Object_Customer_Subscription create(array $data = array(), array $filters = array())
|
| 35 |
+
* @method Mollie_API_Object_Customer_Subscription delete($subscription_id)
|
| 36 |
*/
|
| 37 |
class Mollie_API_Resource_Customers_Subscriptions extends Mollie_API_Resource_Base
|
| 38 |
{
|
includes/mollie-api-php/src/Mollie/API/Resource/Payments/Refunds.php
CHANGED
|
@@ -30,7 +30,9 @@
|
|
| 30 |
* @link https://www.mollie.com
|
| 31 |
*
|
| 32 |
* @method Mollie_API_Object_Payment_Refund[]|Mollie_API_Object_List all($offset = 0, $limit = 0, array $filters = array())
|
| 33 |
-
* @method Mollie_API_Object_Payment_Refund get($
|
|
|
|
|
|
|
| 34 |
*/
|
| 35 |
class Mollie_API_Resource_Payments_Refunds extends Mollie_API_Resource_Base
|
| 36 |
{
|
|
@@ -40,7 +42,7 @@ class Mollie_API_Resource_Payments_Refunds extends Mollie_API_Resource_Base
|
|
| 40 |
protected $resource_path = "payments_refunds";
|
| 41 |
|
| 42 |
/**
|
| 43 |
-
* @return
|
| 44 |
*/
|
| 45 |
protected function getResourceObject ()
|
| 46 |
{
|
| 30 |
* @link https://www.mollie.com
|
| 31 |
*
|
| 32 |
* @method Mollie_API_Object_Payment_Refund[]|Mollie_API_Object_List all($offset = 0, $limit = 0, array $filters = array())
|
| 33 |
+
* @method Mollie_API_Object_Payment_Refund get($refund_id, array $filters = array())
|
| 34 |
+
* @method Mollie_API_Object_Payment_Refund create(array $data = array(), array $filters = array())
|
| 35 |
+
* @method Mollie_API_Object_Payment_Refund delete($refund_id)
|
| 36 |
*/
|
| 37 |
class Mollie_API_Resource_Payments_Refunds extends Mollie_API_Resource_Base
|
| 38 |
{
|
| 42 |
protected $resource_path = "payments_refunds";
|
| 43 |
|
| 44 |
/**
|
| 45 |
+
* @return Mollie_API_Object_Payment_Refund
|
| 46 |
*/
|
| 47 |
protected function getResourceObject ()
|
| 48 |
{
|
includes/mollie-api-php/src/Mollie/API/Resource/Profiles.php
CHANGED
|
@@ -30,7 +30,9 @@
|
|
| 30 |
* @link https://www.mollie.com
|
| 31 |
*
|
| 32 |
* @method Mollie_API_Object_Profile[]|Mollie_API_Object_List all($offset = 0, $limit = 0, array $filters = array())
|
| 33 |
-
* @method Mollie_API_Object_Profile get($
|
|
|
|
|
|
|
| 34 |
*/
|
| 35 |
class Mollie_API_Resource_Profiles extends Mollie_API_Resource_Base
|
| 36 |
{
|
|
@@ -41,4 +43,26 @@ class Mollie_API_Resource_Profiles extends Mollie_API_Resource_Base
|
|
| 41 |
{
|
| 42 |
return new Mollie_API_Object_Profile;
|
| 43 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 44 |
}
|
| 30 |
* @link https://www.mollie.com
|
| 31 |
*
|
| 32 |
* @method Mollie_API_Object_Profile[]|Mollie_API_Object_List all($offset = 0, $limit = 0, array $filters = array())
|
| 33 |
+
* @method Mollie_API_Object_Profile get($profile_id, array $filters = array())
|
| 34 |
+
* @method Mollie_API_Object_Profile create(array $data = array(), array $filters = array())
|
| 35 |
+
* @method Mollie_API_Object_Profile delete($profile_id0)
|
| 36 |
*/
|
| 37 |
class Mollie_API_Resource_Profiles extends Mollie_API_Resource_Base
|
| 38 |
{
|
| 43 |
{
|
| 44 |
return new Mollie_API_Object_Profile;
|
| 45 |
}
|
| 46 |
+
|
| 47 |
+
/**
|
| 48 |
+
* @param Mollie_API_Object_Profile $profile
|
| 49 |
+
*
|
| 50 |
+
* @return Mollie_API_Object_Profile
|
| 51 |
+
*/
|
| 52 |
+
public function update (Mollie_API_Object_Profile $profile)
|
| 53 |
+
{
|
| 54 |
+
$body = json_encode(array(
|
| 55 |
+
"name" => $profile->name,
|
| 56 |
+
"website" => $profile->website,
|
| 57 |
+
"email" => $profile->email,
|
| 58 |
+
"phone" => $profile->phone,
|
| 59 |
+
"categoryCode" => $profile->categoryCode,
|
| 60 |
+
"mode" => $profile->mode
|
| 61 |
+
));
|
| 62 |
+
|
| 63 |
+
/** @var Mollie_API_Object_Profile $updated_profile */
|
| 64 |
+
$updated_profile = $this->rest_update($this->getResourcePath(), $profile->id, $body);
|
| 65 |
+
|
| 66 |
+
return $updated_profile;
|
| 67 |
+
}
|
| 68 |
}
|
includes/mollie-api-php/src/Mollie/API/Resource/Profiles/APIKeys.php
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
/**
|
| 3 |
+
* Copyright (c) 2016, Mollie B.V.
|
| 4 |
+
* All rights reserved.
|
| 5 |
+
*
|
| 6 |
+
* Redistribution and use in source and binary forms, with or without
|
| 7 |
+
* modification, are permitted provided that the following conditions are met:
|
| 8 |
+
*
|
| 9 |
+
* - Redistributions of source code must retain the above copyright notice,
|
| 10 |
+
* this list of conditions and the following disclaimer.
|
| 11 |
+
* - Redistributions in binary form must reproduce the above copyright
|
| 12 |
+
* notice, this list of conditions and the following disclaimer in the
|
| 13 |
+
* documentation and/or other materials provided with the distribution.
|
| 14 |
+
*
|
| 15 |
+
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND ANY
|
| 16 |
+
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
| 17 |
+
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
| 18 |
+
* DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY
|
| 19 |
+
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
| 20 |
+
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
| 21 |
+
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
| 22 |
+
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
| 23 |
+
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
| 24 |
+
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
|
| 25 |
+
* DAMAGE.
|
| 26 |
+
*
|
| 27 |
+
* @license Berkeley Software Distribution License (BSD-License 2) http://www.opensource.org/licenses/bsd-license.php
|
| 28 |
+
* @author Mollie B.V. <info@mollie.com>
|
| 29 |
+
* @copyright Mollie B.V.
|
| 30 |
+
* @link https://www.mollie.com
|
| 31 |
+
*
|
| 32 |
+
* @method Mollie_API_Object_Profile_APIKey[]|Mollie_API_Object_List all($offset = 0, $limit = 0, array $filters = array())
|
| 33 |
+
* @method Mollie_API_Object_Profile_APIKey get($mode, array $filters = array())
|
| 34 |
+
*/
|
| 35 |
+
class Mollie_API_Resource_Profiles_APIKeys extends Mollie_API_Resource_Base
|
| 36 |
+
{
|
| 37 |
+
/**
|
| 38 |
+
* @var string
|
| 39 |
+
*/
|
| 40 |
+
protected $resource_path = "profiles_apikeys";
|
| 41 |
+
|
| 42 |
+
/**
|
| 43 |
+
* @return Mollie_API_Object_Profile_APIKey
|
| 44 |
+
*/
|
| 45 |
+
protected function getResourceObject ()
|
| 46 |
+
{
|
| 47 |
+
return new Mollie_API_Object_Profile_APIKey;
|
| 48 |
+
}
|
| 49 |
+
|
| 50 |
+
/**
|
| 51 |
+
* @param string $mode
|
| 52 |
+
*
|
| 53 |
+
* @return Mollie_API_Object_Profile_APIKey
|
| 54 |
+
*/
|
| 55 |
+
public function reset ($mode)
|
| 56 |
+
{
|
| 57 |
+
/** @var Mollie_API_Object_Profile_APIKey $updated_api_key */
|
| 58 |
+
$updated_api_key = $this->rest_update($this->getResourcePath(), $mode, '');
|
| 59 |
+
|
| 60 |
+
return $updated_api_key;
|
| 61 |
+
}
|
| 62 |
+
|
| 63 |
+
}
|
includes/mollie-api-php/src/Mollie/API/Resource/Refunds.php
CHANGED
|
@@ -30,7 +30,7 @@
|
|
| 30 |
* @link https://www.mollie.com
|
| 31 |
*
|
| 32 |
* @method Mollie_API_Object_Payment_Refund[]|Mollie_API_Object_List all($offset = 0, $limit = 0, array $filters = array())
|
| 33 |
-
* @method Mollie_API_Object_Payment_Refund get($
|
| 34 |
*/
|
| 35 |
class Mollie_API_Resource_Refunds extends Mollie_API_Resource_Base
|
| 36 |
{
|
|
@@ -40,7 +40,7 @@ class Mollie_API_Resource_Refunds extends Mollie_API_Resource_Base
|
|
| 40 |
protected $resource_path = "refunds";
|
| 41 |
|
| 42 |
/**
|
| 43 |
-
* @return
|
| 44 |
*/
|
| 45 |
protected function getResourceObject ()
|
| 46 |
{
|
| 30 |
* @link https://www.mollie.com
|
| 31 |
*
|
| 32 |
* @method Mollie_API_Object_Payment_Refund[]|Mollie_API_Object_List all($offset = 0, $limit = 0, array $filters = array())
|
| 33 |
+
* @method Mollie_API_Object_Payment_Refund get($refund_id, array $filters = array())
|
| 34 |
*/
|
| 35 |
class Mollie_API_Resource_Refunds extends Mollie_API_Resource_Base
|
| 36 |
{
|
| 40 |
protected $resource_path = "refunds";
|
| 41 |
|
| 42 |
/**
|
| 43 |
+
* @return Mollie_API_Object_Payment_Refund
|
| 44 |
*/
|
| 45 |
protected function getResourceObject ()
|
| 46 |
{
|
includes/mollie-api-php/src/Mollie/API/Resource/Settlements.php
CHANGED
|
@@ -30,7 +30,7 @@
|
|
| 30 |
* @link https://www.mollie.com
|
| 31 |
*
|
| 32 |
* @method Mollie_API_Object_Settlement[]|Mollie_API_Object_List all($offset = 0, $limit = 0, array $filters = array())
|
| 33 |
-
* @method Mollie_API_Object_Settlement get($
|
| 34 |
*/
|
| 35 |
class Mollie_API_Resource_Settlements extends Mollie_API_Resource_Base
|
| 36 |
{
|
| 30 |
* @link https://www.mollie.com
|
| 31 |
*
|
| 32 |
* @method Mollie_API_Object_Settlement[]|Mollie_API_Object_List all($offset = 0, $limit = 0, array $filters = array())
|
| 33 |
+
* @method Mollie_API_Object_Settlement get($settlement_id, array $filters = array())
|
| 34 |
*/
|
| 35 |
class Mollie_API_Resource_Settlements extends Mollie_API_Resource_Base
|
| 36 |
{
|
includes/mollie-api-php/src/Mollie/API/cacert.pem
CHANGED
|
@@ -1,20 +1,20 @@
|
|
| 1 |
##
|
| 2 |
## Bundle of CA Root Certificates
|
| 3 |
##
|
| 4 |
-
## Certificate data from Mozilla as of: Wed
|
| 5 |
##
|
| 6 |
## This is a bundle of X.509 certificates of public Certificate Authorities
|
| 7 |
## (CA). These were automatically extracted from Mozilla's root certificates
|
| 8 |
## file (certdata.txt). This file can be found in the mozilla source tree:
|
| 9 |
-
##
|
| 10 |
##
|
| 11 |
## It contains the certificates in PEM format and therefore
|
| 12 |
## can be directly used with curl / libcurl / php_curl, or with
|
| 13 |
## an Apache+mod_ssl webserver for SSL client authentication.
|
| 14 |
## Just configure this file as the SSLCACertificateFile.
|
| 15 |
##
|
| 16 |
-
## Conversion done with mk-ca-bundle.pl version 1.
|
| 17 |
-
##
|
| 18 |
##
|
| 19 |
|
| 20 |
|
|
@@ -629,28 +629,6 @@ EtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLH
|
|
| 629 |
llpwrN9M
|
| 630 |
-----END CERTIFICATE-----
|
| 631 |
|
| 632 |
-
Staat der Nederlanden Root CA
|
| 633 |
-
=============================
|
| 634 |
-
-----BEGIN CERTIFICATE-----
|
| 635 |
-
MIIDujCCAqKgAwIBAgIEAJiWijANBgkqhkiG9w0BAQUFADBVMQswCQYDVQQGEwJOTDEeMBwGA1UE
|
| 636 |
-
ChMVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSYwJAYDVQQDEx1TdGFhdCBkZXIgTmVkZXJsYW5kZW4g
|
| 637 |
-
Um9vdCBDQTAeFw0wMjEyMTcwOTIzNDlaFw0xNTEyMTYwOTE1MzhaMFUxCzAJBgNVBAYTAk5MMR4w
|
| 638 |
-
HAYDVQQKExVTdGFhdCBkZXIgTmVkZXJsYW5kZW4xJjAkBgNVBAMTHVN0YWF0IGRlciBOZWRlcmxh
|
| 639 |
-
bmRlbiBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmNK1URF6gaYUmHFt
|
| 640 |
-
vsznExvWJw56s2oYHLZhWtVhCb/ekBPHZ+7d89rFDBKeNVU+LCeIQGv33N0iYfXCxw719tV2U02P
|
| 641 |
-
jLwYdjeFnejKScfST5gTCaI+Ioicf9byEGW07l8Y1Rfj+MX94p2i71MOhXeiD+EwR+4A5zN9RGca
|
| 642 |
-
C1Hoi6CeUJhoNFIfLm0B8mBF8jHrqTFoKbt6QZ7GGX+UtFE5A3+y3qcym7RHjm+0Sq7lr7HcsBth
|
| 643 |
-
vJly3uSJt3omXdozSVtSnA71iq3DuD3oBmrC1SoLbHuEvVYFy4ZlkuxEK7COudxwC0barbxjiDn6
|
| 644 |
-
22r+I/q85Ej0ZytqERAhSQIDAQABo4GRMIGOMAwGA1UdEwQFMAMBAf8wTwYDVR0gBEgwRjBEBgRV
|
| 645 |
-
HSAAMDwwOgYIKwYBBQUHAgEWLmh0dHA6Ly93d3cucGtpb3ZlcmhlaWQubmwvcG9saWNpZXMvcm9v
|
| 646 |
-
dC1wb2xpY3kwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSofeu8Y6R0E3QA7Jbg0zTBLL9s+DAN
|
| 647 |
-
BgkqhkiG9w0BAQUFAAOCAQEABYSHVXQ2YcG70dTGFagTtJ+k/rvuFbQvBgwp8qiSpGEN/KtcCFtR
|
| 648 |
-
EytNwiphyPgJWPwtArI5fZlmgb9uXJVFIGzmeafR2Bwp/MIgJ1HI8XxdNGdphREwxgDS1/PTfLbw
|
| 649 |
-
MVcoEoJz6TMvplW0C5GUR5z6u3pCMuiufi3IvKwUv9kP2Vv8wfl6leF9fpb8cbDCTMjfRTTJzg3y
|
| 650 |
-
nGQI0DvDKcWy7ZAEwbEpkcUwb8GpcjPM/l0WFywRaed+/sWDCN+83CI6LiBpIzlWYGeQiy52OfsR
|
| 651 |
-
iJf2fL1LuCAWZwWN4jvBcj+UlTfHXbme2JOhF4//DGYVwSR8MnwDHTuhWEUykw==
|
| 652 |
-
-----END CERTIFICATE-----
|
| 653 |
-
|
| 654 |
UTN USERFirst Hardware Root CA
|
| 655 |
==============================
|
| 656 |
-----BEGIN CERTIFICATE-----
|
|
@@ -731,41 +709,6 @@ IBHNfTIzSJRUTN3cecQwn+uOuFW114hcxWokPbLTBQNRxgfvzBRydD1ucs4YKIxKoHflCStFREes
|
|
| 731 |
t2d/AYoFWpO+ocH/+OcOZ6RHSXZddZAa9SaP8A==
|
| 732 |
-----END CERTIFICATE-----
|
| 733 |
|
| 734 |
-
NetLock Notary (Class A) Root
|
| 735 |
-
=============================
|
| 736 |
-
-----BEGIN CERTIFICATE-----
|
| 737 |
-
MIIGfTCCBWWgAwIBAgICAQMwDQYJKoZIhvcNAQEEBQAwga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQI
|
| 738 |
-
EwdIdW5nYXJ5MREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6
|
| 739 |
-
dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9j
|
| 740 |
-
ayBLb3pqZWd5em9pIChDbGFzcyBBKSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNDIzMTQ0N1oX
|
| 741 |
-
DTE5MDIxOTIzMTQ0N1owga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQIEwdIdW5nYXJ5MREwDwYDVQQH
|
| 742 |
-
EwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6dG9uc2FnaSBLZnQuMRowGAYD
|
| 743 |
-
VQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9jayBLb3pqZWd5em9pIChDbGFz
|
| 744 |
-
cyBBKSBUYW51c2l0dmFueWtpYWRvMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvHSM
|
| 745 |
-
D7tM9DceqQWC2ObhbHDqeLVu0ThEDaiDzl3S1tWBxdRL51uUcCbbO51qTGL3cfNk1mE7PetzozfZ
|
| 746 |
-
z+qMkjvN9wfcZnSX9EUi3fRc4L9t875lM+QVOr/bmJBVOMTtplVjC7B4BPTjbsE/jvxReB+SnoPC
|
| 747 |
-
/tmwqcm8WgD/qaiYdPv2LD4VOQ22BFWoDpggQrOxJa1+mm9dU7GrDPzr4PN6s6iz/0b2Y6LYOph7
|
| 748 |
-
tqyF/7AlT3Rj5xMHpQqPBffAZG9+pyeAlt7ULoZgx2srXnN7F+eRP2QM2EsiNCubMvJIH5+hCoR6
|
| 749 |
-
4sKtlz2O1cH5VqNQ6ca0+pii7pXmKgOM3wIDAQABo4ICnzCCApswDgYDVR0PAQH/BAQDAgAGMBIG
|
| 750 |
-
A1UdEwEB/wQIMAYBAf8CAQQwEQYJYIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaC
|
| 751 |
-
Ak1GSUdZRUxFTSEgRXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pv
|
| 752 |
-
bGdhbHRhdGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQu
|
| 753 |
-
IEEgaGl0ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2Vn
|
| 754 |
-
LWJpenRvc2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0
|
| 755 |
-
ZXRlbGUgYXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFz
|
| 756 |
-
IGxlaXJhc2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBh
|
| 757 |
-
IGh0dHBzOi8vd3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVu
|
| 758 |
-
b3J6ZXNAbmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1YW5jZSBh
|
| 759 |
-
bmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3QgdG8gdGhlIE5ldExvY2sg
|
| 760 |
-
Q1BTIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFp
|
| 761 |
-
bCBhdCBjcHNAbmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUAA4IBAQBIJEb3ulZv+sgoA0BO5TE5
|
| 762 |
-
ayZrU3/b39/zcT0mwBQOxmd7I6gMc90Bu8bKbjc5VdXHjFYgDigKDtIqpLBJUsY4B/6+CgmM0ZjP
|
| 763 |
-
ytoUMaFP0jn8DxEsQ8Pdq5PHVT5HfBgaANzze9jyf1JsIPQLX2lS9O74silg6+NJMSEN1rUQQeJB
|
| 764 |
-
CWziGppWS3cC9qCbmieH6FUpccKQn0V4GuEVZD3QDtigdp+uxdAu6tYPVuxkf1qbFFgBJ34TUMdr
|
| 765 |
-
KuZoPL9coAob4Q566eKAw+np9v1sEZ7Q5SgnK1QyQhSCdeZK8CtmdWOMovsEPoMOmzbwGOQmIMOM
|
| 766 |
-
8CgHrTwXZoi1/baI
|
| 767 |
-
-----END CERTIFICATE-----
|
| 768 |
-
|
| 769 |
XRamp Global CA Root
|
| 770 |
====================
|
| 771 |
-----BEGIN CERTIFICATE-----
|
|
@@ -1821,7 +1764,7 @@ AJw9SDkjOVgaFRJZap7v1VmyHVIsmXHNxynfGyphe3HR3vPA5Q06Sqotp9iGKt0uEA==
|
|
| 1821 |
-----END CERTIFICATE-----
|
| 1822 |
|
| 1823 |
NetLock Arany (Class Gold) FÅ‘tanúsÃtvány
|
| 1824 |
-
|
| 1825 |
-----BEGIN CERTIFICATE-----
|
| 1826 |
MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQGEwJIVTERMA8G
|
| 1827 |
A1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3MDUGA1UECwwuVGFuw7pzw610
|
|
@@ -1876,30 +1819,6 @@ IPVVYpbtbZNQvOSqeK3Zywplh6ZmwcSBo3c6WB4L7oOLnR7SUqTMHW+wmG2UMbX4cQrcufx9MmDm
|
|
| 1876 |
66+KAQ==
|
| 1877 |
-----END CERTIFICATE-----
|
| 1878 |
|
| 1879 |
-
CA Disig
|
| 1880 |
-
========
|
| 1881 |
-
-----BEGIN CERTIFICATE-----
|
| 1882 |
-
MIIEDzCCAvegAwIBAgIBATANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQGEwJTSzETMBEGA1UEBxMK
|
| 1883 |
-
QnJhdGlzbGF2YTETMBEGA1UEChMKRGlzaWcgYS5zLjERMA8GA1UEAxMIQ0EgRGlzaWcwHhcNMDYw
|
| 1884 |
-
MzIyMDEzOTM0WhcNMTYwMzIyMDEzOTM0WjBKMQswCQYDVQQGEwJTSzETMBEGA1UEBxMKQnJhdGlz
|
| 1885 |
-
bGF2YTETMBEGA1UEChMKRGlzaWcgYS5zLjERMA8GA1UEAxMIQ0EgRGlzaWcwggEiMA0GCSqGSIb3
|
| 1886 |
-
DQEBAQUAA4IBDwAwggEKAoIBAQCS9jHBfYj9mQGp2HvycXXxMcbzdWb6UShGhJd4NLxs/LxFWYgm
|
| 1887 |
-
GErENx+hSkS943EE9UQX4j/8SFhvXJ56CbpRNyIjZkMhsDxkovhqFQ4/61HhVKndBpnXmjxUizkD
|
| 1888 |
-
Pw/Fzsbrg3ICqB9x8y34dQjbYkzo+s7552oftms1grrijxaSfQUMbEYDXcDtab86wYqg6I7ZuUUo
|
| 1889 |
-
hwjstMoVvoLdtUSLLa2GDGhibYVW8qwUYzrG0ZmsNHhWS8+2rT+MitcE5eN4TPWGqvWP+j1scaMt
|
| 1890 |
-
ymfraHtuM6kMgiioTGohQBUgDCZbg8KpFhXAJIJdKxatymP2dACw30PEEGBWZ2NFAgMBAAGjgf8w
|
| 1891 |
-
gfwwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUjbJJaJ1yCCW5wCf1UJNWSEZx+Y8wDgYDVR0P
|
| 1892 |
-
AQH/BAQDAgEGMDYGA1UdEQQvMC2BE2Nhb3BlcmF0b3JAZGlzaWcuc2uGFmh0dHA6Ly93d3cuZGlz
|
| 1893 |
-
aWcuc2svY2EwZgYDVR0fBF8wXTAtoCugKYYnaHR0cDovL3d3dy5kaXNpZy5zay9jYS9jcmwvY2Ff
|
| 1894 |
-
ZGlzaWcuY3JsMCygKqAohiZodHRwOi8vY2EuZGlzaWcuc2svY2EvY3JsL2NhX2Rpc2lnLmNybDAa
|
| 1895 |
-
BgNVHSAEEzARMA8GDSuBHpGT5goAAAABAQEwDQYJKoZIhvcNAQEFBQADggEBAF00dGFMrzvY/59t
|
| 1896 |
-
WDYcPQuBDRIrRhCA/ec8J9B6yKm2fnQwM6M6int0wHl5QpNt/7EpFIKrIYwvF/k/Ji/1WcbvgAa3
|
| 1897 |
-
mkkp7M5+cTxqEEHA9tOasnxakZzArFvITV734VP/Q3f8nktnbNfzg9Gg4H8l37iYC5oyOGwwoPP/
|
| 1898 |
-
CBUz91BKez6jPiCp3C9WgArtQVCwyfTssuMmRAAOb54GvCKWU3BlxFAKRmukLyeBEicTXxChds6K
|
| 1899 |
-
ezfqwzlhA5WYOudsiCUI/HloDYd9Yvi0X/vF2Ey9WLw/Q1vUHgFNPGO+I++MzVpQuGhU+QqZMxEA
|
| 1900 |
-
4Z7CRneC9VkGjCFMhwnN5ag=
|
| 1901 |
-
-----END CERTIFICATE-----
|
| 1902 |
-
|
| 1903 |
Juur-SK
|
| 1904 |
=======
|
| 1905 |
-----BEGIN CERTIFICATE-----
|
|
@@ -2361,7 +2280,7 @@ Zt3hrvJBW8qYVoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI
|
|
| 2361 |
-----END CERTIFICATE-----
|
| 2362 |
|
| 2363 |
Certinomis - Autorité Racine
|
| 2364 |
-
|
| 2365 |
-----BEGIN CERTIFICATE-----
|
| 2366 |
MIIFnDCCA4SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJGUjETMBEGA1UEChMK
|
| 2367 |
Q2VydGlub21pczEXMBUGA1UECxMOMDAwMiA0MzM5OTg5MDMxJjAkBgNVBAMMHUNlcnRpbm9taXMg
|
|
@@ -3756,7 +3675,7 @@ ekD6819kR5LLU7m7Wc5P/dAVUwHY3+vZ5nbv0CO7O6l5s9UCKc2Jo5YPSjXnTkLAdc0Hz+Ys63su
|
|
| 3756 |
-----END CERTIFICATE-----
|
| 3757 |
|
| 3758 |
TÜRKTRUST Elektronik Sertifika Hizmet Sağlayıcısı H5
|
| 3759 |
-
|
| 3760 |
-----BEGIN CERTIFICATE-----
|
| 3761 |
MIIEJzCCAw+gAwIBAgIHAI4X/iQggTANBgkqhkiG9w0BAQsFADCBsTELMAkGA1UEBhMCVFIxDzAN
|
| 3762 |
BgNVBAcMBkFua2FyYTFNMEsGA1UECgxEVMOcUktUUlVTVCBCaWxnaSDEsGxldGnFn2ltIHZlIEJp
|
|
@@ -3780,7 +3699,7 @@ B59OTj+RdPsnnRHM3eaxynFNExc5JsUpISuTKWqW+qtB4Uu2NQvAmxU=
|
|
| 3780 |
-----END CERTIFICATE-----
|
| 3781 |
|
| 3782 |
TÜRKTRUST Elektronik Sertifika Hizmet Sağlayıcısı H6
|
| 3783 |
-
|
| 3784 |
-----BEGIN CERTIFICATE-----
|
| 3785 |
MIIEJjCCAw6gAwIBAgIGfaHyZeyKMA0GCSqGSIb3DQEBCwUAMIGxMQswCQYDVQQGEwJUUjEPMA0G
|
| 3786 |
A1UEBwwGQW5rYXJhMU0wSwYDVQQKDERUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmls
|
|
@@ -3891,3 +3810,257 @@ MluARZPzA7gwCgYIKoZIzj0EAwMDaAAwZQIxAOSkhLCB1T2wdKyUpOgOPQB0TKGXa/kNUTyh2Tv0
|
|
| 3891 |
Daupn75OcsqF1NnstTJFGG+rrQIwfcf3aWMvoeGY7xMQ0Xk/0f7qO3/eVvSQsRUR2LIiFdAvwyYu
|
| 3892 |
a/GRspBl9JrmkO5K
|
| 3893 |
-----END CERTIFICATE-----
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
##
|
| 2 |
## Bundle of CA Root Certificates
|
| 3 |
##
|
| 4 |
+
## Certificate data from Mozilla as of: Wed Nov 2 04:12:05 2016 GMT
|
| 5 |
##
|
| 6 |
## This is a bundle of X.509 certificates of public Certificate Authorities
|
| 7 |
## (CA). These were automatically extracted from Mozilla's root certificates
|
| 8 |
## file (certdata.txt). This file can be found in the mozilla source tree:
|
| 9 |
+
## https://hg.mozilla.org/releases/mozilla-release/raw-file/default/security/nss/lib/ckfw/builtins/certdata.txt
|
| 10 |
##
|
| 11 |
## It contains the certificates in PEM format and therefore
|
| 12 |
## can be directly used with curl / libcurl / php_curl, or with
|
| 13 |
## an Apache+mod_ssl webserver for SSL client authentication.
|
| 14 |
## Just configure this file as the SSLCACertificateFile.
|
| 15 |
##
|
| 16 |
+
## Conversion done with mk-ca-bundle.pl version 1.27.
|
| 17 |
+
## SHA256: 17e2a90c8a5cfd6a675b3475d3d467e1ab1fe0d5397e907b08206182389caa08
|
| 18 |
##
|
| 19 |
|
| 20 |
|
| 629 |
llpwrN9M
|
| 630 |
-----END CERTIFICATE-----
|
| 631 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 632 |
UTN USERFirst Hardware Root CA
|
| 633 |
==============================
|
| 634 |
-----BEGIN CERTIFICATE-----
|
| 709 |
t2d/AYoFWpO+ocH/+OcOZ6RHSXZddZAa9SaP8A==
|
| 710 |
-----END CERTIFICATE-----
|
| 711 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 712 |
XRamp Global CA Root
|
| 713 |
====================
|
| 714 |
-----BEGIN CERTIFICATE-----
|
| 1764 |
-----END CERTIFICATE-----
|
| 1765 |
|
| 1766 |
NetLock Arany (Class Gold) FÅ‘tanúsÃtvány
|
| 1767 |
+
========================================
|
| 1768 |
-----BEGIN CERTIFICATE-----
|
| 1769 |
MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQGEwJIVTERMA8G
|
| 1770 |
A1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3MDUGA1UECwwuVGFuw7pzw610
|
| 1819 |
66+KAQ==
|
| 1820 |
-----END CERTIFICATE-----
|
| 1821 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1822 |
Juur-SK
|
| 1823 |
=======
|
| 1824 |
-----BEGIN CERTIFICATE-----
|
| 2280 |
-----END CERTIFICATE-----
|
| 2281 |
|
| 2282 |
Certinomis - Autorité Racine
|
| 2283 |
+
============================
|
| 2284 |
-----BEGIN CERTIFICATE-----
|
| 2285 |
MIIFnDCCA4SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJGUjETMBEGA1UEChMK
|
| 2286 |
Q2VydGlub21pczEXMBUGA1UECxMOMDAwMiA0MzM5OTg5MDMxJjAkBgNVBAMMHUNlcnRpbm9taXMg
|
| 3675 |
-----END CERTIFICATE-----
|
| 3676 |
|
| 3677 |
TÜRKTRUST Elektronik Sertifika Hizmet Sağlayıcısı H5
|
| 3678 |
+
====================================================
|
| 3679 |
-----BEGIN CERTIFICATE-----
|
| 3680 |
MIIEJzCCAw+gAwIBAgIHAI4X/iQggTANBgkqhkiG9w0BAQsFADCBsTELMAkGA1UEBhMCVFIxDzAN
|
| 3681 |
BgNVBAcMBkFua2FyYTFNMEsGA1UECgxEVMOcUktUUlVTVCBCaWxnaSDEsGxldGnFn2ltIHZlIEJp
|
| 3699 |
-----END CERTIFICATE-----
|
| 3700 |
|
| 3701 |
TÜRKTRUST Elektronik Sertifika Hizmet Sağlayıcısı H6
|
| 3702 |
+
====================================================
|
| 3703 |
-----BEGIN CERTIFICATE-----
|
| 3704 |
MIIEJjCCAw6gAwIBAgIGfaHyZeyKMA0GCSqGSIb3DQEBCwUAMIGxMQswCQYDVQQGEwJUUjEPMA0G
|
| 3705 |
A1UEBwwGQW5rYXJhMU0wSwYDVQQKDERUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmls
|
| 3810 |
Daupn75OcsqF1NnstTJFGG+rrQIwfcf3aWMvoeGY7xMQ0Xk/0f7qO3/eVvSQsRUR2LIiFdAvwyYu
|
| 3811 |
a/GRspBl9JrmkO5K
|
| 3812 |
-----END CERTIFICATE-----
|
| 3813 |
+
|
| 3814 |
+
SZAFIR ROOT CA2
|
| 3815 |
+
===============
|
| 3816 |
+
-----BEGIN CERTIFICATE-----
|
| 3817 |
+
MIIDcjCCAlqgAwIBAgIUPopdB+xV0jLVt+O2XwHrLdzk1uQwDQYJKoZIhvcNAQELBQAwUTELMAkG
|
| 3818 |
+
A1UEBhMCUEwxKDAmBgNVBAoMH0tyYWpvd2EgSXpiYSBSb3psaWN6ZW5pb3dhIFMuQS4xGDAWBgNV
|
| 3819 |
+
BAMMD1NaQUZJUiBST09UIENBMjAeFw0xNTEwMTkwNzQzMzBaFw0zNTEwMTkwNzQzMzBaMFExCzAJ
|
| 3820 |
+
BgNVBAYTAlBMMSgwJgYDVQQKDB9LcmFqb3dhIEl6YmEgUm96bGljemVuaW93YSBTLkEuMRgwFgYD
|
| 3821 |
+
VQQDDA9TWkFGSVIgUk9PVCBDQTIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC3vD5Q
|
| 3822 |
+
qEvNQLXOYeeWyrSh2gwisPq1e3YAd4wLz32ohswmUeQgPYUM1ljj5/QqGJ3a0a4m7utT3PSQ1hNK
|
| 3823 |
+
DJA8w/Ta0o4NkjrcsbH/ON7Dui1fgLkCvUqdGw+0w8LBZwPd3BucPbOw3gAeqDRHu5rr/gsUvTaE
|
| 3824 |
+
2g0gv/pby6kWIK05YO4vdbbnl5z5Pv1+TW9NL++IDWr63fE9biCloBK0TXC5ztdyO4mTp4CEHCdJ
|
| 3825 |
+
ckm1/zuVnsHMyAHs6A6KCpbns6aH5db5BSsNl0BwPLqsdVqc1U2dAgrSS5tmS0YHF2Wtn2yIANwi
|
| 3826 |
+
ieDhZNRnvDF5YTy7ykHNXGoAyDw4jlivAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0P
|
| 3827 |
+
AQH/BAQDAgEGMB0GA1UdDgQWBBQuFqlKGLXLzPVvUPMjX/hd56zwyDANBgkqhkiG9w0BAQsFAAOC
|
| 3828 |
+
AQEAtXP4A9xZWx126aMqe5Aosk3AM0+qmrHUuOQn/6mWmc5G4G18TKI4pAZw8PRBEew/R40/cof5
|
| 3829 |
+
O/2kbytTAOD/OblqBw7rHRz2onKQy4I9EYKL0rufKq8h5mOGnXkZ7/e7DDWQw4rtTw/1zBLZpD67
|
| 3830 |
+
oPwglV9PJi8RI4NOdQcPv5vRtB3pEAT+ymCPoky4rc/hkA/NrgrHXXu3UNLUYfrVFdvXn4dRVOul
|
| 3831 |
+
4+vJhaAlIDf7js4MNIThPIGyd05DpYhfhmehPea0XGG2Ptv+tyjFogeutcrKjSoS75ftwjCkySp6
|
| 3832 |
+
+/NNIxuZMzSgLvWpCz/UXeHPhJ/iGcJfitYgHuNztw==
|
| 3833 |
+
-----END CERTIFICATE-----
|
| 3834 |
+
|
| 3835 |
+
Certum Trusted Network CA 2
|
| 3836 |
+
===========================
|
| 3837 |
+
-----BEGIN CERTIFICATE-----
|
| 3838 |
+
MIIF0jCCA7qgAwIBAgIQIdbQSk8lD8kyN/yqXhKN6TANBgkqhkiG9w0BAQ0FADCBgDELMAkGA1UE
|
| 3839 |
+
BhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9naWVzIFMuQS4xJzAlBgNVBAsTHkNlcnR1
|
| 3840 |
+
bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEkMCIGA1UEAxMbQ2VydHVtIFRydXN0ZWQgTmV0d29y
|
| 3841 |
+
ayBDQSAyMCIYDzIwMTExMDA2MDgzOTU2WhgPMjA0NjEwMDYwODM5NTZaMIGAMQswCQYDVQQGEwJQ
|
| 3842 |
+
TDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENl
|
| 3843 |
+
cnRpZmljYXRpb24gQXV0aG9yaXR5MSQwIgYDVQQDExtDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENB
|
| 3844 |
+
IDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC9+Xj45tWADGSdhhuWZGc/IjoedQF9
|
| 3845 |
+
7/tcZ4zJzFxrqZHmuULlIEub2pt7uZld2ZuAS9eEQCsn0+i6MLs+CRqnSZXvK0AkwpfHp+6bJe+o
|
| 3846 |
+
CgCXhVqqndwpyeI1B+twTUrWwbNWuKFBOJvR+zF/j+Bf4bE/D44WSWDXBo0Y+aomEKsq09DRZ40b
|
| 3847 |
+
Rr5HMNUuctHFY9rnY3lEfktjJImGLjQ/KUxSiyqnwOKRKIm5wFv5HdnnJ63/mgKXwcZQkpsCLL2p
|
| 3848 |
+
uTRZCr+ESv/f/rOf69me4Jgj7KZrdxYq28ytOxykh9xGc14ZYmhFV+SQgkK7QtbwYeDBoz1mo130
|
| 3849 |
+
GO6IyY0XRSmZMnUCMe4pJshrAua1YkV/NxVaI2iJ1D7eTiew8EAMvE0Xy02isx7QBlrd9pPPV3WZ
|
| 3850 |
+
9fqGGmd4s7+W/jTcvedSVuWz5XV710GRBdxdaeOVDUO5/IOWOZV7bIBaTxNyxtd9KXpEulKkKtVB
|
| 3851 |
+
Rgkg/iKgtlswjbyJDNXXcPiHUv3a76xRLgezTv7QCdpw75j6VuZt27VXS9zlLCUVyJ4ueE742pye
|
| 3852 |
+
hizKV/Ma5ciSixqClnrDvFASadgOWkaLOusm+iPJtrCBvkIApPjW/jAux9JG9uWOdf3yzLnQh1vM
|
| 3853 |
+
BhBgu4M1t15n3kfsmUjxpKEV/q2MYo45VU85FrmxY53/twIDAQABo0IwQDAPBgNVHRMBAf8EBTAD
|
| 3854 |
+
AQH/MB0GA1UdDgQWBBS2oVQ5AsOgP46KvPrU+Bym0ToO/TAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZI
|
| 3855 |
+
hvcNAQENBQADggIBAHGlDs7k6b8/ONWJWsQCYftMxRQXLYtPU2sQF/xlhMcQSZDe28cmk4gmb3DW
|
| 3856 |
+
Al45oPePq5a1pRNcgRRtDoGCERuKTsZPpd1iHkTfCVn0W3cLN+mLIMb4Ck4uWBzrM9DPhmDJ2vuA
|
| 3857 |
+
L55MYIR4PSFk1vtBHxgP58l1cb29XN40hz5BsA72udY/CROWFC/emh1auVbONTqwX3BNXuMp8SMo
|
| 3858 |
+
clm2q8KMZiYcdywmdjWLKKdpoPk79SPdhRB0yZADVpHnr7pH1BKXESLjokmUbOe3lEu6LaTaM4tM
|
| 3859 |
+
pkT/WjzGHWTYtTHkpjx6qFcL2+1hGsvxznN3Y6SHb0xRONbkX8eftoEq5IVIeVheO/jbAoJnwTnb
|
| 3860 |
+
w3RLPTYe+SmTiGhbqEQZIfCn6IENLOiTNrQ3ssqwGyZ6miUfmpqAnksqP/ujmv5zMnHCnsZy4Ypo
|
| 3861 |
+
J/HkD7TETKVhk/iXEAcqMCWpuchxuO9ozC1+9eB+D4Kob7a6bINDd82Kkhehnlt4Fj1F4jNy3eFm
|
| 3862 |
+
ypnTycUm/Q1oBEauttmbjL4ZvrHG8hnjXALKLNhvSgfZyTXaQHXyxKcZb55CEJh15pWLYLztxRLX
|
| 3863 |
+
is7VmFxWlgPF7ncGNf/P5O4/E2Hu29othfDNrp2yGAlFw5Khchf8R7agCyzxxN5DaAhqXzvwdmP7
|
| 3864 |
+
zAYspsbiDrW5viSP
|
| 3865 |
+
-----END CERTIFICATE-----
|
| 3866 |
+
|
| 3867 |
+
Hellenic Academic and Research Institutions RootCA 2015
|
| 3868 |
+
=======================================================
|
| 3869 |
+
-----BEGIN CERTIFICATE-----
|
| 3870 |
+
MIIGCzCCA/OgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBpjELMAkGA1UEBhMCR1IxDzANBgNVBAcT
|
| 3871 |
+
BkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0
|
| 3872 |
+
aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNVBAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNl
|
| 3873 |
+
YXJjaCBJbnN0aXR1dGlvbnMgUm9vdENBIDIwMTUwHhcNMTUwNzA3MTAxMTIxWhcNNDAwNjMwMTAx
|
| 3874 |
+
MTIxWjCBpjELMAkGA1UEBhMCR1IxDzANBgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMg
|
| 3875 |
+
QWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNV
|
| 3876 |
+
BAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgUm9vdENBIDIw
|
| 3877 |
+
MTUwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDC+Kk/G4n8PDwEXT2QNrCROnk8Zlrv
|
| 3878 |
+
bTkBSRq0t89/TSNTt5AA4xMqKKYx8ZEA4yjsriFBzh/a/X0SWwGDD7mwX5nh8hKDgE0GPt+sr+eh
|
| 3879 |
+
iGsxr/CL0BgzuNtFajT0AoAkKAoCFZVedioNmToUW/bLy1O8E00BiDeUJRtCvCLYjqOWXjrZMts+
|
| 3880 |
+
6PAQZe104S+nfK8nNLspfZu2zwnI5dMK/IhlZXQK3HMcXM1AsRzUtoSMTFDPaI6oWa7CJ06CojXd
|
| 3881 |
+
FPQf/7J31Ycvqm59JCfnxssm5uX+Zwdj2EUN3TpZZTlYepKZcj2chF6IIbjV9Cz82XBST3i4vTwr
|
| 3882 |
+
i5WY9bPRaM8gFH5MXF/ni+X1NYEZN9cRCLdmvtNKzoNXADrDgfgXy5I2XdGj2HUb4Ysn6npIQf1F
|
| 3883 |
+
GQatJ5lOwXBH3bWfgVMS5bGMSF0xQxfjjMZ6Y5ZLKTBOhE5iGV48zpeQpX8B653g+IuJ3SWYPZK2
|
| 3884 |
+
fu/Z8VFRfS0myGlZYeCsargqNhEEelC9MoS+L9xy1dcdFkfkR2YgP/SWxa+OAXqlD3pk9Q0Yh9mu
|
| 3885 |
+
iNX6hME6wGkoLfINaFGq46V3xqSQDqE3izEjR8EJCOtu93ib14L8hCCZSRm2Ekax+0VVFqmjZayc
|
| 3886 |
+
Bw/qa9wfLgZy7IaIEuQt218FL+TwA9MmM+eAws1CoRc0CwIDAQABo0IwQDAPBgNVHRMBAf8EBTAD
|
| 3887 |
+
AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUcRVnyMjJvXVdctA4GGqd83EkVAswDQYJKoZI
|
| 3888 |
+
hvcNAQELBQADggIBAHW7bVRLqhBYRjTyYtcWNl0IXtVsyIe9tC5G8jH4fOpCtZMWVdyhDBKg2mF+
|
| 3889 |
+
D1hYc2Ryx+hFjtyp8iY/xnmMsVMIM4GwVhO+5lFc2JsKT0ucVlMC6U/2DWDqTUJV6HwbISHTGzrM
|
| 3890 |
+
d/K4kPFox/la/vot9L/J9UUbzjgQKjeKeaO04wlshYaT/4mWJ3iBj2fjRnRUjtkNaeJK9E10A/+y
|
| 3891 |
+
d+2VZ5fkscWrv2oj6NSU4kQoYsRL4vDY4ilrGnB+JGGTe08DMiUNRSQrlrRGar9KC/eaj8GsGsVn
|
| 3892 |
+
82800vpzY4zvFrCopEYq+OsS7HK07/grfoxSwIuEVPkvPuNVqNxmsdnhX9izjFk0WaSrT2y7Hxjb
|
| 3893 |
+
davYy5LNlDhhDgcGH0tGEPEVvo2FXDtKK4F5D7Rpn0lQl033DlZdwJVqwjbDG2jJ9SrcR5q+ss7F
|
| 3894 |
+
Jej6A7na+RZukYT1HCjI/CbM1xyQVqdfbzoEvM14iQuODy+jqk+iGxI9FghAD/FGTNeqewjBCvVt
|
| 3895 |
+
J94Cj8rDtSvK6evIIVM4pcw72Hc3MKJP2W/R8kCtQXoXxdZKNYm3QdV8hn9VTYNKpXMgwDqvkPGa
|
| 3896 |
+
JI7ZjnHKe7iG2rKPmT4dEw0SEe7Uq/DpFXYC5ODfqiAeW2GFZECpkJcNrVPSWh2HagCXZWK0vm9q
|
| 3897 |
+
p/UsQu0yrbYhnr68
|
| 3898 |
+
-----END CERTIFICATE-----
|
| 3899 |
+
|
| 3900 |
+
Hellenic Academic and Research Institutions ECC RootCA 2015
|
| 3901 |
+
===========================================================
|
| 3902 |
+
-----BEGIN CERTIFICATE-----
|
| 3903 |
+
MIICwzCCAkqgAwIBAgIBADAKBggqhkjOPQQDAjCBqjELMAkGA1UEBhMCR1IxDzANBgNVBAcTBkF0
|
| 3904 |
+
aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9u
|
| 3905 |
+
cyBDZXJ0LiBBdXRob3JpdHkxRDBCBgNVBAMTO0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJj
|
| 3906 |
+
aCBJbnN0aXR1dGlvbnMgRUNDIFJvb3RDQSAyMDE1MB4XDTE1MDcwNzEwMzcxMloXDTQwMDYzMDEw
|
| 3907 |
+
MzcxMlowgaoxCzAJBgNVBAYTAkdSMQ8wDQYDVQQHEwZBdGhlbnMxRDBCBgNVBAoTO0hlbGxlbmlj
|
| 3908 |
+
IEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9yaXR5MUQwQgYD
|
| 3909 |
+
VQQDEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25zIEVDQyBSb290
|
| 3910 |
+
Q0EgMjAxNTB2MBAGByqGSM49AgEGBSuBBAAiA2IABJKgQehLgoRc4vgxEZmGZE4JJS+dQS8KrjVP
|
| 3911 |
+
dJWyUWRrjWvmP3CV8AVER6ZyOFB2lQJajq4onvktTpnvLEhvTCUp6NFxW98dwXU3tNf6e3pCnGoK
|
| 3912 |
+
Vlp8aQuqgAkkbH7BRqNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0O
|
| 3913 |
+
BBYEFLQiC4KZJAEOnLvkDv2/+5cgk5kqMAoGCCqGSM49BAMCA2cAMGQCMGfOFmI4oqxiRaeplSTA
|
| 3914 |
+
GiecMjvAwNW6qef4BENThe5SId6d9SWDPp5YSy/XZxMOIQIwBeF1Ad5o7SofTUwJCA3sS61kFyjn
|
| 3915 |
+
dc5FZXIhF8siQQ6ME5g4mlRtm8rifOoCWCKR
|
| 3916 |
+
-----END CERTIFICATE-----
|
| 3917 |
+
|
| 3918 |
+
Certplus Root CA G1
|
| 3919 |
+
===================
|
| 3920 |
+
-----BEGIN CERTIFICATE-----
|
| 3921 |
+
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
|
| 3945 |
+
qsOR0C5CB8AMTVPNJLFMWx5R9N/pkvo=
|
| 3946 |
+
-----END CERTIFICATE-----
|
| 3947 |
+
|
| 3948 |
+
Certplus Root CA G2
|
| 3949 |
+
===================
|
| 3950 |
+
-----BEGIN CERTIFICATE-----
|
| 3951 |
+
MIICHDCCAaKgAwIBAgISESDZkc6uo+jF5//pAq/Pc7xVMAoGCCqGSM49BAMDMD4xCzAJBgNVBAYT
|
| 3952 |
+
AkZSMREwDwYDVQQKDAhDZXJ0cGx1czEcMBoGA1UEAwwTQ2VydHBsdXMgUm9vdCBDQSBHMjAeFw0x
|
| 3953 |
+
NDA1MjYwMDAwMDBaFw0zODAxMTUwMDAwMDBaMD4xCzAJBgNVBAYTAkZSMREwDwYDVQQKDAhDZXJ0
|
| 3954 |
+
cGx1czEcMBoGA1UEAwwTQ2VydHBsdXMgUm9vdCBDQSBHMjB2MBAGByqGSM49AgEGBSuBBAAiA2IA
|
| 3955 |
+
BM0PW1aC3/BFGtat93nwHcmsltaeTpwftEIRyoa/bfuFo8XlGVzX7qY/aWfYeOKmycTbLXku54uN
|
| 3956 |
+
Am8xIk0G42ByRZ0OQneezs/lf4WbGOT8zC5y0xaTTsqZY1yhBSpsBqNjMGEwDgYDVR0PAQH/BAQD
|
| 3957 |
+
AgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNqDYwJ5jtpMxjwjFNiPwyCrKGBZMB8GA1Ud
|
| 3958 |
+
IwQYMBaAFNqDYwJ5jtpMxjwjFNiPwyCrKGBZMAoGCCqGSM49BAMDA2gAMGUCMHD+sAvZ94OX7PNV
|
| 3959 |
+
HdTcswYO/jOYnYs5kGuUIe22113WTNchp+e/IQ8rzfcq3IUHnQIxAIYUFuXcsGXCwI4Un78kFmjl
|
| 3960 |
+
vPl5adytRSv3tjFzzAalU5ORGpOucGpnutee5WEaXw==
|
| 3961 |
+
-----END CERTIFICATE-----
|
| 3962 |
+
|
| 3963 |
+
OpenTrust Root CA G1
|
| 3964 |
+
====================
|
| 3965 |
+
-----BEGIN CERTIFICATE-----
|
| 3966 |
+
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
|
| 3990 |
+
OXXUc0ECd97N4EOH1uS6SsNsEn/+KuYj1oxx
|
| 3991 |
+
-----END CERTIFICATE-----
|
| 3992 |
+
|
| 3993 |
+
OpenTrust Root CA G2
|
| 3994 |
+
====================
|
| 3995 |
+
-----BEGIN CERTIFICATE-----
|
| 3996 |
+
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
|
| 4020 |
+
u7JwqkwR3v98KzfUetF3NI/n+UL3PIEMS1IK
|
| 4021 |
+
-----END CERTIFICATE-----
|
| 4022 |
+
|
| 4023 |
+
OpenTrust Root CA G3
|
| 4024 |
+
====================
|
| 4025 |
+
-----BEGIN CERTIFICATE-----
|
| 4026 |
+
MIICITCCAaagAwIBAgISESDm+Ez8JLC+BUCs2oMbNGA/MAoGCCqGSM49BAMDMEAxCzAJBgNVBAYT
|
| 4027 |
+
AkZSMRIwEAYDVQQKDAlPcGVuVHJ1c3QxHTAbBgNVBAMMFE9wZW5UcnVzdCBSb290IENBIEczMB4X
|
| 4028 |
+
DTE0MDUyNjAwMDAwMFoXDTM4MDExNTAwMDAwMFowQDELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCU9w
|
| 4029 |
+
ZW5UcnVzdDEdMBsGA1UEAwwUT3BlblRydXN0IFJvb3QgQ0EgRzMwdjAQBgcqhkjOPQIBBgUrgQQA
|
| 4030 |
+
IgNiAARK7liuTcpm3gY6oxH84Bjwbhy6LTAMidnW7ptzg6kjFYwvWYpa3RTqnVkrQ7cG7DK2uu5B
|
| 4031 |
+
ta1doYXM6h0UZqNnfkbilPPntlahFVmhTzeXuSIevRHr9LIfXsMUmuXZl5mjYzBhMA4GA1UdDwEB
|
| 4032 |
+
/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRHd8MUi2I5DMlv4VBN0BBY3JWIbTAf
|
| 4033 |
+
BgNVHSMEGDAWgBRHd8MUi2I5DMlv4VBN0BBY3JWIbTAKBggqhkjOPQQDAwNpADBmAjEAj6jcnboM
|
| 4034 |
+
BBf6Fek9LykBl7+BFjNAk2z8+e2AcG+qj9uEwov1NcoG3GRvaBbhj5G5AjEA2Euly8LQCGzpGPta
|
| 4035 |
+
3U1fJAuwACEl74+nBCZx4nxp5V2a+EEfOzmTk51V6s2N8fvB
|
| 4036 |
+
-----END CERTIFICATE-----
|
| 4037 |
+
|
| 4038 |
+
ISRG Root X1
|
| 4039 |
+
============
|
| 4040 |
+
-----BEGIN CERTIFICATE-----
|
| 4041 |
+
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
|
| 4065 |
+
m+kXQ99b21/+jh5Xos1AnX5iItreGCc=
|
| 4066 |
+
-----END CERTIFICATE-----
|
includes/mollie/wc/gateway/abstract.php
CHANGED
|
@@ -61,9 +61,12 @@ abstract class Mollie_WC_Gateway_Abstract extends WC_Payment_Gateway
|
|
| 61 |
$this->_initIcon();
|
| 62 |
$this->_initMinMaxAmount();
|
| 63 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 64 |
add_action('woocommerce_api_' . $this->id, array($this, 'webhookAction'));
|
| 65 |
add_action('woocommerce_update_options_payment_gateways_' . $this->id, array($this, 'process_admin_options'));
|
| 66 |
-
add_action('woocommerce_thankyou_' . $this->id, array($this, 'thankyou_page'));
|
| 67 |
add_action('woocommerce_email_after_order_table', array($this, 'displayInstructions'), 10, 3);
|
| 68 |
|
| 69 |
if (!$this->isValidForUse())
|
|
@@ -146,14 +149,7 @@ abstract class Mollie_WC_Gateway_Abstract extends WC_Payment_Gateway
|
|
| 146 |
|
| 147 |
protected function _initDescription ()
|
| 148 |
{
|
| 149 |
-
$description = '';
|
| 150 |
-
|
| 151 |
-
if (Mollie_WC_Plugin::getSettingsHelper()->isTestModeEnabled())
|
| 152 |
-
{
|
| 153 |
-
$description .= '<strong>' . __('Test mode enabled.', 'mollie-payments-for-woocommerce') . '</strong><br/>';
|
| 154 |
-
}
|
| 155 |
-
|
| 156 |
-
$description .= $this->get_option('description');
|
| 157 |
|
| 158 |
$this->description = $description;
|
| 159 |
}
|
|
@@ -304,44 +300,11 @@ abstract class Mollie_WC_Gateway_Abstract extends WC_Payment_Gateway
|
|
| 304 |
$settings_helper = Mollie_WC_Plugin::getSettingsHelper();
|
| 305 |
|
| 306 |
// Is test mode enabled?
|
| 307 |
-
$test_mode
|
| 308 |
-
|
| 309 |
-
$
|
| 310 |
-
$payment_locale = $settings_helper->getPaymentLocale();
|
| 311 |
-
$mollie_method = $this->getMollieMethodId();
|
| 312 |
-
$selected_issuer = $this->getSelectedIssuer();
|
| 313 |
-
$return_url = $this->getReturnUrl($order);
|
| 314 |
-
$webhook_url = $this->getWebhookUrl($order);
|
| 315 |
-
$customer_id = Mollie_WC_Plugin::getDataHelper()->getUserMollieCustomerId($order->customer_user, $test_mode);
|
| 316 |
|
| 317 |
-
$
|
| 318 |
-
'{order_number}' => $order->get_order_number(),
|
| 319 |
-
'{order_date}' => date_i18n(wc_date_format(), strtotime($order->order_date)),
|
| 320 |
-
));
|
| 321 |
-
|
| 322 |
-
$data = array_filter(array(
|
| 323 |
-
'amount' => $order->get_total(),
|
| 324 |
-
'description' => $payment_description,
|
| 325 |
-
'redirectUrl' => $return_url,
|
| 326 |
-
'webhookUrl' => $webhook_url,
|
| 327 |
-
'method' => $mollie_method,
|
| 328 |
-
'issuer' => $selected_issuer,
|
| 329 |
-
'locale' => $payment_locale,
|
| 330 |
-
'billingAddress' => $order->billing_address_1,
|
| 331 |
-
'billingCity' => $order->billing_city,
|
| 332 |
-
'billingRegion' => $order->billing_state,
|
| 333 |
-
'billingPostal' => $order->billing_postcode,
|
| 334 |
-
'billingCountry' => $order->billing_country,
|
| 335 |
-
'shippingAddress' => $order->shipping_address_1,
|
| 336 |
-
'shippingCity' => $order->shipping_city,
|
| 337 |
-
'shippingRegion' => $order->shipping_state,
|
| 338 |
-
'shippingPostal' => $order->shipping_postcode,
|
| 339 |
-
'shippingCountry' => $order->shipping_country,
|
| 340 |
-
'metadata' => array(
|
| 341 |
-
'order_id' => $order->id,
|
| 342 |
-
),
|
| 343 |
-
'customerId' => $customer_id,
|
| 344 |
-
));
|
| 345 |
|
| 346 |
$data = apply_filters('woocommerce_' . $this->id . '_args', $data, $order);
|
| 347 |
|
|
@@ -368,11 +331,7 @@ abstract class Mollie_WC_Gateway_Abstract extends WC_Payment_Gateway
|
|
| 368 |
$payment = Mollie_WC_Plugin::getApiHelper()->getApiClient($test_mode)->payments->create($data);
|
| 369 |
}
|
| 370 |
|
| 371 |
-
|
| 372 |
-
Mollie_WC_Plugin::getDataHelper()->setActiveMolliePayment($order->id, $payment);
|
| 373 |
-
|
| 374 |
-
// Set Mollie customer
|
| 375 |
-
Mollie_WC_Plugin::getDataHelper()->setUserMollieCustomerId($order->customer_user, $payment->customerId);
|
| 376 |
|
| 377 |
do_action(Mollie_WC_Plugin::PLUGIN_ID . '_payment_created', $payment, $order);
|
| 378 |
|
|
@@ -393,10 +352,7 @@ abstract class Mollie_WC_Gateway_Abstract extends WC_Payment_Gateway
|
|
| 393 |
$payment->id . ($payment->mode == 'test' ? (' - ' . __('test mode', 'mollie-payments-for-woocommerce')) : '')
|
| 394 |
));
|
| 395 |
|
| 396 |
-
|
| 397 |
-
WC()->cart->empty_cart();
|
| 398 |
-
|
| 399 |
-
Mollie_WC_Plugin::debug("Cart emptied, redirect user to payment URL: {$payment->getPaymentUrl()}");
|
| 400 |
|
| 401 |
return array(
|
| 402 |
'result' => 'success',
|
|
@@ -421,6 +377,78 @@ abstract class Mollie_WC_Gateway_Abstract extends WC_Payment_Gateway
|
|
| 421 |
return array('result' => 'failure');
|
| 422 |
}
|
| 423 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 424 |
/**
|
| 425 |
* Redirect location after successfully completing process_payment
|
| 426 |
*
|
|
@@ -474,6 +502,7 @@ abstract class Mollie_WC_Gateway_Abstract extends WC_Payment_Gateway
|
|
| 474 |
}
|
| 475 |
}
|
| 476 |
|
|
|
|
| 477 |
public function webhookAction ()
|
| 478 |
{
|
| 479 |
// Webhook test by Mollie
|
|
@@ -540,7 +569,8 @@ abstract class Mollie_WC_Gateway_Abstract extends WC_Payment_Gateway
|
|
| 540 |
}
|
| 541 |
|
| 542 |
// Payment requires different gateway, payment method changed on Mollie platform?
|
| 543 |
-
|
|
|
|
| 544 |
{
|
| 545 |
Mollie_WC_Plugin::setHttpResponseCode(400);
|
| 546 |
Mollie_WC_Plugin::debug($this->id . ": Invalid gateway. This gateways can process Mollie " . $this->getMollieMethodId() . " payments. This payment has payment method " . $payment->method, true);
|
|
@@ -550,9 +580,7 @@ abstract class Mollie_WC_Gateway_Abstract extends WC_Payment_Gateway
|
|
| 550 |
// Order does not need a payment
|
| 551 |
if (!$this->orderNeedsPayment($order))
|
| 552 |
{
|
| 553 |
-
|
| 554 |
-
Mollie_WC_Plugin::setHttpResponseCode(204);
|
| 555 |
-
Mollie_WC_Plugin::debug($this->id . ": Order $order_id does not need a payment (payment webhook {$payment->id}).", true);
|
| 556 |
return;
|
| 557 |
}
|
| 558 |
|
|
@@ -578,11 +606,33 @@ abstract class Mollie_WC_Gateway_Abstract extends WC_Payment_Gateway
|
|
| 578 |
// Status 200
|
| 579 |
}
|
| 580 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 581 |
/**
|
| 582 |
* @param Wc_Order $order
|
| 583 |
* @param Mollie_API_Object_Payment $payment
|
| 584 |
*/
|
| 585 |
-
protected function onWebhookPaid
|
| 586 |
{
|
| 587 |
Mollie_WC_Plugin::debug(__METHOD__ . ' called.');
|
| 588 |
|
|
@@ -598,19 +648,34 @@ abstract class Mollie_WC_Gateway_Abstract extends WC_Payment_Gateway
|
|
| 598 |
$order->payment_complete();
|
| 599 |
}
|
| 600 |
|
|
|
|
| 601 |
$order->add_order_note(sprintf(
|
| 602 |
/* translators: Placeholder 1: payment method title, placeholder 2: payment ID */
|
| 603 |
__('Order completed using %s payment (%s).', 'mollie-payments-for-woocommerce'),
|
| 604 |
-
$
|
| 605 |
$payment->id . ($payment->mode == 'test' ? (' - ' . __('test mode', 'mollie-payments-for-woocommerce')) : '')
|
| 606 |
));
|
| 607 |
}
|
| 608 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 609 |
/**
|
| 610 |
* @param Wc_Order $order
|
| 611 |
* @param Mollie_API_Object_Payment $payment
|
| 612 |
*/
|
| 613 |
-
protected function onWebhookCancelled
|
| 614 |
{
|
| 615 |
Mollie_WC_Plugin::debug(__METHOD__ . ' called.');
|
| 616 |
|
|
@@ -631,11 +696,13 @@ abstract class Mollie_WC_Gateway_Abstract extends WC_Payment_Gateway
|
|
| 631 |
// Reset state
|
| 632 |
$this->updateOrderStatus($order, $new_order_status);
|
| 633 |
|
|
|
|
|
|
|
| 634 |
// User cancelled payment on Mollie or issuer page, add a cancel note.. do not cancel order.
|
| 635 |
$order->add_order_note(sprintf(
|
| 636 |
/* translators: Placeholder 1: payment method title, placeholder 2: payment ID */
|
| 637 |
__('%s payment cancelled (%s).', 'mollie-payments-for-woocommerce'),
|
| 638 |
-
$
|
| 639 |
$payment->id . ($payment->mode == 'test' ? (' - ' . __('test mode', 'mollie-payments-for-woocommerce')) : '')
|
| 640 |
));
|
| 641 |
}
|
|
@@ -644,7 +711,7 @@ abstract class Mollie_WC_Gateway_Abstract extends WC_Payment_Gateway
|
|
| 644 |
* @param Wc_Order $order
|
| 645 |
* @param Mollie_API_Object_Payment $payment
|
| 646 |
*/
|
| 647 |
-
protected function onWebhookExpired
|
| 648 |
{
|
| 649 |
Mollie_WC_Plugin::debug(__METHOD__ . ' called.');
|
| 650 |
|
|
@@ -660,10 +727,12 @@ abstract class Mollie_WC_Gateway_Abstract extends WC_Payment_Gateway
|
|
| 660 |
// Cancel order
|
| 661 |
$this->updateOrderStatus($order, $new_order_status);
|
| 662 |
|
|
|
|
|
|
|
| 663 |
$order->add_order_note(sprintf(
|
| 664 |
/* translators: Placeholder 1: payment method title, placeholder 2: payment ID */
|
| 665 |
__('%s payment expired (%s).', 'mollie-payments-for-woocommerce'),
|
| 666 |
-
$
|
| 667 |
$payment->id . ($payment->mode == 'test' ? (' - ' . __('test mode', 'mollie-payments-for-woocommerce')) : '')
|
| 668 |
));
|
| 669 |
}
|
|
@@ -672,7 +741,7 @@ abstract class Mollie_WC_Gateway_Abstract extends WC_Payment_Gateway
|
|
| 672 |
* @param WC_Order $order
|
| 673 |
* @return string
|
| 674 |
*/
|
| 675 |
-
public function getReturnRedirectUrlForOrder
|
| 676 |
{
|
| 677 |
$data_helper = Mollie_WC_Plugin::getDataHelper();
|
| 678 |
|
|
@@ -784,6 +853,11 @@ abstract class Mollie_WC_Gateway_Abstract extends WC_Payment_Gateway
|
|
| 784 |
return;
|
| 785 |
}
|
| 786 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 787 |
// Same as email instructions, just run that
|
| 788 |
$this->displayInstructions($order, $admin_instructions = false, $plain_text = false);
|
| 789 |
}
|
|
@@ -888,7 +962,7 @@ abstract class Mollie_WC_Gateway_Abstract extends WC_Payment_Gateway
|
|
| 888 |
/**
|
| 889 |
* @return Mollie_API_Object_Method|null
|
| 890 |
*/
|
| 891 |
-
public function getMollieMethod
|
| 892 |
{
|
| 893 |
try
|
| 894 |
{
|
| 61 |
$this->_initIcon();
|
| 62 |
$this->_initMinMaxAmount();
|
| 63 |
|
| 64 |
+
if(!has_action('woocommerce_thankyou_' . $this->id)) {
|
| 65 |
+
add_action('woocommerce_thankyou_' . $this->id, array($this, 'thankyou_page'));
|
| 66 |
+
}
|
| 67 |
+
|
| 68 |
add_action('woocommerce_api_' . $this->id, array($this, 'webhookAction'));
|
| 69 |
add_action('woocommerce_update_options_payment_gateways_' . $this->id, array($this, 'process_admin_options'));
|
|
|
|
| 70 |
add_action('woocommerce_email_after_order_table', array($this, 'displayInstructions'), 10, 3);
|
| 71 |
|
| 72 |
if (!$this->isValidForUse())
|
| 149 |
|
| 150 |
protected function _initDescription ()
|
| 151 |
{
|
| 152 |
+
$description = $this->get_option('description', '');
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 153 |
|
| 154 |
$this->description = $description;
|
| 155 |
}
|
| 300 |
$settings_helper = Mollie_WC_Plugin::getSettingsHelper();
|
| 301 |
|
| 302 |
// Is test mode enabled?
|
| 303 |
+
$test_mode = $settings_helper->isTestModeEnabled();
|
| 304 |
+
$customer_id = $this->getUserMollieCustomerId($order,$test_mode);
|
| 305 |
+
$paymentRequestData = $this->getPaymentRequestData($order, $customer_id);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 306 |
|
| 307 |
+
$data = array_filter($paymentRequestData);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 308 |
|
| 309 |
$data = apply_filters('woocommerce_' . $this->id . '_args', $data, $order);
|
| 310 |
|
| 331 |
$payment = Mollie_WC_Plugin::getApiHelper()->getApiClient($test_mode)->payments->create($data);
|
| 332 |
}
|
| 333 |
|
| 334 |
+
$this->saveMollieInfo($order, $payment);
|
|
|
|
|
|
|
|
|
|
|
|
|
| 335 |
|
| 336 |
do_action(Mollie_WC_Plugin::PLUGIN_ID . '_payment_created', $payment, $order);
|
| 337 |
|
| 352 |
$payment->id . ($payment->mode == 'test' ? (' - ' . __('test mode', 'mollie-payments-for-woocommerce')) : '')
|
| 353 |
));
|
| 354 |
|
| 355 |
+
Mollie_WC_Plugin::debug("Redirect user to payment URL: {$payment->getPaymentUrl()}");
|
|
|
|
|
|
|
|
|
|
| 356 |
|
| 357 |
return array(
|
| 358 |
'result' => 'success',
|
| 377 |
return array('result' => 'failure');
|
| 378 |
}
|
| 379 |
|
| 380 |
+
/**
|
| 381 |
+
* @param $order
|
| 382 |
+
* @param $payment
|
| 383 |
+
*/
|
| 384 |
+
protected function saveMollieInfo($order, $payment)
|
| 385 |
+
{
|
| 386 |
+
// Set active Mollie payment
|
| 387 |
+
Mollie_WC_Plugin::getDataHelper()->setActiveMolliePayment($order->id, $payment);
|
| 388 |
+
|
| 389 |
+
// Set Mollie customer
|
| 390 |
+
Mollie_WC_Plugin::getDataHelper()->setUserMollieCustomerId($order->customer_user, $payment->customerId);
|
| 391 |
+
}
|
| 392 |
+
|
| 393 |
+
/**
|
| 394 |
+
* @param $order
|
| 395 |
+
* @param $customer_id
|
| 396 |
+
* @return array
|
| 397 |
+
*/
|
| 398 |
+
protected function getPaymentRequestData($order, $customer_id)
|
| 399 |
+
{
|
| 400 |
+
$settings_helper = Mollie_WC_Plugin::getSettingsHelper();
|
| 401 |
+
$payment_description = $settings_helper->getPaymentDescription();
|
| 402 |
+
$payment_locale = $settings_helper->getPaymentLocale();
|
| 403 |
+
$mollie_method = $this->getMollieMethodId();
|
| 404 |
+
$selected_issuer = $this->getSelectedIssuer();
|
| 405 |
+
$return_url = $this->getReturnUrl($order);
|
| 406 |
+
$webhook_url = $this->getWebhookUrl($order);
|
| 407 |
+
|
| 408 |
+
|
| 409 |
+
$payment_description = strtr($payment_description, array(
|
| 410 |
+
'{order_number}' => $order->get_order_number(),
|
| 411 |
+
'{order_date}' => date_i18n(wc_date_format(), strtotime($order->order_date)),
|
| 412 |
+
));
|
| 413 |
+
|
| 414 |
+
$paymentRequestData = array(
|
| 415 |
+
'amount' => $order->get_total(),
|
| 416 |
+
'description' => $payment_description,
|
| 417 |
+
'redirectUrl' => $return_url,
|
| 418 |
+
'webhookUrl' => $webhook_url,
|
| 419 |
+
'method' => $mollie_method,
|
| 420 |
+
'issuer' => $selected_issuer,
|
| 421 |
+
'locale' => $payment_locale,
|
| 422 |
+
'billingAddress' => $order->billing_address_1,
|
| 423 |
+
'billingCity' => $order->billing_city,
|
| 424 |
+
'billingRegion' => $order->billing_state,
|
| 425 |
+
'billingPostal' => $order->billing_postcode,
|
| 426 |
+
'billingCountry' => $order->billing_country,
|
| 427 |
+
'shippingAddress' => $order->shipping_address_1,
|
| 428 |
+
'shippingCity' => $order->shipping_city,
|
| 429 |
+
'shippingRegion' => $order->shipping_state,
|
| 430 |
+
'shippingPostal' => $order->shipping_postcode,
|
| 431 |
+
'shippingCountry' => $order->shipping_country,
|
| 432 |
+
'metadata' => array(
|
| 433 |
+
'order_id' => $order->id,
|
| 434 |
+
),
|
| 435 |
+
'customerId' => $customer_id,
|
| 436 |
+
);
|
| 437 |
+
|
| 438 |
+
return $paymentRequestData;
|
| 439 |
+
|
| 440 |
+
}
|
| 441 |
+
|
| 442 |
+
/**
|
| 443 |
+
* @param $order
|
| 444 |
+
* @param $test_mode
|
| 445 |
+
* @return null|string
|
| 446 |
+
*/
|
| 447 |
+
protected function getUserMollieCustomerId($order, $test_mode)
|
| 448 |
+
{
|
| 449 |
+
return Mollie_WC_Plugin::getDataHelper()->getUserMollieCustomerId($order->customer_user, $test_mode);
|
| 450 |
+
}
|
| 451 |
+
|
| 452 |
/**
|
| 453 |
* Redirect location after successfully completing process_payment
|
| 454 |
*
|
| 502 |
}
|
| 503 |
}
|
| 504 |
|
| 505 |
+
|
| 506 |
public function webhookAction ()
|
| 507 |
{
|
| 508 |
// Webhook test by Mollie
|
| 569 |
}
|
| 570 |
|
| 571 |
// Payment requires different gateway, payment method changed on Mollie platform?
|
| 572 |
+
$isValidPaymentMethod = $this->isValidPaymentMethod($payment);
|
| 573 |
+
if (!$isValidPaymentMethod)
|
| 574 |
{
|
| 575 |
Mollie_WC_Plugin::setHttpResponseCode(400);
|
| 576 |
Mollie_WC_Plugin::debug($this->id . ": Invalid gateway. This gateways can process Mollie " . $this->getMollieMethodId() . " payments. This payment has payment method " . $payment->method, true);
|
| 580 |
// Order does not need a payment
|
| 581 |
if (!$this->orderNeedsPayment($order))
|
| 582 |
{
|
| 583 |
+
$this->handlePayedOrderWebhook($order, $payment);
|
|
|
|
|
|
|
| 584 |
return;
|
| 585 |
}
|
| 586 |
|
| 606 |
// Status 200
|
| 607 |
}
|
| 608 |
|
| 609 |
+
/**
|
| 610 |
+
* @param $order
|
| 611 |
+
* @param $payment
|
| 612 |
+
*/
|
| 613 |
+
protected function handlePayedOrderWebhook($order, $payment)
|
| 614 |
+
{
|
| 615 |
+
// Duplicate webhook call
|
| 616 |
+
Mollie_WC_Plugin::setHttpResponseCode(204);
|
| 617 |
+
Mollie_WC_Plugin::debug($this->id . ": Order $order->id does not need a payment (payment webhook {$payment->id}).", true);
|
| 618 |
+
|
| 619 |
+
}
|
| 620 |
+
|
| 621 |
+
/**
|
| 622 |
+
* @param $payment
|
| 623 |
+
* @return bool
|
| 624 |
+
*/
|
| 625 |
+
protected function isValidPaymentMethod($payment)
|
| 626 |
+
{
|
| 627 |
+
$isValidPaymentMethod = $payment->method == $this->getMollieMethodId();
|
| 628 |
+
return $isValidPaymentMethod;
|
| 629 |
+
}
|
| 630 |
+
|
| 631 |
/**
|
| 632 |
* @param Wc_Order $order
|
| 633 |
* @param Mollie_API_Object_Payment $payment
|
| 634 |
*/
|
| 635 |
+
protected function onWebhookPaid(Wc_Order $order, Mollie_API_Object_Payment $payment)
|
| 636 |
{
|
| 637 |
Mollie_WC_Plugin::debug(__METHOD__ . ' called.');
|
| 638 |
|
| 648 |
$order->payment_complete();
|
| 649 |
}
|
| 650 |
|
| 651 |
+
$paymentMethodTitle = $this->getPaymentMethodTitle($payment);
|
| 652 |
$order->add_order_note(sprintf(
|
| 653 |
/* translators: Placeholder 1: payment method title, placeholder 2: payment ID */
|
| 654 |
__('Order completed using %s payment (%s).', 'mollie-payments-for-woocommerce'),
|
| 655 |
+
$paymentMethodTitle,
|
| 656 |
$payment->id . ($payment->mode == 'test' ? (' - ' . __('test mode', 'mollie-payments-for-woocommerce')) : '')
|
| 657 |
));
|
| 658 |
}
|
| 659 |
|
| 660 |
+
/**
|
| 661 |
+
* @param $payment
|
| 662 |
+
* @return string
|
| 663 |
+
*/
|
| 664 |
+
protected function getPaymentMethodTitle($payment)
|
| 665 |
+
{
|
| 666 |
+
$paymentMethodTitle = '';
|
| 667 |
+
if ($payment->method == $this->getMollieMethodId()){
|
| 668 |
+
$paymentMethodTitle = $this->method_title;
|
| 669 |
+
}
|
| 670 |
+
return $paymentMethodTitle;
|
| 671 |
+
}
|
| 672 |
+
|
| 673 |
+
|
| 674 |
/**
|
| 675 |
* @param Wc_Order $order
|
| 676 |
* @param Mollie_API_Object_Payment $payment
|
| 677 |
*/
|
| 678 |
+
protected function onWebhookCancelled(Wc_Order $order, Mollie_API_Object_Payment $payment)
|
| 679 |
{
|
| 680 |
Mollie_WC_Plugin::debug(__METHOD__ . ' called.');
|
| 681 |
|
| 696 |
// Reset state
|
| 697 |
$this->updateOrderStatus($order, $new_order_status);
|
| 698 |
|
| 699 |
+
$paymentMethodTitle = $this->getPaymentMethodTitle($payment);
|
| 700 |
+
|
| 701 |
// User cancelled payment on Mollie or issuer page, add a cancel note.. do not cancel order.
|
| 702 |
$order->add_order_note(sprintf(
|
| 703 |
/* translators: Placeholder 1: payment method title, placeholder 2: payment ID */
|
| 704 |
__('%s payment cancelled (%s).', 'mollie-payments-for-woocommerce'),
|
| 705 |
+
$paymentMethodTitle,
|
| 706 |
$payment->id . ($payment->mode == 'test' ? (' - ' . __('test mode', 'mollie-payments-for-woocommerce')) : '')
|
| 707 |
));
|
| 708 |
}
|
| 711 |
* @param Wc_Order $order
|
| 712 |
* @param Mollie_API_Object_Payment $payment
|
| 713 |
*/
|
| 714 |
+
protected function onWebhookExpired(Wc_Order $order, Mollie_API_Object_Payment $payment)
|
| 715 |
{
|
| 716 |
Mollie_WC_Plugin::debug(__METHOD__ . ' called.');
|
| 717 |
|
| 727 |
// Cancel order
|
| 728 |
$this->updateOrderStatus($order, $new_order_status);
|
| 729 |
|
| 730 |
+
$paymentMethodTitle = $this->getPaymentMethodTitle($payment);
|
| 731 |
+
|
| 732 |
$order->add_order_note(sprintf(
|
| 733 |
/* translators: Placeholder 1: payment method title, placeholder 2: payment ID */
|
| 734 |
__('%s payment expired (%s).', 'mollie-payments-for-woocommerce'),
|
| 735 |
+
$paymentMethodTitle,
|
| 736 |
$payment->id . ($payment->mode == 'test' ? (' - ' . __('test mode', 'mollie-payments-for-woocommerce')) : '')
|
| 737 |
));
|
| 738 |
}
|
| 741 |
* @param WC_Order $order
|
| 742 |
* @return string
|
| 743 |
*/
|
| 744 |
+
public function getReturnRedirectUrlForOrder(WC_Order $order)
|
| 745 |
{
|
| 746 |
$data_helper = Mollie_WC_Plugin::getDataHelper();
|
| 747 |
|
| 853 |
return;
|
| 854 |
}
|
| 855 |
|
| 856 |
+
// Empty cart
|
| 857 |
+
if (WC()->cart) {
|
| 858 |
+
WC()->cart->empty_cart();
|
| 859 |
+
}
|
| 860 |
+
|
| 861 |
// Same as email instructions, just run that
|
| 862 |
$this->displayInstructions($order, $admin_instructions = false, $plain_text = false);
|
| 863 |
}
|
| 962 |
/**
|
| 963 |
* @return Mollie_API_Object_Method|null
|
| 964 |
*/
|
| 965 |
+
public function getMollieMethod()
|
| 966 |
{
|
| 967 |
try
|
| 968 |
{
|
includes/mollie/wc/gateway/abstractseparecurring.php
ADDED
|
@@ -0,0 +1,207 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
abstract class Mollie_WC_Gateway_AbstractSepaRecurring extends Mollie_WC_Gateway_AbstractSubscription
|
| 3 |
+
{
|
| 4 |
+
|
| 5 |
+
const WAITING_CONFIRMATION_PERIOD_DAYS = '15';
|
| 6 |
+
|
| 7 |
+
protected $recurringMollieMethod = null;
|
| 8 |
+
|
| 9 |
+
|
| 10 |
+
/**
|
| 11 |
+
* Mollie_WC_Gateway_AbstractSepaRecurring constructor.
|
| 12 |
+
*/
|
| 13 |
+
public function __construct ()
|
| 14 |
+
{
|
| 15 |
+
parent::__construct();
|
| 16 |
+
$directDebit = new Mollie_WC_Gateway_DirectDebit();
|
| 17 |
+
if ($directDebit->is_available()) {
|
| 18 |
+
$this->initSubscriptionSupport();
|
| 19 |
+
$this->recurringMollieMethod = $directDebit;
|
| 20 |
+
}
|
| 21 |
+
return $this;
|
| 22 |
+
}
|
| 23 |
+
|
| 24 |
+
/**
|
| 25 |
+
* @return string
|
| 26 |
+
*/
|
| 27 |
+
protected function getRecurringMollieMethodId()
|
| 28 |
+
{
|
| 29 |
+
$result = null;
|
| 30 |
+
if ($this->recurringMollieMethod){
|
| 31 |
+
$result = $this->recurringMollieMethod->getMollieMethodId();
|
| 32 |
+
}
|
| 33 |
+
|
| 34 |
+
return $result;
|
| 35 |
+
}
|
| 36 |
+
|
| 37 |
+
/**
|
| 38 |
+
* @return string
|
| 39 |
+
*/
|
| 40 |
+
protected function getRecurringMollieMethodTitle()
|
| 41 |
+
{
|
| 42 |
+
$result = null;
|
| 43 |
+
if ($this->recurringMollieMethod){
|
| 44 |
+
$result = $this->recurringMollieMethod->getDefaultTitle();
|
| 45 |
+
}
|
| 46 |
+
|
| 47 |
+
return $result;
|
| 48 |
+
}
|
| 49 |
+
|
| 50 |
+
/**
|
| 51 |
+
* @param $renewal_order
|
| 52 |
+
* @param $initial_order_status
|
| 53 |
+
* @param $payment
|
| 54 |
+
*/
|
| 55 |
+
protected function _updateScheduledPaymentOrder($renewal_order, $initial_order_status, $payment)
|
| 56 |
+
{
|
| 57 |
+
$this->updateOrderStatus(
|
| 58 |
+
$renewal_order,
|
| 59 |
+
self::STATUS_COMPLETED,
|
| 60 |
+
__("Awaiting payment confirmation. For %s Days", 'mollie-payments-for-woocommerce') . "\n",
|
| 61 |
+
self::WAITING_CONFIRMATION_PERIOD_DAYS
|
| 62 |
+
);
|
| 63 |
+
|
| 64 |
+
$paymentMethodTitle = $this->getPaymentMethodTitle($payment);
|
| 65 |
+
|
| 66 |
+
$renewal_order->add_order_note(sprintf(
|
| 67 |
+
/* translators: Placeholder 1: Payment method title, placeholder 2: payment ID */
|
| 68 |
+
__('%s payment started (%s).', 'mollie-payments-for-woocommerce'),
|
| 69 |
+
$paymentMethodTitle,
|
| 70 |
+
$payment->id . ($payment->mode == 'test' ? (' - ' . __('test mode', 'mollie-payments-for-woocommerce')) : '')
|
| 71 |
+
));
|
| 72 |
+
|
| 73 |
+
$this->addPendingPaymentOrder($renewal_order);
|
| 74 |
+
}
|
| 75 |
+
|
| 76 |
+
/**
|
| 77 |
+
* @param $renewal_order
|
| 78 |
+
*/
|
| 79 |
+
protected function addPendingPaymentOrder($renewal_order)
|
| 80 |
+
{
|
| 81 |
+
global $wpdb;
|
| 82 |
+
|
| 83 |
+
$confirmationDate = new DateTime();
|
| 84 |
+
$period = 'P'.self::WAITING_CONFIRMATION_PERIOD_DAYS . 'D';
|
| 85 |
+
$confirmationDate->add(new DateInterval($period));
|
| 86 |
+
|
| 87 |
+
$wpdb->insert(
|
| 88 |
+
$wpdb->mollie_pending_payment,
|
| 89 |
+
array(
|
| 90 |
+
'post_id' => $renewal_order->id,
|
| 91 |
+
'expired_time' => $confirmationDate->getTimestamp(),
|
| 92 |
+
)
|
| 93 |
+
);
|
| 94 |
+
}
|
| 95 |
+
|
| 96 |
+
/**
|
| 97 |
+
* @param $order
|
| 98 |
+
*/
|
| 99 |
+
protected function deleteOrderFromPendingPaymentQueue($order)
|
| 100 |
+
{
|
| 101 |
+
global $wpdb;
|
| 102 |
+
$wpdb->delete(
|
| 103 |
+
$wpdb->mollie_pending_payment,
|
| 104 |
+
array(
|
| 105 |
+
'post_id' => $order->id,
|
| 106 |
+
)
|
| 107 |
+
);
|
| 108 |
+
}
|
| 109 |
+
|
| 110 |
+
/**
|
| 111 |
+
* @param WC_Order $order
|
| 112 |
+
* @param Mollie_API_Object_Payment $payment
|
| 113 |
+
*/
|
| 114 |
+
protected function onWebhookPaid(WC_Order $order, Mollie_API_Object_Payment $payment)
|
| 115 |
+
{
|
| 116 |
+
parent::onWebhookPaid($order, $payment);
|
| 117 |
+
if ($this->is_subscription($order->id)) {
|
| 118 |
+
$this->deleteOrderFromPendingPaymentQueue($order);
|
| 119 |
+
}
|
| 120 |
+
}
|
| 121 |
+
|
| 122 |
+
/**
|
| 123 |
+
* @param WC_Order $order
|
| 124 |
+
* @param Mollie_API_Object_Payment $payment
|
| 125 |
+
*/
|
| 126 |
+
protected function onWebhookCancelled(WC_Order $order, Mollie_API_Object_Payment $payment)
|
| 127 |
+
{
|
| 128 |
+
parent::onWebhookCancelled($order, $payment);
|
| 129 |
+
|
| 130 |
+
if ($this->is_subscription($order->id)) {
|
| 131 |
+
$this->deleteOrderFromPendingPaymentQueue($order);
|
| 132 |
+
}
|
| 133 |
+
}
|
| 134 |
+
|
| 135 |
+
/**
|
| 136 |
+
* @param WC_Order $order
|
| 137 |
+
* @param Mollie_API_Object_Payment $payment
|
| 138 |
+
*/
|
| 139 |
+
protected function onWebhookExpired(WC_Order $order, Mollie_API_Object_Payment $payment)
|
| 140 |
+
{
|
| 141 |
+
parent::onWebhookExpired($order, $payment);
|
| 142 |
+
|
| 143 |
+
if ($this->is_subscription($order->id)) {
|
| 144 |
+
$this->deleteOrderFromPendingPaymentQueue($order);
|
| 145 |
+
}
|
| 146 |
+
}
|
| 147 |
+
|
| 148 |
+
/**
|
| 149 |
+
* @param null $payment
|
| 150 |
+
* @return string
|
| 151 |
+
*/
|
| 152 |
+
protected function getPaymentMethodTitle($payment)
|
| 153 |
+
{
|
| 154 |
+
$paymentMethodTitle = parent::getPaymentMethodTitle($payment);
|
| 155 |
+
$orderId = $payment->metadata->order_id;
|
| 156 |
+
if ($orderId && $this->is_subscription($orderId) && $payment->method == $this->getRecurringMollieMethodId()){
|
| 157 |
+
$paymentMethodTitle = $this->getRecurringMollieMethodTitle();
|
| 158 |
+
}
|
| 159 |
+
|
| 160 |
+
return $paymentMethodTitle;
|
| 161 |
+
}
|
| 162 |
+
|
| 163 |
+
/**
|
| 164 |
+
* @param $order
|
| 165 |
+
* @param $payment
|
| 166 |
+
*/
|
| 167 |
+
protected function handlePayedOrderWebhook($order, $payment)
|
| 168 |
+
{
|
| 169 |
+
// Duplicate webhook call
|
| 170 |
+
if ($this->is_subscription($order->id) && isset($payment->recurringType) && $payment->recurringType == 'recurring') {
|
| 171 |
+
$paymentMethodTitle = $this->getPaymentMethodTitle($payment);
|
| 172 |
+
|
| 173 |
+
$order->add_order_note(sprintf(
|
| 174 |
+
/* translators: Placeholder 1: payment method title, placeholder 2: payment ID */
|
| 175 |
+
__('Order completed using %s payment (%s).', 'mollie-payments-for-woocommerce'),
|
| 176 |
+
$paymentMethodTitle,
|
| 177 |
+
$payment->id . ($payment->mode == 'test' ? (' - ' . __('test mode', 'mollie-payments-for-woocommerce')) : '')
|
| 178 |
+
));
|
| 179 |
+
|
| 180 |
+
$this->deleteOrderFromPendingPaymentQueue($order);
|
| 181 |
+
return;
|
| 182 |
+
}
|
| 183 |
+
|
| 184 |
+
parent::handlePayedOrderWebhook($order, $payment);
|
| 185 |
+
|
| 186 |
+
}
|
| 187 |
+
|
| 188 |
+
/**
|
| 189 |
+
* @param $payment
|
| 190 |
+
* @return bool
|
| 191 |
+
*/
|
| 192 |
+
protected function isValidPaymentMethod($payment)
|
| 193 |
+
{
|
| 194 |
+
$isValidPaymentMethod = parent::isValidPaymentMethod($payment);
|
| 195 |
+
$orderId = $payment->metadata->order_id;
|
| 196 |
+
|
| 197 |
+
// First payment was made by one gateway, and the next from another.
|
| 198 |
+
// For Example Recurring First with IDEAL, the second With Sepa Direct Debit
|
| 199 |
+
if ($orderId && $this->is_subscription($orderId)){
|
| 200 |
+
$isValidPaymentMethod = in_array($payment->method, array($this->getMollieMethodId(),$this->getRecurringMollieMethodId()));
|
| 201 |
+
}
|
| 202 |
+
|
| 203 |
+
return $isValidPaymentMethod;
|
| 204 |
+
}
|
| 205 |
+
|
| 206 |
+
|
| 207 |
+
}
|
includes/mollie/wc/gateway/abstractsubscription.php
ADDED
|
@@ -0,0 +1,495 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
abstract class Mollie_WC_Gateway_AbstractSubscription extends Mollie_WC_Gateway_Abstract
|
| 3 |
+
{
|
| 4 |
+
|
| 5 |
+
const PAYMENT_TEST_MODE = 'test';
|
| 6 |
+
|
| 7 |
+
protected $isSubscriptionPayment = false;
|
| 8 |
+
/**
|
| 9 |
+
* Mollie_WC_Gateway_AbstractSubscription constructor.
|
| 10 |
+
*/
|
| 11 |
+
public function __construct ()
|
| 12 |
+
{
|
| 13 |
+
parent::__construct();
|
| 14 |
+
|
| 15 |
+
|
| 16 |
+
if ( class_exists( 'WC_Subscriptions_Order' ) ) {
|
| 17 |
+
add_action( 'woocommerce_scheduled_subscription_payment_' . $this->id, array( $this, 'scheduled_subscription_payment' ), 10, 2 );
|
| 18 |
+
add_action( 'wcs_resubscribe_order_created', array( $this, 'delete_resubscribe_meta' ), 10 );
|
| 19 |
+
add_action( 'wcs_renewal_order_created', array( $this, 'delete_renewal_meta' ), 10 );
|
| 20 |
+
add_action( 'woocommerce_subscription_failing_payment_method_updated_mollie', array( $this, 'update_failing_payment_method' ), 10, 2 );
|
| 21 |
+
|
| 22 |
+
add_filter( 'woocommerce_subscription_payment_meta', array( $this, 'add_subscription_payment_meta' ), 10, 2 );
|
| 23 |
+
add_filter( 'woocommerce_subscription_validate_payment_meta', array( $this, 'validate_subscription_payment_meta' ), 10, 2 );
|
| 24 |
+
}
|
| 25 |
+
}
|
| 26 |
+
|
| 27 |
+
/**
|
| 28 |
+
*
|
| 29 |
+
*/
|
| 30 |
+
protected function initSubscriptionSupport()
|
| 31 |
+
{
|
| 32 |
+
$supportSubscriptions = array(
|
| 33 |
+
'subscriptions',
|
| 34 |
+
'subscription_suspension',
|
| 35 |
+
'subscription_reactivation',
|
| 36 |
+
'subscription_cancellation',
|
| 37 |
+
'subscription_date_changes',
|
| 38 |
+
'multiple_subscriptions',
|
| 39 |
+
);
|
| 40 |
+
|
| 41 |
+
$this->supports = array_merge($this->supports,$supportSubscriptions);
|
| 42 |
+
}
|
| 43 |
+
|
| 44 |
+
|
| 45 |
+
/**
|
| 46 |
+
* @param $order_id
|
| 47 |
+
* @return array
|
| 48 |
+
* @throws Mollie_WC_Exception_InvalidApiKey
|
| 49 |
+
*/
|
| 50 |
+
public function process_subscription_payment( $order_id ) {
|
| 51 |
+
$this->isSubscriptionPayment = true;
|
| 52 |
+
return parent::process_payment($order_id);
|
| 53 |
+
}
|
| 54 |
+
|
| 55 |
+
/**
|
| 56 |
+
* @param $order
|
| 57 |
+
* @param $customer_id
|
| 58 |
+
* @return array
|
| 59 |
+
*/
|
| 60 |
+
protected function getPaymentRequestData($order, $customer_id)
|
| 61 |
+
{
|
| 62 |
+
$paymentRequestData = parent::getPaymentRequestData($order, $customer_id);
|
| 63 |
+
if ($this->isSubscriptionPayment){
|
| 64 |
+
$paymentRequestData['recurringType'] = 'first';
|
| 65 |
+
}
|
| 66 |
+
return $paymentRequestData;
|
| 67 |
+
}
|
| 68 |
+
|
| 69 |
+
/**
|
| 70 |
+
* @param $order
|
| 71 |
+
* @param $customer_id
|
| 72 |
+
* @return array
|
| 73 |
+
*/
|
| 74 |
+
protected function getRecurringPaymentRequestData($order, $customer_id)
|
| 75 |
+
{
|
| 76 |
+
$settings_helper = Mollie_WC_Plugin::getSettingsHelper();
|
| 77 |
+
$payment_description = $settings_helper->getPaymentDescription();
|
| 78 |
+
$payment_locale = $settings_helper->getPaymentLocale();
|
| 79 |
+
$mollie_method = $this->getMollieMethodId();
|
| 80 |
+
$selected_issuer = $this->getSelectedIssuer();
|
| 81 |
+
$return_url = $this->getReturnUrl($order);
|
| 82 |
+
$webhook_url = $this->getWebhookUrl($order);
|
| 83 |
+
|
| 84 |
+
$payment_description = strtr($payment_description, array(
|
| 85 |
+
'{order_number}' => $order->get_order_number(),
|
| 86 |
+
'{order_date}' => date_i18n(wc_date_format(), strtotime($order->order_date)),
|
| 87 |
+
));
|
| 88 |
+
|
| 89 |
+
$data = array_filter(array(
|
| 90 |
+
'amount' => $order->get_total(),
|
| 91 |
+
'description' => $payment_description,
|
| 92 |
+
'redirectUrl' => $return_url,
|
| 93 |
+
'webhookUrl' => $webhook_url,
|
| 94 |
+
'method' => $mollie_method,
|
| 95 |
+
'issuer' => $selected_issuer,
|
| 96 |
+
'locale' => $payment_locale,
|
| 97 |
+
'metadata' => array(
|
| 98 |
+
'order_id' => $order->id,
|
| 99 |
+
),
|
| 100 |
+
'recurringType' => 'recurring',
|
| 101 |
+
'customerId' => $customer_id,
|
| 102 |
+
));
|
| 103 |
+
return $data;
|
| 104 |
+
}
|
| 105 |
+
|
| 106 |
+
/**
|
| 107 |
+
* @param $order
|
| 108 |
+
* @param $payment
|
| 109 |
+
*/
|
| 110 |
+
protected function saveMollieInfo($order, $payment)
|
| 111 |
+
{
|
| 112 |
+
|
| 113 |
+
if (!$this->is_subscription($order->id)){
|
| 114 |
+
parent::saveMollieInfo($order,$payment);
|
| 115 |
+
return;
|
| 116 |
+
}
|
| 117 |
+
// Set active Mollie payment
|
| 118 |
+
$this->setActiveMolliePayment($order->id, $payment);
|
| 119 |
+
|
| 120 |
+
// Set Mollie customer
|
| 121 |
+
$this->setUserMollieCustomerId($order->id, $payment->customerId);
|
| 122 |
+
}
|
| 123 |
+
|
| 124 |
+
/**
|
| 125 |
+
* @param $amount_to_charge
|
| 126 |
+
* @param $renewal_order
|
| 127 |
+
* @return array
|
| 128 |
+
* @throws Mollie_WC_Exception_InvalidApiKey
|
| 129 |
+
*/
|
| 130 |
+
public function scheduled_subscription_payment( $amount_to_charge, $renewal_order )
|
| 131 |
+
{
|
| 132 |
+
if (!$renewal_order)
|
| 133 |
+
{
|
| 134 |
+
Mollie_WC_Plugin::debug($this->id . ': Could not process payment, order ' . $renewal_order->id . ' not found.');
|
| 135 |
+
|
| 136 |
+
Mollie_WC_Plugin::addNotice(sprintf(__('Could not load order %s', 'mollie-payments-for-woocommerce'), $renewal_order->id), 'error');
|
| 137 |
+
|
| 138 |
+
return array('result' => 'failure');
|
| 139 |
+
}
|
| 140 |
+
|
| 141 |
+
Mollie_WC_Plugin::debug($this->id . ': Try to create payment for order ' . $renewal_order->id);
|
| 142 |
+
$initial_order_status = $this->getInitialOrderStatus();
|
| 143 |
+
|
| 144 |
+
// Overwrite plugin-wide
|
| 145 |
+
$initial_order_status = apply_filters(Mollie_WC_Plugin::PLUGIN_ID . '_initial_order_status', $initial_order_status);
|
| 146 |
+
|
| 147 |
+
// Overwrite gateway-wide
|
| 148 |
+
$initial_order_status = apply_filters(Mollie_WC_Plugin::PLUGIN_ID . '_initial_order_status_' . $this->id, $initial_order_status);
|
| 149 |
+
|
| 150 |
+
$customer_id = $this->getOrderMollieCustomerId($renewal_order);
|
| 151 |
+
|
| 152 |
+
$data = $this->getRecurringPaymentRequestData($renewal_order, $customer_id);
|
| 153 |
+
|
| 154 |
+
$data = apply_filters('woocommerce_' . $this->id . '_args', $data, $renewal_order);
|
| 155 |
+
|
| 156 |
+
|
| 157 |
+
// Is test mode enabled?
|
| 158 |
+
$test_mode = $this->isTestModeEnabledForRenewalOrder($renewal_order);
|
| 159 |
+
try
|
| 160 |
+
{
|
| 161 |
+
Mollie_WC_Plugin::debug($this->id . ': Create payment for order ' . $renewal_order->id);
|
| 162 |
+
|
| 163 |
+
do_action(Mollie_WC_Plugin::PLUGIN_ID . '_create_payment', $data, $renewal_order);
|
| 164 |
+
$payment = null;
|
| 165 |
+
// Create Mollie payment with customer id.
|
| 166 |
+
try
|
| 167 |
+
{
|
| 168 |
+
Mollie_WC_Plugin::debug($this->id . ': Fetch mandate' . $renewal_order->id);
|
| 169 |
+
$mandates = Mollie_WC_Plugin::getApiHelper()->getApiClient($test_mode)->customers_mandates->withParentId($customer_id)->all();
|
| 170 |
+
$validMandate = false;
|
| 171 |
+
foreach ($mandates as $mandate) {
|
| 172 |
+
if ($mandate->status == 'valid') {
|
| 173 |
+
$validMandate = true;
|
| 174 |
+
$data['method'] = $mandate->method;
|
| 175 |
+
break;
|
| 176 |
+
}
|
| 177 |
+
}
|
| 178 |
+
if ($validMandate){
|
| 179 |
+
Mollie_WC_Plugin::debug($this->id . ': Valid mandate ' . $renewal_order->id);
|
| 180 |
+
$payment = Mollie_WC_Plugin::getApiHelper()->getApiClient($test_mode)->payments->create($data);
|
| 181 |
+
} else {
|
| 182 |
+
Mollie_WC_Plugin::debug($this->id . 'Payment problem ' . $renewal_order->id);
|
| 183 |
+
throw new Mollie_API_Exception(__('Payment cannot be processed.', 'mollie-payments-for-woocommerce-mandate-problem'));
|
| 184 |
+
}
|
| 185 |
+
}
|
| 186 |
+
catch (Mollie_API_Exception $e)
|
| 187 |
+
{
|
| 188 |
+
if ($e->getField() !== 'customerId')
|
| 189 |
+
{
|
| 190 |
+
throw $e;
|
| 191 |
+
}
|
| 192 |
+
|
| 193 |
+
// Retry without customer id.
|
| 194 |
+
unset($data['customerId']);
|
| 195 |
+
$payment = Mollie_WC_Plugin::getApiHelper()->getApiClient($test_mode)->payments->create($data);
|
| 196 |
+
}
|
| 197 |
+
Mollie_WC_Plugin::debug($this->id . ': Created payment for order ' . $renewal_order->id. ' payment json response '.json_encode($payment));
|
| 198 |
+
Mollie_WC_Plugin::getDataHelper()->unsetActiveMolliePayment($renewal_order->id);
|
| 199 |
+
// Set active Mollie payment
|
| 200 |
+
Mollie_WC_Plugin::getDataHelper()->setActiveMolliePayment($renewal_order->id, $payment);
|
| 201 |
+
|
| 202 |
+
// Set Mollie customer
|
| 203 |
+
$this->setUserMollieCustomerId($renewal_order->id, $payment->customerId);
|
| 204 |
+
|
| 205 |
+
do_action(Mollie_WC_Plugin::PLUGIN_ID . '_payment_created', $payment, $renewal_order);
|
| 206 |
+
|
| 207 |
+
Mollie_WC_Plugin::debug($this->id . ': Payment ' . $payment->id . ' (' . $payment->mode . ') created for order ' . $renewal_order->id);
|
| 208 |
+
|
| 209 |
+
// Set initial status
|
| 210 |
+
// Status is only updated if the new status is not the same as the default order status (pending)
|
| 211 |
+
$this->_updateScheduledPaymentOrder($renewal_order, $initial_order_status, $payment);
|
| 212 |
+
|
| 213 |
+
|
| 214 |
+
return array(
|
| 215 |
+
'result' => 'success',
|
| 216 |
+
);
|
| 217 |
+
}
|
| 218 |
+
catch (Mollie_API_Exception $e)
|
| 219 |
+
{
|
| 220 |
+
Mollie_WC_Plugin::debug($this->id . ': Failed to create payment for order ' . $renewal_order->id . ': ' . $e->getMessage());
|
| 221 |
+
|
| 222 |
+
/* translators: Placeholder 1: Payment method title */
|
| 223 |
+
$message = sprintf(__('Could not create %s payment.', 'mollie-payments-for-woocommerce'), $this->title);
|
| 224 |
+
|
| 225 |
+
if (defined('WP_DEBUG') && WP_DEBUG)
|
| 226 |
+
{
|
| 227 |
+
$message .= ' ' . $e->getMessage();
|
| 228 |
+
}
|
| 229 |
+
$renewal_order->update_status( 'failed',$message );
|
| 230 |
+
|
| 231 |
+
}
|
| 232 |
+
|
| 233 |
+
return array('result' => 'failure');
|
| 234 |
+
}
|
| 235 |
+
|
| 236 |
+
public function isTestModeEnabledForRenewalOrder($order)
|
| 237 |
+
{
|
| 238 |
+
$result = false;
|
| 239 |
+
$subscriptions = array();
|
| 240 |
+
if ( wcs_order_contains_renewal( $order->id) ) {
|
| 241 |
+
$subscriptions = wcs_get_subscriptions_for_renewal_order( $order->id );
|
| 242 |
+
}
|
| 243 |
+
|
| 244 |
+
foreach( $subscriptions as $subscription ) {
|
| 245 |
+
$paymentMode = get_post_meta( $subscription->id, '_mollie_payment_mode', true );
|
| 246 |
+
if ($paymentMode == self::PAYMENT_TEST_MODE){
|
| 247 |
+
$result = true;
|
| 248 |
+
break;
|
| 249 |
+
}
|
| 250 |
+
}
|
| 251 |
+
return $result;
|
| 252 |
+
}
|
| 253 |
+
/**
|
| 254 |
+
* @param $order_id
|
| 255 |
+
* @param Mollie_API_Object_Payment $payment
|
| 256 |
+
* @return $this
|
| 257 |
+
*/
|
| 258 |
+
public function setActiveMolliePayment ($order_id, Mollie_API_Object_Payment $payment)
|
| 259 |
+
{
|
| 260 |
+
add_post_meta($order_id, '_mollie_payment_id', $payment->id, $single = true);
|
| 261 |
+
add_post_meta($order_id, '_mollie_payment_mode', $payment->mode, $single = true);
|
| 262 |
+
|
| 263 |
+
delete_post_meta($order_id, '_mollie_cancelled_payment_id');
|
| 264 |
+
|
| 265 |
+
if ($payment->customerId)
|
| 266 |
+
{
|
| 267 |
+
add_post_meta($order_id, '_mollie_customer_id', $payment->customerId, $single = true);
|
| 268 |
+
}
|
| 269 |
+
|
| 270 |
+
// Also store it on the subscriptions being purchased or paid for in the order
|
| 271 |
+
if ( wcs_order_contains_subscription( $order_id) ) {
|
| 272 |
+
$subscriptions = wcs_get_subscriptions_for_order( $order_id);
|
| 273 |
+
} elseif ( wcs_order_contains_renewal( $order_id) ) {
|
| 274 |
+
$subscriptions = wcs_get_subscriptions_for_renewal_order( $order_id );
|
| 275 |
+
} else {
|
| 276 |
+
$subscriptions = array();
|
| 277 |
+
}
|
| 278 |
+
|
| 279 |
+
foreach( $subscriptions as $subscription ) {
|
| 280 |
+
$this->unsetActiveMolliePayment($subscription->id);
|
| 281 |
+
delete_post_meta($subscription->id, '_mollie_customer_id');
|
| 282 |
+
add_post_meta( $subscription->id, '_mollie_payment_id', $payment->id, $single = true );
|
| 283 |
+
add_post_meta( $subscription->id, '_mollie_payment_mode', $payment->mode, $single = true );
|
| 284 |
+
delete_post_meta($subscription->id, '_mollie_cancelled_payment_id');
|
| 285 |
+
if ($payment->customerId)
|
| 286 |
+
{
|
| 287 |
+
add_post_meta($subscription->id, '_mollie_customer_id', $payment->customerId, $single = true);
|
| 288 |
+
}
|
| 289 |
+
}
|
| 290 |
+
|
| 291 |
+
return $this;
|
| 292 |
+
}
|
| 293 |
+
|
| 294 |
+
/**
|
| 295 |
+
* @param $order_id
|
| 296 |
+
* @return $this
|
| 297 |
+
*/
|
| 298 |
+
public function unsetActiveMolliePayment ($order_id)
|
| 299 |
+
{
|
| 300 |
+
delete_post_meta($order_id, '_mollie_payment_id');
|
| 301 |
+
delete_post_meta($order_id, '_mollie_payment_mode');
|
| 302 |
+
|
| 303 |
+
return $this;
|
| 304 |
+
}
|
| 305 |
+
|
| 306 |
+
/**
|
| 307 |
+
* @param $orderId
|
| 308 |
+
* @param $customer_id
|
| 309 |
+
* @return $this
|
| 310 |
+
*/
|
| 311 |
+
public function setUserMollieCustomerId ($orderId, $customer_id)
|
| 312 |
+
{
|
| 313 |
+
if (!empty($customer_id))
|
| 314 |
+
{
|
| 315 |
+
update_post_meta($orderId, '_mollie_customer_id', $customer_id);
|
| 316 |
+
}
|
| 317 |
+
|
| 318 |
+
return $this;
|
| 319 |
+
}
|
| 320 |
+
|
| 321 |
+
/**
|
| 322 |
+
* @param $order
|
| 323 |
+
* @param bool|false $test_mode
|
| 324 |
+
* @return null|string
|
| 325 |
+
*/
|
| 326 |
+
protected function getUserMollieCustomerId($order, $test_mode = false)
|
| 327 |
+
{
|
| 328 |
+
$user_id = $order->customer_user;
|
| 329 |
+
if (empty($user_id)){
|
| 330 |
+
return null;
|
| 331 |
+
}
|
| 332 |
+
|
| 333 |
+
$customer_id = null;
|
| 334 |
+
try
|
| 335 |
+
{
|
| 336 |
+
$userdata = get_userdata($user_id);
|
| 337 |
+
|
| 338 |
+
$customer = Mollie_WC_Plugin::getApiHelper()->getApiClient($test_mode)->customers->create(array(
|
| 339 |
+
'name' => trim($userdata->user_nicename),
|
| 340 |
+
'email' => trim($userdata->user_email),
|
| 341 |
+
'locale' => trim($this->getCurrentLocale()),
|
| 342 |
+
'metadata' => array('user_id' => $user_id),
|
| 343 |
+
));
|
| 344 |
+
|
| 345 |
+
|
| 346 |
+
$customer_id = $customer->id;
|
| 347 |
+
}
|
| 348 |
+
catch (Exception $e)
|
| 349 |
+
{
|
| 350 |
+
Mollie_WC_Plugin::debug(
|
| 351 |
+
__FUNCTION__ . ": Could not create customer $user_id (" . ($test_mode ? 'test' : 'live') . "): " . $e->getMessage() . ' (' . get_class($e) . ')'
|
| 352 |
+
);
|
| 353 |
+
}
|
| 354 |
+
|
| 355 |
+
return $customer_id;
|
| 356 |
+
}
|
| 357 |
+
|
| 358 |
+
/**
|
| 359 |
+
* @return mixed
|
| 360 |
+
*/
|
| 361 |
+
protected function getCurrentLocale()
|
| 362 |
+
{
|
| 363 |
+
return apply_filters('wpml_current_language', get_locale());
|
| 364 |
+
}
|
| 365 |
+
|
| 366 |
+
/**
|
| 367 |
+
* @param $order
|
| 368 |
+
* @return mixed
|
| 369 |
+
*/
|
| 370 |
+
public function getOrderMollieCustomerId($order)
|
| 371 |
+
{
|
| 372 |
+
$customerId = get_post_meta( $order->id, '_mollie_customer_id', true );
|
| 373 |
+
return $customerId;
|
| 374 |
+
}
|
| 375 |
+
|
| 376 |
+
/**
|
| 377 |
+
* @param $renewal_order
|
| 378 |
+
* @param $initial_order_status
|
| 379 |
+
* @param $payment
|
| 380 |
+
*/
|
| 381 |
+
protected function _updateScheduledPaymentOrder($renewal_order, $initial_order_status, $payment)
|
| 382 |
+
{
|
| 383 |
+
$this->updateOrderStatus(
|
| 384 |
+
$renewal_order,
|
| 385 |
+
$initial_order_status,
|
| 386 |
+
__('Awaiting payment confirmation.', 'mollie-payments-for-woocommerce') . "\n"
|
| 387 |
+
);
|
| 388 |
+
|
| 389 |
+
$renewal_order->add_order_note(sprintf(
|
| 390 |
+
/* translators: Placeholder 1: Payment method title, placeholder 2: payment ID */
|
| 391 |
+
__('%s payment started (%s).', 'mollie-payments-for-woocommerce'),
|
| 392 |
+
$this->method_title,
|
| 393 |
+
$payment->id . ($payment->mode == 'test' ? (' - ' . __('test mode', 'mollie-payments-for-woocommerce')) : '')
|
| 394 |
+
));
|
| 395 |
+
}
|
| 396 |
+
|
| 397 |
+
/**
|
| 398 |
+
* @param $resubscribe_order
|
| 399 |
+
*/
|
| 400 |
+
public function delete_resubscribe_meta( $resubscribe_order )
|
| 401 |
+
{
|
| 402 |
+
$this->delete_renewal_meta( $resubscribe_order );
|
| 403 |
+
}
|
| 404 |
+
|
| 405 |
+
/**
|
| 406 |
+
* @param $renewal_order
|
| 407 |
+
* @return mixed
|
| 408 |
+
*/
|
| 409 |
+
public function delete_renewal_meta( $renewal_order )
|
| 410 |
+
{
|
| 411 |
+
delete_post_meta( $renewal_order->id, '_mollie_card_4_digits' );
|
| 412 |
+
delete_post_meta( $renewal_order->id, '_mollie_payment_id' );
|
| 413 |
+
delete_post_meta( $renewal_order->id, '_mollie_payment_mode' );
|
| 414 |
+
delete_post_meta( $renewal_order->id, '_mollie_cancelled_payment_id' );
|
| 415 |
+
return $renewal_order;
|
| 416 |
+
}
|
| 417 |
+
|
| 418 |
+
/**
|
| 419 |
+
* @param $payment_meta
|
| 420 |
+
* @param $subscription
|
| 421 |
+
* @return mixed
|
| 422 |
+
*/
|
| 423 |
+
public function add_subscription_payment_meta( $payment_meta, $subscription )
|
| 424 |
+
{
|
| 425 |
+
$payment_meta[ $this->id ] = array(
|
| 426 |
+
'post_meta' => array(
|
| 427 |
+
'_mollie_payment_id' => array(
|
| 428 |
+
'value' => get_post_meta( $subscription->id, '_mollie_payment_id', true ),
|
| 429 |
+
'label' => 'Mollie Payment ID',
|
| 430 |
+
),
|
| 431 |
+
'_mollie_payment_mode' => array(
|
| 432 |
+
'value' => get_post_meta( $subscription->id, '_mollie_payment_mode', true ),
|
| 433 |
+
'label' => 'Mollie Payment Mode',
|
| 434 |
+
),
|
| 435 |
+
'_mollie_customer_id' => array(
|
| 436 |
+
'value' => get_post_meta( $subscription->id, '_mollie_customer_id', true ),
|
| 437 |
+
'label' => 'Mollie Customer ID',
|
| 438 |
+
),
|
| 439 |
+
),
|
| 440 |
+
);
|
| 441 |
+
return $payment_meta;
|
| 442 |
+
}
|
| 443 |
+
|
| 444 |
+
/**
|
| 445 |
+
* @param $payment_method_id
|
| 446 |
+
* @param $payment_meta
|
| 447 |
+
* @throws Exception
|
| 448 |
+
*/
|
| 449 |
+
public function validate_subscription_payment_meta( $payment_method_id, $payment_meta )
|
| 450 |
+
{
|
| 451 |
+
if ( $this->id === $payment_method_id ) {
|
| 452 |
+
|
| 453 |
+
if ( ! isset( $payment_meta['post_meta']['_mollie_customer_id']['value'] ) || empty( $payment_meta['post_meta']['_mollie_customer_id']['value'] ) ) {
|
| 454 |
+
throw new Exception( 'A "_mollie_customer_id" value is required.' );
|
| 455 |
+
}
|
| 456 |
+
}
|
| 457 |
+
}
|
| 458 |
+
|
| 459 |
+
/**
|
| 460 |
+
* @param $subscription
|
| 461 |
+
* @param $renewal_order
|
| 462 |
+
*/
|
| 463 |
+
public function update_failing_payment_method( $subscription, $renewal_order )
|
| 464 |
+
{
|
| 465 |
+
update_post_meta( $subscription->id, '_mollie_customer_id', $renewal_order->mollie_customer_id );
|
| 466 |
+
update_post_meta( $subscription->id, '_mollie_payment_id', $renewal_order->mollie_payment_id );
|
| 467 |
+
}
|
| 468 |
+
|
| 469 |
+
/**
|
| 470 |
+
* @param int $order_id
|
| 471 |
+
* @return array
|
| 472 |
+
*/
|
| 473 |
+
public function process_payment ($order_id)
|
| 474 |
+
{
|
| 475 |
+
$isSubscription = $this->is_subscription($order_id);
|
| 476 |
+
if ($isSubscription){
|
| 477 |
+
$result = $this->process_subscription_payment($order_id);
|
| 478 |
+
return $result;
|
| 479 |
+
}
|
| 480 |
+
|
| 481 |
+
$result = parent::process_payment($order_id);
|
| 482 |
+
return $result;
|
| 483 |
+
|
| 484 |
+
}
|
| 485 |
+
|
| 486 |
+
/**
|
| 487 |
+
* @param $order_id
|
| 488 |
+
* @return bool
|
| 489 |
+
*/
|
| 490 |
+
protected function is_subscription( $order_id )
|
| 491 |
+
{
|
| 492 |
+
return ( function_exists( 'wcs_order_contains_subscription' ) && ( wcs_order_contains_subscription( $order_id ) || wcs_is_subscription( $order_id ) || wcs_order_contains_renewal( $order_id ) ) );
|
| 493 |
+
}
|
| 494 |
+
|
| 495 |
+
}
|
includes/mollie/wc/gateway/belfius.php
CHANGED
|
@@ -1,5 +1,5 @@
|
|
| 1 |
<?php
|
| 2 |
-
class Mollie_WC_Gateway_Belfius extends
|
| 3 |
{
|
| 4 |
/**
|
| 5 |
*
|
| 1 |
<?php
|
| 2 |
+
class Mollie_WC_Gateway_Belfius extends Mollie_WC_Gateway_AbstractSepaRecurring
|
| 3 |
{
|
| 4 |
/**
|
| 5 |
*
|
includes/mollie/wc/gateway/creditcard.php
CHANGED
|
@@ -1,5 +1,5 @@
|
|
| 1 |
<?php
|
| 2 |
-
class Mollie_WC_Gateway_Creditcard extends
|
| 3 |
{
|
| 4 |
/**
|
| 5 |
*
|
|
@@ -10,7 +10,7 @@ class Mollie_WC_Gateway_Creditcard extends Mollie_WC_Gateway_Abstract
|
|
| 10 |
'products',
|
| 11 |
'refunds',
|
| 12 |
);
|
| 13 |
-
|
| 14 |
parent::__construct();
|
| 15 |
}
|
| 16 |
|
| 1 |
<?php
|
| 2 |
+
class Mollie_WC_Gateway_Creditcard extends Mollie_WC_Gateway_AbstractSubscription
|
| 3 |
{
|
| 4 |
/**
|
| 5 |
*
|
| 10 |
'products',
|
| 11 |
'refunds',
|
| 12 |
);
|
| 13 |
+
$this->initSubscriptionSupport();
|
| 14 |
parent::__construct();
|
| 15 |
}
|
| 16 |
|
includes/mollie/wc/gateway/ideal.php
CHANGED
|
@@ -1,5 +1,5 @@
|
|
| 1 |
<?php
|
| 2 |
-
class Mollie_WC_Gateway_Ideal extends
|
| 3 |
{
|
| 4 |
/**
|
| 5 |
*
|
| 1 |
<?php
|
| 2 |
+
class Mollie_WC_Gateway_Ideal extends Mollie_WC_Gateway_AbstractSepaRecurring
|
| 3 |
{
|
| 4 |
/**
|
| 5 |
*
|
includes/mollie/wc/gateway/mistercash.php
CHANGED
|
@@ -1,5 +1,5 @@
|
|
| 1 |
<?php
|
| 2 |
-
class Mollie_WC_Gateway_MisterCash extends
|
| 3 |
{
|
| 4 |
/**
|
| 5 |
*
|
| 1 |
<?php
|
| 2 |
+
class Mollie_WC_Gateway_MisterCash extends Mollie_WC_Gateway_AbstractSepaRecurring
|
| 3 |
{
|
| 4 |
/**
|
| 5 |
*
|
includes/mollie/wc/gateway/sofort.php
CHANGED
|
@@ -1,5 +1,5 @@
|
|
| 1 |
<?php
|
| 2 |
-
class Mollie_WC_Gateway_Sofort extends
|
| 3 |
{
|
| 4 |
/**
|
| 5 |
*
|
| 1 |
<?php
|
| 2 |
+
class Mollie_WC_Gateway_Sofort extends Mollie_WC_Gateway_AbstractSepaRecurring
|
| 3 |
{
|
| 4 |
/**
|
| 5 |
*
|
includes/mollie/wc/helper/data.php
CHANGED
|
@@ -12,7 +12,12 @@ class Mollie_WC_Helper_Data
|
|
| 12 |
/**
|
| 13 |
* @var Mollie_API_Object_Method[]|Mollie_API_Object_List|array
|
| 14 |
*/
|
| 15 |
-
protected static $
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 16 |
|
| 17 |
/**
|
| 18 |
* @var Mollie_API_Object_Issuer[]|Mollie_API_Object_List|array
|
|
@@ -239,24 +244,77 @@ class Mollie_WC_Helper_Data
|
|
| 239 |
return NULL;
|
| 240 |
}
|
| 241 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 242 |
/**
|
| 243 |
* @param bool $test_mode (default: false)
|
| 244 |
* @param bool $use_cache (default: true)
|
| 245 |
* @return array|Mollie_API_Object_List|Mollie_API_Object_Method[]
|
| 246 |
*/
|
| 247 |
-
public function
|
| 248 |
{
|
| 249 |
// Already initialized
|
| 250 |
-
if ($use_cache && !empty(self::$
|
| 251 |
{
|
| 252 |
-
return self::$
|
| 253 |
}
|
| 254 |
|
| 255 |
-
$locale = $this->getCurrentLocale();
|
| 256 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 257 |
try
|
| 258 |
{
|
| 259 |
-
$
|
|
|
|
| 260 |
|
| 261 |
if ($use_cache)
|
| 262 |
{
|
|
@@ -264,22 +322,37 @@ class Mollie_WC_Helper_Data
|
|
| 264 |
|
| 265 |
if ($cached && $cached instanceof Mollie_API_Object_List)
|
| 266 |
{
|
| 267 |
-
return
|
| 268 |
}
|
| 269 |
}
|
| 270 |
|
| 271 |
-
|
| 272 |
|
| 273 |
-
set_transient($transient_id,
|
| 274 |
|
| 275 |
-
return
|
| 276 |
}
|
| 277 |
catch (Mollie_API_Exception $e)
|
| 278 |
{
|
| 279 |
Mollie_WC_Plugin::debug(__FUNCTION__ . ": Could not load Mollie methods (" . ($test_mode ? 'test' : 'live') . "): " . $e->getMessage() . ' (' . get_class($e) . ')');
|
| 280 |
}
|
| 281 |
|
| 282 |
-
return
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 283 |
}
|
| 284 |
|
| 285 |
/**
|
|
@@ -289,7 +362,7 @@ class Mollie_WC_Helper_Data
|
|
| 289 |
*/
|
| 290 |
public function getPaymentMethod ($test_mode = false, $method)
|
| 291 |
{
|
| 292 |
-
$payment_methods = $this->
|
| 293 |
|
| 294 |
foreach ($payment_methods as $payment_method)
|
| 295 |
{
|
| 12 |
/**
|
| 13 |
* @var Mollie_API_Object_Method[]|Mollie_API_Object_List|array
|
| 14 |
*/
|
| 15 |
+
protected static $regular_api_methods = array();
|
| 16 |
+
|
| 17 |
+
/**
|
| 18 |
+
* @var Mollie_API_Object_Method[]|Mollie_API_Object_List|array
|
| 19 |
+
*/
|
| 20 |
+
protected static $recurring_api_methods = array();
|
| 21 |
|
| 22 |
/**
|
| 23 |
* @var Mollie_API_Object_Issuer[]|Mollie_API_Object_List|array
|
| 244 |
return NULL;
|
| 245 |
}
|
| 246 |
|
| 247 |
+
|
| 248 |
+
/**
|
| 249 |
+
* @param bool|false $test_mode
|
| 250 |
+
* @param bool|true $use_cache
|
| 251 |
+
* @return array|Mollie_API_Object_Method[]
|
| 252 |
+
*/
|
| 253 |
+
public function getAllPaymentMethods($test_mode = false, $use_cache = true)
|
| 254 |
+
{
|
| 255 |
+
$result = $this->getRegularPaymentMethods($test_mode, $use_cache);
|
| 256 |
+
$recurringPaymentMethods = $this->getRecurringPaymentMethods($test_mode, $use_cache);
|
| 257 |
+
foreach ($recurringPaymentMethods as $recurringItem){
|
| 258 |
+
$notFound = true;
|
| 259 |
+
foreach ($result as $item){
|
| 260 |
+
if ($item->id == $recurringItem->id){
|
| 261 |
+
$notFound = false;
|
| 262 |
+
break;
|
| 263 |
+
}
|
| 264 |
+
}
|
| 265 |
+
if ($notFound){
|
| 266 |
+
$result[] = $recurringItem;
|
| 267 |
+
}
|
| 268 |
+
}
|
| 269 |
+
|
| 270 |
+
|
| 271 |
+
return $result;
|
| 272 |
+
}
|
| 273 |
+
|
| 274 |
/**
|
| 275 |
* @param bool $test_mode (default: false)
|
| 276 |
* @param bool $use_cache (default: true)
|
| 277 |
* @return array|Mollie_API_Object_List|Mollie_API_Object_Method[]
|
| 278 |
*/
|
| 279 |
+
public function getRegularPaymentMethods ($test_mode = false, $use_cache = true)
|
| 280 |
{
|
| 281 |
// Already initialized
|
| 282 |
+
if ($use_cache && !empty(self::$regular_api_methods))
|
| 283 |
{
|
| 284 |
+
return self::$regular_api_methods;
|
| 285 |
}
|
| 286 |
|
|
|
|
| 287 |
|
| 288 |
+
self::$regular_api_methods = $this->getApiPaymentMethods($test_mode, $use_cache);
|
| 289 |
+
|
| 290 |
+
return self::$regular_api_methods;
|
| 291 |
+
}
|
| 292 |
+
|
| 293 |
+
|
| 294 |
+
|
| 295 |
+
public function getRecurringPaymentMethods($test_mode = false, $use_cache = true)
|
| 296 |
+
{
|
| 297 |
+
// Already initialized
|
| 298 |
+
if ($use_cache && !empty(self::$recurring_api_methods))
|
| 299 |
+
{
|
| 300 |
+
return self::$recurring_api_methods;
|
| 301 |
+
}
|
| 302 |
+
|
| 303 |
+
|
| 304 |
+
self::$recurring_api_methods = $this->getApiPaymentMethods($test_mode, $use_cache,['recurringType'=>'recurring']);
|
| 305 |
+
|
| 306 |
+
return self::$recurring_api_methods;
|
| 307 |
+
}
|
| 308 |
+
|
| 309 |
+
protected function getApiPaymentMethods($test_mode = false, $use_cache = true, $filters = array())
|
| 310 |
+
{
|
| 311 |
+
$result = array();
|
| 312 |
+
|
| 313 |
+
$locale = $this->getCurrentLocale();
|
| 314 |
try
|
| 315 |
{
|
| 316 |
+
$filtersKey = implode('_',array_keys($filters));
|
| 317 |
+
$transient_id = $this->getTransientId('api_methods_' . ($test_mode ? 'test' : 'live') . "_$locale". $filtersKey);
|
| 318 |
|
| 319 |
if ($use_cache)
|
| 320 |
{
|
| 322 |
|
| 323 |
if ($cached && $cached instanceof Mollie_API_Object_List)
|
| 324 |
{
|
| 325 |
+
return $cached;
|
| 326 |
}
|
| 327 |
}
|
| 328 |
|
| 329 |
+
$result = $this->api_helper->getApiClient($test_mode)->methods->all(0,0,$filters);
|
| 330 |
|
| 331 |
+
set_transient($transient_id, $result, MINUTE_IN_SECONDS * 5);
|
| 332 |
|
| 333 |
+
return $result;
|
| 334 |
}
|
| 335 |
catch (Mollie_API_Exception $e)
|
| 336 |
{
|
| 337 |
Mollie_WC_Plugin::debug(__FUNCTION__ . ": Could not load Mollie methods (" . ($test_mode ? 'test' : 'live') . "): " . $e->getMessage() . ' (' . get_class($e) . ')');
|
| 338 |
}
|
| 339 |
|
| 340 |
+
return $result;
|
| 341 |
+
}
|
| 342 |
+
|
| 343 |
+
public function isRecurringPaymentMethodAvailable($methodId, $test_mode = false)
|
| 344 |
+
{
|
| 345 |
+
$result = false;
|
| 346 |
+
|
| 347 |
+
$recurringPaymentMethods = $this->getRecurringPaymentMethods($test_mode);
|
| 348 |
+
foreach ($recurringPaymentMethods as $paymentMethod){
|
| 349 |
+
if ($paymentMethod->id == $methodId){
|
| 350 |
+
$result = true;
|
| 351 |
+
break;
|
| 352 |
+
}
|
| 353 |
+
}
|
| 354 |
+
|
| 355 |
+
return $result;
|
| 356 |
}
|
| 357 |
|
| 358 |
/**
|
| 362 |
*/
|
| 363 |
public function getPaymentMethod ($test_mode = false, $method)
|
| 364 |
{
|
| 365 |
+
$payment_methods = $this->getAllPaymentMethods($test_mode);
|
| 366 |
|
| 367 |
foreach ($payment_methods as $payment_method)
|
| 368 |
{
|
includes/mollie/wc/helper/settings.php
CHANGED
|
@@ -1,6 +1,7 @@
|
|
| 1 |
<?php
|
| 2 |
class Mollie_WC_Helper_Settings
|
| 3 |
{
|
|
|
|
| 4 |
/**
|
| 5 |
* @return bool
|
| 6 |
*/
|
|
@@ -184,7 +185,7 @@ class Mollie_WC_Helper_Settings
|
|
| 184 |
if (isset($_GET['refresh-methods']) && check_admin_referer('refresh-methods'))
|
| 185 |
{
|
| 186 |
/* Reload active Mollie methods */
|
| 187 |
-
$data_helper->
|
| 188 |
}
|
| 189 |
|
| 190 |
$icon_available = ' <span style="color: green; cursor: help;" title="' . __('Gateway enabled', 'mollie-payments-for-woocommerce'). '">' . strtolower(__('Enabled', 'mollie-payments-for-woocommerce')) . '</span>';
|
|
@@ -378,6 +379,22 @@ class Mollie_WC_Helper_Settings
|
|
| 378 |
return $this->mergeSettings($settings, $mollie_settings);
|
| 379 |
}
|
| 380 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 381 |
/**
|
| 382 |
* @param string $setting
|
| 383 |
* @return string
|
| 1 |
<?php
|
| 2 |
class Mollie_WC_Helper_Settings
|
| 3 |
{
|
| 4 |
+
const DEFAULT_TIME_PAYMENT_CONFIRMATION_CHECK = '3:00';
|
| 5 |
/**
|
| 6 |
* @return bool
|
| 7 |
*/
|
| 185 |
if (isset($_GET['refresh-methods']) && check_admin_referer('refresh-methods'))
|
| 186 |
{
|
| 187 |
/* Reload active Mollie methods */
|
| 188 |
+
$data_helper->getAllPaymentMethods($test_mode, $use_cache = false);
|
| 189 |
}
|
| 190 |
|
| 191 |
$icon_available = ' <span style="color: green; cursor: help;" title="' . __('Gateway enabled', 'mollie-payments-for-woocommerce'). '">' . strtolower(__('Enabled', 'mollie-payments-for-woocommerce')) . '</span>';
|
| 379 |
return $this->mergeSettings($settings, $mollie_settings);
|
| 380 |
}
|
| 381 |
|
| 382 |
+
public function getPaymentConfirmationCheckTime()
|
| 383 |
+
{
|
| 384 |
+
$time = strtotime(self::DEFAULT_TIME_PAYMENT_CONFIRMATION_CHECK);
|
| 385 |
+
$date = new DateTime();
|
| 386 |
+
|
| 387 |
+
if ($date->getTimestamp() > $time){
|
| 388 |
+
$date->setTimestamp($time);
|
| 389 |
+
$date->add(new DateInterval('P1D'));
|
| 390 |
+
} else {
|
| 391 |
+
$date->setTimestamp($time);
|
| 392 |
+
}
|
| 393 |
+
|
| 394 |
+
|
| 395 |
+
return $date->getTimestamp();
|
| 396 |
+
}
|
| 397 |
+
|
| 398 |
/**
|
| 399 |
* @param string $setting
|
| 400 |
* @return string
|
includes/mollie/wc/plugin.php
CHANGED
|
@@ -6,7 +6,11 @@ class Mollie_WC_Plugin
|
|
| 6 |
{
|
| 7 |
const PLUGIN_ID = 'mollie-payments-for-woocommerce';
|
| 8 |
const PLUGIN_TITLE = 'Mollie Payments for WooCommerce';
|
| 9 |
-
const PLUGIN_VERSION = '2.
|
|
|
|
|
|
|
|
|
|
|
|
|
| 10 |
|
| 11 |
/**
|
| 12 |
* @var bool
|
|
@@ -32,6 +36,92 @@ class Mollie_WC_Plugin
|
|
| 32 |
|
| 33 |
private function __construct () {}
|
| 34 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 35 |
/**
|
| 36 |
* Initialize plugin
|
| 37 |
*/
|
|
@@ -62,6 +152,9 @@ class Mollie_WC_Plugin
|
|
| 62 |
// On order details
|
| 63 |
add_action('woocommerce_order_details_after_order_table', array(__CLASS__, 'onOrderDetails'), 10, 1);
|
| 64 |
|
|
|
|
|
|
|
|
|
|
| 65 |
// Mark plugin initiated
|
| 66 |
self::$initiated = true;
|
| 67 |
}
|
|
@@ -351,3 +444,4 @@ class Mollie_WC_Plugin
|
|
| 351 |
return $status_helper;
|
| 352 |
}
|
| 353 |
}
|
|
|
| 6 |
{
|
| 7 |
const PLUGIN_ID = 'mollie-payments-for-woocommerce';
|
| 8 |
const PLUGIN_TITLE = 'Mollie Payments for WooCommerce';
|
| 9 |
+
const PLUGIN_VERSION = '2.5.2';
|
| 10 |
+
|
| 11 |
+
const DB_VERSION = '1.0';
|
| 12 |
+
const DB_VERSION_PARAM_NAME = 'mollie-db-version';
|
| 13 |
+
const PENDING_PAYMENT_DB_TABLE_NAME = 'mollie_pending_payment';
|
| 14 |
|
| 15 |
/**
|
| 16 |
* @var bool
|
| 36 |
|
| 37 |
private function __construct () {}
|
| 38 |
|
| 39 |
+
/**
|
| 40 |
+
*
|
| 41 |
+
*/
|
| 42 |
+
public static function schedulePendingPaymentOrdersExpirationCheck()
|
| 43 |
+
{
|
| 44 |
+
if ( class_exists( 'WC_Subscriptions_Order' ) ) {
|
| 45 |
+
$settings_helper = self::getSettingsHelper();
|
| 46 |
+
$time = $settings_helper->getPaymentConfirmationCheckTime();
|
| 47 |
+
$nextScheduledTime = wp_next_scheduled('pending_payment_confirmation_check');
|
| 48 |
+
if (!$nextScheduledTime) {
|
| 49 |
+
wp_schedule_event($time, 'daily', 'pending_payment_confirmation_check');
|
| 50 |
+
}
|
| 51 |
+
|
| 52 |
+
add_action('pending_payment_confirmation_check', array(__CLASS__, 'checkPendingPaymentOrdersExpiration'));
|
| 53 |
+
}
|
| 54 |
+
|
| 55 |
+
}
|
| 56 |
+
|
| 57 |
+
/**
|
| 58 |
+
*
|
| 59 |
+
*/
|
| 60 |
+
public static function initDb()
|
| 61 |
+
{
|
| 62 |
+
global $wpdb;
|
| 63 |
+
$wpdb->mollie_pending_payment = $wpdb->prefix . self::PENDING_PAYMENT_DB_TABLE_NAME;
|
| 64 |
+
if(get_option(self::DB_VERSION_PARAM_NAME, '') != self::DB_VERSION){
|
| 65 |
+
|
| 66 |
+
global $wpdb;
|
| 67 |
+
$pendingPaymentConfirmTable = $wpdb->prefix . self::PENDING_PAYMENT_DB_TABLE_NAME;
|
| 68 |
+
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
|
| 69 |
+
if($wpdb->get_var("show tables like '$pendingPaymentConfirmTable'") != $pendingPaymentConfirmTable) {
|
| 70 |
+
$sql = "CREATE TABLE " . $pendingPaymentConfirmTable . " (
|
| 71 |
+
`id` int(11) NOT NULL AUTO_INCREMENT,
|
| 72 |
+
`post_id` bigint NOT NULL,
|
| 73 |
+
`expired_time` int NOT NULL,
|
| 74 |
+
UNIQUE KEY id (id)
|
| 75 |
+
);";
|
| 76 |
+
dbDelta($sql);
|
| 77 |
+
}
|
| 78 |
+
update_option(self::DB_VERSION_PARAM_NAME, self::DB_VERSION);
|
| 79 |
+
}
|
| 80 |
+
|
| 81 |
+
}
|
| 82 |
+
|
| 83 |
+
/**
|
| 84 |
+
*
|
| 85 |
+
*/
|
| 86 |
+
public static function checkPendingPaymentOrdersExpiration()
|
| 87 |
+
{
|
| 88 |
+
global $wpdb;
|
| 89 |
+
$currentDate = new DateTime();
|
| 90 |
+
$items = $wpdb->get_results("SELECT * FROM {$wpdb->mollie_pending_payment} WHERE expired_time < {$currentDate->getTimestamp()};");
|
| 91 |
+
foreach ($items as $item){
|
| 92 |
+
$order = wc_get_order( $item->post_id );
|
| 93 |
+
if ($order->get_status() == Mollie_WC_Gateway_Abstract::STATUS_COMPLETED){
|
| 94 |
+
|
| 95 |
+
$new_order_status = Mollie_WC_Gateway_Abstract::STATUS_FAILED;
|
| 96 |
+
$paymentMethodId = get_post_meta( $order->id, '_payment_method_title', true );
|
| 97 |
+
$molliePaymentId = get_post_meta( $order->id, '_mollie_payment_id', true );
|
| 98 |
+
|
| 99 |
+
$order->add_order_note(sprintf(
|
| 100 |
+
/* translators: Placeholder 1: payment method title, placeholder 2: payment ID */
|
| 101 |
+
__('%s payment failed (%s).', 'mollie-payments-for-woocommerce'),
|
| 102 |
+
$paymentMethodId,$molliePaymentId
|
| 103 |
+
));
|
| 104 |
+
|
| 105 |
+
$order->update_status($new_order_status, '');
|
| 106 |
+
|
| 107 |
+
if (get_post_meta($order->id, '_order_stock_reduced', $single = true)) {
|
| 108 |
+
// Restore order stock
|
| 109 |
+
Mollie_WC_Plugin::getDataHelper()->restoreOrderStock($order);
|
| 110 |
+
|
| 111 |
+
Mollie_WC_Plugin::debug(__METHOD__ . " Stock for order {$order->id} restored.");
|
| 112 |
+
}
|
| 113 |
+
|
| 114 |
+
$wpdb->delete(
|
| 115 |
+
$wpdb->mollie_pending_payment,
|
| 116 |
+
array(
|
| 117 |
+
'post_id' => $order->id,
|
| 118 |
+
)
|
| 119 |
+
);
|
| 120 |
+
}
|
| 121 |
+
}
|
| 122 |
+
|
| 123 |
+
}
|
| 124 |
+
|
| 125 |
/**
|
| 126 |
* Initialize plugin
|
| 127 |
*/
|
| 152 |
// On order details
|
| 153 |
add_action('woocommerce_order_details_after_order_table', array(__CLASS__, 'onOrderDetails'), 10, 1);
|
| 154 |
|
| 155 |
+
|
| 156 |
+
self::initDb();
|
| 157 |
+
self::schedulePendingPaymentOrdersExpirationCheck();
|
| 158 |
// Mark plugin initiated
|
| 159 |
self::$initiated = true;
|
| 160 |
}
|
| 444 |
return $status_helper;
|
| 445 |
}
|
| 446 |
}
|
| 447 |
+
|
mollie-payments-for-woocommerce.php
CHANGED
|
@@ -3,11 +3,11 @@
|
|
| 3 |
* Plugin Name: Mollie Payments for WooCommerce
|
| 4 |
* Plugin URI: https://github.com/mollie/WooCommerce
|
| 5 |
* Description: Accept payments in WooCommerce with the official Mollie plugin
|
| 6 |
-
* Version: 2.
|
| 7 |
* Author: Mollie
|
| 8 |
* Author URI: https://www.mollie.com
|
| 9 |
* Requires at least: 3.8
|
| 10 |
-
* Tested up to: 4.
|
| 11 |
* Text Domain: mollie-payments-for-woocommerce
|
| 12 |
* Domain Path: /i18n/languages/
|
| 13 |
* License: GPLv2 or later
|
|
@@ -90,6 +90,10 @@ function mollie_wc_plugin_admin_init ()
|
|
| 90 |
|
| 91 |
function mollie_wc_plugin_deactivated ()
|
| 92 |
{
|
|
|
|
|
|
|
|
|
|
|
|
|
| 93 |
echo '<div class="error"><p>' . sprintf(__('%s deactivated because it depends on WooCommerce.', 'mollie-payments-for-woocommerce'), Mollie_WC_Plugin::PLUGIN_TITLE) . '</p></div>';
|
| 94 |
}
|
| 95 |
|
| 3 |
* Plugin Name: Mollie Payments for WooCommerce
|
| 4 |
* Plugin URI: https://github.com/mollie/WooCommerce
|
| 5 |
* Description: Accept payments in WooCommerce with the official Mollie plugin
|
| 6 |
+
* Version: 2.5.2
|
| 7 |
* Author: Mollie
|
| 8 |
* Author URI: https://www.mollie.com
|
| 9 |
* Requires at least: 3.8
|
| 10 |
+
* Tested up to: 4.7.2
|
| 11 |
* Text Domain: mollie-payments-for-woocommerce
|
| 12 |
* Domain Path: /i18n/languages/
|
| 13 |
* License: GPLv2 or later
|
| 90 |
|
| 91 |
function mollie_wc_plugin_deactivated ()
|
| 92 |
{
|
| 93 |
+
$nextScheduledTime = wp_next_scheduled( 'pending_payment_confirmation_check' ) ;
|
| 94 |
+
if ($nextScheduledTime) {
|
| 95 |
+
wp_unschedule_event( $nextScheduledTime, 'pending_payment_confirmation_check' );
|
| 96 |
+
}
|
| 97 |
echo '<div class="error"><p>' . sprintf(__('%s deactivated because it depends on WooCommerce.', 'mollie-payments-for-woocommerce'), Mollie_WC_Plugin::PLUGIN_TITLE) . '</p></div>';
|
| 98 |
}
|
| 99 |
|
readme.txt
CHANGED
|
@@ -1,9 +1,9 @@
|
|
| 1 |
=== Mollie Payments for WooCommerce ===
|
| 2 |
Contributors: l.vangunst, daanvm, ndijkstra, robin-mollie
|
| 3 |
-
Tags: mollie, payments, woocommerce, e-commerce, webshop, psp, ideal, sofort, credit card, creditcard, visa, mastercard, mistercash, bancontact, bitcoin, paysafecard, direct debit, incasso, sepa, banktransfer, overboeking, betalingen
|
| 4 |
Requires at least: 3.8
|
| 5 |
-
Tested up to: 4.
|
| 6 |
-
Stable tag: 2.
|
| 7 |
License: GPLv2 or later
|
| 8 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
| 9 |
|
|
@@ -14,10 +14,9 @@ Accept payments in WooCommerce with the official Mollie plugin
|
|
| 14 |
This plugin will add support for the following Mollie payments methods to your WooCommerce webshop:
|
| 15 |
|
| 16 |
* iDEAL
|
| 17 |
-
*
|
| 18 |
* Credit card
|
| 19 |
* Bancontact / Mister Cash
|
| 20 |
-
* SEPA Direct Debit
|
| 21 |
* PayPal
|
| 22 |
* SOFORT banking
|
| 23 |
* Belfius Direct Net
|
|
@@ -30,6 +29,7 @@ Please go to the [signup page](https://www.mollie.com/nl/signup) to create a new
|
|
| 30 |
= Features =
|
| 31 |
|
| 32 |
* Support for all available Mollie payment methods
|
|
|
|
| 33 |
* Edit order, title, description for every payment method
|
| 34 |
* Refunds (WooCommerce 2.2+)
|
| 35 |
* Multiple translations: English, Dutch, German and French
|
|
@@ -113,6 +113,11 @@ Automatic updates should work like a charm; as always though, ensure you backup
|
|
| 113 |
|
| 114 |
== Changelog ==
|
| 115 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 116 |
= 2.4.1 - 10/10/2016 =
|
| 117 |
* Fix 2.4.0 release (https://wordpress.org/support/topic/error-500-after-updating)
|
| 118 |
|
|
@@ -164,6 +169,9 @@ WooCommerce -> Settings -> Checkout -> Mollie - Bank Transfer.
|
|
| 164 |
|
| 165 |
== Upgrade Notice ==
|
| 166 |
|
|
|
|
|
|
|
|
|
|
| 167 |
= 2.0.0 =
|
| 168 |
* The 2.x version of the plugin uses a different plugin name. You can still run version 1.x of our plugin if you want to temporary
|
| 169 |
keep support for payments created using version 1.x. Hide the old payment gateways by disabling the old 'Mollie Payment Module' payment gateway in WooCommerce -> Settings -> Checkout.
|
| 1 |
=== Mollie Payments for WooCommerce ===
|
| 2 |
Contributors: l.vangunst, daanvm, ndijkstra, robin-mollie
|
| 3 |
+
Tags: mollie, payments, woocommerce, e-commerce, webshop, psp, ideal, sofort, credit card, creditcard, visa, mastercard, mistercash, bancontact, bitcoin, paysafecard, direct debit, incasso, sepa, banktransfer, overboeking, betalingen, recurring, subscriptions
|
| 4 |
Requires at least: 3.8
|
| 5 |
+
Tested up to: 4.7.2
|
| 6 |
+
Stable tag: 2.5.2
|
| 7 |
License: GPLv2 or later
|
| 8 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
| 9 |
|
| 14 |
This plugin will add support for the following Mollie payments methods to your WooCommerce webshop:
|
| 15 |
|
| 16 |
* iDEAL
|
| 17 |
+
* Bank transfer
|
| 18 |
* Credit card
|
| 19 |
* Bancontact / Mister Cash
|
|
|
|
| 20 |
* PayPal
|
| 21 |
* SOFORT banking
|
| 22 |
* Belfius Direct Net
|
| 29 |
= Features =
|
| 30 |
|
| 31 |
* Support for all available Mollie payment methods
|
| 32 |
+
* Compatible with WooCommerce Subscriptions for recurring payments
|
| 33 |
* Edit order, title, description for every payment method
|
| 34 |
* Refunds (WooCommerce 2.2+)
|
| 35 |
* Multiple translations: English, Dutch, German and French
|
| 113 |
|
| 114 |
== Changelog ==
|
| 115 |
|
| 116 |
+
= 2.5.2 - 28/02/2017 =
|
| 117 |
+
* The plugin is now compatible with WooCommerce Subscriptions for recurring payments
|
| 118 |
+
* Removed 'test mode enabled' description, which causes problems when using WPML
|
| 119 |
+
* Empty the cart when the order is finished, rather than when the payment is created
|
| 120 |
+
|
| 121 |
= 2.4.1 - 10/10/2016 =
|
| 122 |
* Fix 2.4.0 release (https://wordpress.org/support/topic/error-500-after-updating)
|
| 123 |
|
| 169 |
|
| 170 |
== Upgrade Notice ==
|
| 171 |
|
| 172 |
+
= 2.5.2 =
|
| 173 |
+
Our plugin is now compatible with WooCommerce Subscriptions for recurring payments.
|
| 174 |
+
|
| 175 |
= 2.0.0 =
|
| 176 |
* The 2.x version of the plugin uses a different plugin name. You can still run version 1.x of our plugin if you want to temporary
|
| 177 |
keep support for payments created using version 1.x. Hide the old payment gateways by disabling the old 'Mollie Payment Module' payment gateway in WooCommerce -> Settings -> Checkout.
|
