Version Description
Our plugin is now compatible with WooCommerce Subscriptions for recurring payments.
Download this release
Release Info
Developer | ndijkstra |
Plugin | Mollie Payments for WooCommerce |
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 |
+
MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAwTzELMAkGA1UE
|
4042 |
+
BhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2VhcmNoIEdyb3VwMRUwEwYDVQQD
|
4043 |
+
EwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQG
|
4044 |
+
EwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMT
|
4045 |
+
DElTUkcgUm9vdCBYMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54r
|
4046 |
+
Vygch77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+0TM8ukj1
|
4047 |
+
3Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6UA5/TR5d8mUgjU+g4rk8K
|
4048 |
+
b4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sWT8KOEUt+zwvo/7V3LvSye0rgTBIlDHCN
|
4049 |
+
Aymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyHB5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ
|
4050 |
+
4Q7e2RCOFvu396j3x+UCB5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf
|
4051 |
+
1b0SHzUvKBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWnOlFu
|
4052 |
+
hjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTnjh8BCNAw1FtxNrQH
|
4053 |
+
usEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbwqHyGO0aoSCqI3Haadr8faqU9GY/r
|
4054 |
+
OPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CIrU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4G
|
4055 |
+
A1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY
|
4056 |
+
9umbbjANBgkqhkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL
|
4057 |
+
ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ3BebYhtF8GaV
|
4058 |
+
0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KKNFtY2PwByVS5uCbMiogziUwt
|
4059 |
+
hDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJw
|
4060 |
+
TdwJx4nLCgdNbOhdjsnvzqvHu7UrTkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nx
|
4061 |
+
e5AW0wdeRlN8NwdCjNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZA
|
4062 |
+
JzVcoyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq4RgqsahD
|
4063 |
+
YVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPAmRGunUHBcnWEvgJBQl9n
|
4064 |
+
JEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57demyPxgcYxn/eR44/KJ4EBs+lVDR3veyJ
|
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.
|