PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 2.13.3
GiveWP – Donation Plugin and Fundraising Platform v2.13.3
4.16.2 4.16.1 4.16.0 4.15.5 4.15.4 4.15.3 4.15.2 4.15.1 4.15.0 2.3.0 2.3.1 2.3.2 2.30.0 2.31.0 2.31.1 2.32.0 2.33.0 2.33.1 2.33.2 2.33.3 2.33.4 2.33.5 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 2.4.6 2.4.7 2.5.0 2.5.1 2.5.10 2.5.11 2.5.12 2.5.13 2.5.2 2.5.3 2.5.4 2.5.5 2.5.6 2.5.7 2.5.8 2.5.9 2.6.0 2.6.1 2.6.2 2.6.3 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.8.0 2.8.1 2.9.0 2.9.1 2.9.2 2.9.3 2.9.4 2.9.5 2.9.6 2.9.7 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.1.0 3.1.1 3.1.2 3.10.0 3.11.0 3.12.0 3.12.1 3.12.2 3.12.3 3.13.0 3.14.0 3.14.1 3.14.2 3.15.0 3.15.1 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.17.0 3.17.1 3.17.2 3.18.0 3.19.0 3.19.1 3.19.2 3.19.3 3.19.4 3.2.0 3.2.1 3.2.2 3.20.0 3.21.0 3.21.1 3.22.0 3.22.1 3.22.2 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.5.0 3.5.1 3.6.0 3.6.1 3.6.2 3.7.0 3.8.0 3.9.0 4.0.0 4.1.0 4.1.1 4.10.0 4.10.1 4.11.0 4.12.0 4.13.0 4.13.1 4.13.2 4.14.0 4.14.1 4.14.2 4.14.3 4.14.4 4.14.5 4.14.6 4.2.0 4.2.1 4.3.0 4.3.1 4.3.2 4.4.0 4.5.0 4.6.1 4.7.0 4.7.1 4.8.0 4.8.1 4.9.0 trunk 1.9.0 2.0.0 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.10.0 2.10.1 2.10.2 2.10.3 2.10.4 2.11.0 2.11.1 2.11.2 2.11.3 2.12.0 2.12.1 2.12.2 2.12.3 2.13.0 2.13.1 2.13.2 2.13.3 2.13.4 2.14.0 2.15.0 2.16.0 2.16.1 2.17.0 2.17.1 2.17.3 2.18.0 2.18.1 2.19.1 2.19.2 2.19.3 2.19.4 2.19.5 2.19.6 2.19.7 2.19.8 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.2.6 2.20.0 2.20.1 2.20.2 2.21.0 2.21.1 2.21.2 2.21.3 2.21.4 2.22.0 2.22.1 2.22.2 2.22.3 2.23.0 2.23.1 2.23.2 2.24.0 2.24.1 2.24.2 2.25.0 2.25.1 2.25.2 2.25.3 2.26.0 2.27.0 2.27.1 2.27.2 2.27.3 2.28.0 2.29.0 2.29.1 2.29.2
give / src / PaymentGateways / PayPalCommerce / Repositories / PayPalOrder.php
give / src / PaymentGateways / PayPalCommerce / Repositories Last commit date
Traits 5 years ago MerchantDetails.php 5 years ago PayPalAuth.php 5 years ago PayPalOrder.php 5 years ago Settings.php 5 years ago Webhooks.php 5 years ago
PayPalOrder.php
198 lines
1 <?php
2
3 namespace Give\PaymentGateways\PayPalCommerce\Repositories;
4
5 use Give\PaymentGateways\PayPalCommerce\Models\MerchantDetail;
6 use Give\PaymentGateways\PayPalCommerce\PayPalClient;
7 use Give\Framework\Exceptions\Primitives\InvalidArgumentException;
8 use Give\Framework\Exceptions\Primitives\Exception;
9 use PayPalCheckoutSdk\Orders\OrdersCaptureRequest;
10 use PayPalCheckoutSdk\Orders\OrdersCreateRequest;
11 use PayPalCheckoutSdk\Payments\CapturesRefundRequest;
12
13 use function give_record_gateway_error as logError;
14
15 /**
16 * Class PayPalOrder
17 * @package Give\PaymentGateways\PayPalCommerce\Repositories
18 *
19 * @since 2.9.0
20 */
21 class PayPalOrder {
22 /**
23 * @since 2.9.0
24 *
25 * @var PayPalClient
26 */
27 private $paypalClient;
28
29 /**
30 * @since 2.9.0
31 *
32 * @var MerchantDetail
33 */
34 private $merchantDetails;
35
36 /**
37 * PayPalOrder constructor.
38 *
39 * @since 2.9.0
40 *
41 * @param MerchantDetail $merchantDetails
42 *
43 * @param PayPalClient $paypalClient
44 */
45 public function __construct( PayPalClient $paypalClient, MerchantDetail $merchantDetails ) {
46 $this->paypalClient = $paypalClient;
47 $this->merchantDetails = $merchantDetails;
48 }
49
50 /**
51 * Approve order.
52 *
53 * @since 2.9.0
54 *
55 * @param string $orderId
56 *
57 * @return string
58 * @throws Exception
59 */
60 public function approveOrder( $orderId ) {
61 $request = new OrdersCaptureRequest( $orderId );
62
63 try {
64 return $this->paypalClient->getHttpClient()->execute( $request )->result;
65 } catch ( Exception $ex ) {
66 logError(
67 'Capture PayPal Commerce payment failure',
68 sprintf(
69 '<strong>Response</strong><pre>%1$s</pre>',
70 print_r( json_decode( $ex->getMessage(), true ), true )
71 )
72 );
73
74 throw $ex;
75 }
76 }
77
78 /**
79 * Create order.
80 *
81 * @since 2.9.0
82 * @see https://developer.paypal.com/docs/api/orders/v2
83 *
84 * @param array $array
85 *
86 * @return string
87 * @throws Exception
88 */
89 public function createOrder( $array ) {
90 $this->validateCreateOrderArguments( $array );
91
92 $request = new OrdersCreateRequest();
93 $request->payPalPartnerAttributionId( give( 'PAYPAL_COMMERCE_ATTRIBUTION_ID' ) );
94 $request->body = [
95 'intent' => 'CAPTURE',
96 'payer' => [
97 'given_name' => $array['payer']['firstName'],
98 'surname' => $array['payer']['lastName'],
99 'email_address' => $array['payer']['email'],
100 ],
101 'purchase_units' => [
102 [
103 'reference_id' => get_post_field( 'post_name', $array['formId'] ),
104 'description' => $array['formTitle'],
105 'amount' => [
106 'value' => give_maybe_sanitize_amount(
107 $array['donationAmount'],
108 [ 'currency' => give_get_currency( $array['formId'] ) ]
109 ),
110 'currency_code' => give_get_currency( $array['formId'] ),
111 ],
112 'payee' => [
113 'email_address' => $this->merchantDetails->merchantId,
114 'merchant_id' => $this->merchantDetails->merchantIdInPayPal,
115 ],
116 'payment_instruction' => [
117 'disbursement_mode' => 'INSTANT',
118 ],
119 ],
120 ],
121 'application_context' => [
122 'shipping_preference' => 'NO_SHIPPING',
123 'user_action' => 'PAY_NOW',
124 ],
125 ];
126
127 if ( ! empty( $array['payer']['address'] ) ) {
128 $request->body['payer']['address'] = $array['payer']['address'];
129 }
130
131 try {
132 return $this->paypalClient->getHttpClient()->execute( $request )->result->id;
133 } catch ( Exception $ex ) {
134 logError(
135 'Create PayPal Commerce order failure',
136 sprintf(
137 '<strong>Request</strong><pre>%1$s</pre><br><strong>Response</strong><pre>%2$s</pre>',
138 print_r( $request->body, true ),
139 print_r( json_decode( $ex->getMessage(), true ), true )
140 )
141 );
142
143 throw $ex;
144 }
145 }
146
147 /**
148 * Refunds a processed payment
149 *
150 * @since 2.9.0
151 *
152 * @param $captureId
153 *
154 * @return string The id of the refund
155 * @throws Exception
156 */
157 public function refundPayment( $captureId ) {
158 $refund = new CapturesRefundRequest( $captureId );
159
160 try {
161 return $this->paypalClient->getHttpClient()->execute( $refund )->result->id;
162 } catch ( Exception $exception ) {
163 logError(
164 'Create PayPal Commerce payment refund failure',
165 sprintf(
166 '<strong>Response</strong><pre>%1$s</pre>',
167 print_r( json_decode( $exception->getMessage(), true ), true )
168 )
169 );
170
171 throw $exception;
172 }
173 }
174
175 /**
176 * Validate argument given to create PayPal order.
177 *
178 * @since 2.9.0
179 *
180 * @param array $array
181 *
182 * @throws InvalidArgumentException
183 */
184 private function validateCreateOrderArguments( $array ) {
185 $required = [ 'formId', 'donationAmount', 'payer' ];
186 $array = array_filter( $array ); // Remove empty values.
187
188 if ( array_diff( $required, array_keys( $array ) ) ) {
189 throw new InvalidArgumentException(
190 __(
191 'To create a paypal order, please provide formId, donationAmount and payer',
192 'give'
193 )
194 );
195 }
196 }
197 }
198