Test Failed
Push — develop ( 983888...05205d )
by Reüel
02:39
created

src/Gateway.php (2 issues)

Labels
Severity
1
<?php
2
3
namespace Pronamic\WordPress\Pay\Gateways\IDealAdvancedV3;
4
5
use Pronamic\WordPress\Pay\Core\Gateway as Core_Gateway;
6
use Pronamic\WordPress\Pay\Core\PaymentMethods;
7
use Pronamic\WordPress\Pay\Payments\Payment;
8
9
/**
10
 * Title: iDEAL Advanced v3+ gateway
11
 * Description:
12
 * Copyright: 2005-2019 Pronamic
13
 * Company: Pronamic
14
 *
15
 * @author  Remco Tolsma
16
 * @version 2.0.2
17
 * @since   1.0.0
18
 */
19
class Gateway extends Core_Gateway {
20
	/**
21
	 * Client.
22
	 *
23
	 * @var Client
24
	 */
25
	protected $client;
26
27
	/**
28
	 * Constructs and initializes an iDEAL Advanced v3 gateway
29
	 *
30
	 * @param Config $config Config.
31
	 */
32
	public function __construct( Config $config ) {
33
		parent::__construct( $config );
34
35
		$this->supports = array(
36
			'payment_status_request',
37
		);
38
39
		$this->set_method( self::METHOD_HTTP_REDIRECT );
40
41
		// Client.
42
		$client = new Client();
43
44
		$client->set_acquirer_url( $config->get_payment_server_url() );
45
46
		$client->merchant_id          = $config->merchant_id;
47
		$client->sub_id               = $config->sub_id;
48
		$client->private_key          = $config->private_key;
49
		$client->private_key_password = $config->private_key_password;
50
		$client->private_certificate  = $config->private_certificate;
51
52
		$this->client = $client;
53
	}
54
55
	/**
56
	 * Get issuers
57
	 *
58
	 * @see Core_Gateway::get_issuers()
59
	 *
60
	 * @return array
61
	 */
62
	public function get_issuers() {
63
		$directory = $this->client->get_directory();
64
65
		if ( ! $directory ) {
66
			$this->error = $this->client->get_error();
67
68
			return array();
69
		}
70
71
		$groups = array();
72
73
		foreach ( $directory->get_countries() as $country ) {
74
			$issuers = array();
75
76
			foreach ( $country->get_issuers() as $issuer ) {
77
				$issuers[ $issuer->get_id() ] = $issuer->get_name();
78
			}
79
80
			$groups[] = array(
81
				'name'    => $country->get_name(),
82
				'options' => $issuers,
83
			);
84
		}
85
86
		return $groups;
87
	}
88
89
	/**
90
	 * Get supported payment methods
91
	 *
92
	 * @see Pronamic_WP_Pay_Gateway::get_supported_payment_methods()
93
	 */
94
	public function get_supported_payment_methods() {
95
		return array(
96
			PaymentMethods::IDEAL,
97
		);
98
	}
99
100
	/**
101
	 * Is payment method required to start transaction?
102
	 *
103
	 * @see   Core_Gateway::payment_method_is_required()
104
	 * @since 1.1.5
105
	 */
106
	public function payment_method_is_required() {
107
		return true;
108
	}
109
110
	/**
111
	 * Start
112
	 *
113
	 * @see Pronamic_WP_Pay_Gateway::start()
114
	 *
115
	 * @param Payment $payment Payment.
116
	 */
117
	public function start( Payment $payment ) {
118
		// Purchase ID.
119
		$purchase_id = $payment->format_string( $this->config->purchase_id );
120
121
		$payment->set_meta( 'purchase_id', $purchase_id );
122
123
		// Transaction.
124
		$transaction = new Transaction();
125
		$transaction->set_purchase_id( $purchase_id );
126
		$transaction->set_amount( $payment->get_total_amount()->get_value() );
127
		$transaction->set_currency( $payment->get_total_amount()->get_currency()->get_alphabetic_code() );
128
		$transaction->set_expiration_period( 'PT30M' );
129
		$transaction->set_description( $payment->get_description() );
130
		$transaction->set_entrance_code( $payment->get_entrance_code() );
131
132
		if ( null !== $payment->get_customer() ) {
133
			$transaction->set_language( $payment->get_customer()->get_language() );
134
		}
135
136
		// Create transaction.
137
		$result = $this->client->create_transaction( $transaction, $payment->get_return_url(), $payment->get_issuer() );
138
139
		$error = $this->client->get_error();
140
141
		if ( is_wp_error( $error ) ) {
0 ignored issues
show
The function is_wp_error was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

141
		if ( /** @scrutinizer ignore-call */ is_wp_error( $error ) ) {
Loading history...
142
			$this->set_error( $error );
143
144
			return;
145
		}
146
147
		$payment->set_action_url( $result->issuer->get_authentication_url() );
148
		$payment->set_transaction_id( $result->transaction->get_id() );
149
	}
150
151
	/**
152
	 * Update status of the specified payment
153
	 *
154
	 * @param Payment $payment Payment.
155
	 */
156
	public function update_status( Payment $payment ) {
157
		$result = $this->client->get_status( $payment->get_transaction_id() );
158
159
		$error = $this->client->get_error();
160
161
		if ( is_wp_error( $error ) ) {
0 ignored issues
show
The function is_wp_error was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

161
		if ( /** @scrutinizer ignore-call */ is_wp_error( $error ) ) {
Loading history...
162
			$this->set_error( $error );
163
		} else {
164
			$transaction = $result->transaction;
165
166
			$payment->set_status( $transaction->get_status() );
167
			$payment->set_consumer_name( $transaction->get_consumer_name() );
168
			$payment->set_consumer_iban( $transaction->get_consumer_iban() );
169
			$payment->set_consumer_bic( $transaction->get_consumer_bic() );
170
		}
171
	}
172
}
173