PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 2.10.4
GiveWP – Donation Plugin and Fundraising Platform v2.10.4
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
184 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 InvalidArgumentException;
8 use PayPalCheckoutSdk\Orders\OrdersCaptureRequest;
9 use PayPalCheckoutSdk\Orders\OrdersCreateRequest;
10 use Exception;
11 use PayPalCheckoutSdk\Payments\CapturesRefundRequest;
12 use function give_record_gateway_error as logError;
13
14 /**
15 * Class PayPalOrder
16 * @since 2.9.0
17 * @package Give\PaymentGateways\PayPalCommerce\Repositories
18 *
19 */
20 class PayPalOrder {
21 /**
22 * @since 2.9.0
23 *
24 * @var PayPalClient
25 */
26 private $paypalClient;
27
28 /**
29 * @since 2.9.0
30 *
31 * @var MerchantDetail
32 */
33 private $merchantDetails;
34
35 /**
36 * PayPalOrder constructor.
37 *
38 * @since 2.9.0
39 *
40 * @param MerchantDetail $merchantDetails
41 *
42 * @param PayPalClient $paypalClient
43 */
44 public function __construct( PayPalClient $paypalClient, MerchantDetail $merchantDetails ) {
45 $this->paypalClient = $paypalClient;
46 $this->merchantDetails = $merchantDetails;
47 }
48
49 /**
50 * Approve order.
51 *
52 * @since 2.9.0
53 *
54 * @param string $orderId
55 *
56 * @return string
57 * @throws Exception
58 */
59 public function approveOrder( $orderId ) {
60 $request = new OrdersCaptureRequest( $orderId );
61
62 try {
63 return $this->paypalClient->getHttpClient()->execute( $request )->result;
64 } catch ( Exception $ex ) {
65 logError(
66 'Capture PayPal Commerce payment failure',
67 sprintf(
68 '<strong>Response</strong><pre>%1$s</pre>',
69 print_r( json_decode( $ex->getMessage(), true ), true )
70 )
71 );
72
73 throw $ex;
74 }
75 }
76
77 /**
78 * Create order.
79 *
80 * @since 2.9.0
81 *
82 * @param array $array
83 *
84 * @return string
85 * @throws Exception
86 */
87 public function createOrder( $array ) {
88 $this->validateCreateOrderArguments( $array );
89
90 $request = new OrdersCreateRequest();
91 $request->payPalPartnerAttributionId( give( 'PAYPAL_COMMERCE_ATTRIBUTION_ID' ) );
92 $request->body = [
93 'intent' => 'CAPTURE',
94 'purchase_units' => [
95 [
96 'reference_id' => get_post_field( 'post_name', $array['formId'] ),
97 'description' => $array['formTitle'],
98 'amount' => [
99 'value' => give_maybe_sanitize_amount( $array['donationAmount'], [ 'currency' => give_get_currency( $array['formId'] ) ] ),
100 'currency_code' => give_get_currency( $array['formId'] ),
101 ],
102 'payee' => [
103 'email_address' => $this->merchantDetails->merchantId,
104 'merchant_id' => $this->merchantDetails->merchantIdInPayPal,
105 ],
106 'payer' => [
107 'given_name' => $array['payer']['firstName'],
108 'surname' => $array['payer']['lastName'],
109 'email_address' => $array['payer']['email'],
110 ],
111 'payment_instruction' => [
112 'disbursement_mode' => 'INSTANT',
113 ],
114 ],
115 ],
116 'application_context' => [
117 'shipping_preference' => 'NO_SHIPPING',
118 'user_action' => 'PAY_NOW',
119 ],
120 ];
121
122 try {
123 return $this->paypalClient->getHttpClient()->execute( $request )->result->id;
124 } catch ( Exception $ex ) {
125 logError(
126 'Create PayPal Commerce order failure',
127 sprintf(
128 '<strong>Request</strong><pre>%1$s</pre><br><strong>Response</strong><pre>%2$s</pre>',
129 print_r( $request->body, true ),
130 print_r( json_decode( $ex->getMessage(), true ), true )
131 )
132 );
133
134 throw $ex;
135 }
136 }
137
138 /**
139 * Refunds a processed payment
140 *
141 * @since 2.9.0
142 *
143 * @param $captureId
144 *
145 * @return string The id of the refund
146 * @throws Exception
147 */
148 public function refundPayment( $captureId ) {
149 $refund = new CapturesRefundRequest( $captureId );
150
151 try {
152 return $this->paypalClient->getHttpClient()->execute( $refund )->result->id;
153 } catch ( Exception $exception ) {
154 logError(
155 'Create PayPal Commerce payment refund failure',
156 sprintf(
157 '<strong>Response</strong><pre>%1$s</pre>',
158 print_r( json_decode( $exception->getMessage(), true ), true )
159 )
160 );
161
162 throw $exception;
163 }
164 }
165
166 /**
167 * Validate argument given to create PayPal order.
168 *
169 * @since 2.9.0
170 *
171 * @param array $array
172 *
173 * @throws InvalidArgumentException
174 */
175 private function validateCreateOrderArguments( $array ) {
176 $required = [ 'formId', 'donationAmount', 'payer' ];
177 $array = array_filter( $array ); // Remove empty values.
178
179 if ( array_diff( $required, array_keys( $array ) ) ) {
180 throw new InvalidArgumentException( __( 'To create a paypal order, please provide formId, donationAmount and payer', 'give' ) );
181 }
182 }
183 }
184