PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 4.16.6.1
GiveWP – Donation Plugin and Fundraising Platform v4.16.6.1
4.16.7.1 4.16.7 4.16.6.1 4.16.6 4.16.5.1 4.16.5 4.16.4 4.16.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 / Gateways / Stripe / StripePaymentElementGateway / StripePaymentElementGateway.php
give / src / PaymentGateways / Gateways / Stripe / StripePaymentElementGateway Last commit date
Actions 1 year ago DataTransferObjects 1 year ago Webhooks 2 months ago resources 2 years ago StripePaymentElementGateway.php 1 month ago StripePaymentElementRepository.php 1 month ago stripePaymentElementGateway.tsx 1 year ago
StripePaymentElementGateway.php
208 lines
1 <?php
2
3 namespace Give\PaymentGateways\Gateways\Stripe\StripePaymentElementGateway;
4
5 use Exception;
6 use Give\Donations\Models\Donation;
7 use Give\Donations\Models\DonationNote;
8 use Give\Framework\PaymentGateways\Commands\GatewayCommand;
9 use Give\Framework\PaymentGateways\Commands\PaymentRefunded;
10 use Give\Framework\PaymentGateways\Commands\RespondToBrowser;
11 use Give\Framework\PaymentGateways\Contracts\PaymentGatewayRefundable;
12 use Give\Framework\PaymentGateways\Exceptions\PaymentGatewayException;
13 use Give\Framework\PaymentGateways\PaymentGateway;
14 use Give\Framework\Support\Scripts\Concerns\HasScriptAssetFile;
15 use Give\Helpers\Language;
16 use Give\PaymentGateways\Gateways\Stripe\StripePaymentElementGateway\DataTransferObjects\StripeGatewayData;
17 use Stripe\Exception\ApiErrorException;
18
19 /**
20 * @since 3.0.0
21 */
22 class StripePaymentElementGateway extends PaymentGateway implements PaymentGatewayRefundable
23 {
24 use StripePaymentElementRepository;
25 use HasScriptAssetFile;
26
27 /**
28 * @inheritDoc
29 */
30 public static function id(): string
31 {
32 return 'stripe_payment_element';
33 }
34
35 /**
36 * @inheritDoc
37 */
38 public function getId(): string
39 {
40 return self::id();
41 }
42
43 /**
44 * @inheritDoc
45 */
46 public function getName(): string
47 {
48 return __('Stripe - Payment Element', 'give');
49 }
50
51 /**
52 * @inheritDoc
53 */
54 public function getPaymentMethodLabel(): string
55 {
56 return __('Stripe Payment Element', 'give');
57 }
58
59 /**
60 * @since 3.1.0 set translations for script
61 * @since 3.0.0
62 */
63 public function enqueueScript(int $formId)
64 {
65 $assets = $this->getScriptAsset(GIVE_PLUGIN_DIR . 'build/stripePaymentElementGateway.asset.php');
66 $handle = $this::id();
67
68 wp_enqueue_script(
69 $handle,
70 GIVE_PLUGIN_URL . 'build/stripePaymentElementGateway.js',
71 $assets['dependencies'],
72 $assets['version'],
73 true
74 );
75
76 Language::setScriptTranslations($handle);
77 }
78
79 /**
80 * @since 3.0.0
81 */
82 public function formSettings(int $formId): array
83 {
84 $this->setUpStripeAppInfo($formId);
85
86 $stripePublishableKey = $this->getStripePublishableKey($formId);
87 $stripeConnectedAccountKey = $this->getStripeConnectedAccountKey($formId);
88
89 return [
90 'formId' => $formId,
91 'stripeKey' => $stripePublishableKey,
92 'stripeConnectedAccountId' => $stripeConnectedAccountKey,
93 ];
94 }
95
96 /**
97 * @since 3.12.1 updated to send billing address details to Stripe
98 * @since 3.0.0
99 * @inheritDoc
100 * @throws ApiErrorException
101 */
102 public function createPayment(Donation $donation, $gatewayData): GatewayCommand
103 {
104 /**
105 * Initialize the Stripe SDK using Stripe::setAppInfo()
106 */
107 $this->setUpStripeAppInfo($donation->formId);
108
109 /**
110 * Get data from client request
111 */
112 $stripeGatewayData = StripeGatewayData::fromRequest($gatewayData);
113
114 /**
115 * Get or create a Stripe customer
116 */
117 $customer = $this->getOrCreateStripeCustomerFromDonation(
118 $stripeGatewayData->stripeConnectedAccountId,
119 $donation
120 );
121
122
123 /**
124 * Setup Stripe Payment Intent args
125 */
126 $intentData = $this->getPaymentIntentDataFromDonation(
127 $donation,
128 $customer
129 );
130
131 /**
132 * Generate Payment Intent
133 */
134 $intent = $this->generateStripePaymentIntent(
135 $stripeGatewayData->stripeConnectedAccountId,
136 $intentData
137 );
138
139 /**
140 * Update Donation Meta
141 */
142 $this->updateDonationMetaFromPaymentIntent($donation, $intent);
143
144 /**
145 * Return response to client.
146 * 'clientSecret' is required to confirm payment intent on client side.
147 * 'returnUrl' is required to redirect user to success page.
148 */
149 return new RespondToBrowser([
150 'clientSecret' => $intent->client_secret,
151 'returnUrl' => $stripeGatewayData->successUrl,
152 'billingDetails' => [
153 'name' => trim("$donation->firstName $donation->lastName"),
154 'email' => $donation->email,
155 'address' => [
156 'city' => $donation->billingAddress->city,
157 'country' => $donation->billingAddress->country,
158 'line1' => $donation->billingAddress->address1,
159 'line2' => $donation->billingAddress->address2,
160 'postal_code' => $donation->billingAddress->zip,
161 'state' => $donation->billingAddress->state,
162 ],
163 ],
164 ]);
165 }
166
167 /**
168 * @since 4.7.0
169 *
170 * @throws Exception
171 */
172 public function refundDonation(Donation $donation): PaymentRefunded
173 {
174 try {
175 $this->setUpStripeAppInfo($donation->formId);
176 $refund = $this->refundStripePayment($donation);
177
178 if ($refund->status !== 'succeeded') {
179 throw new Exception(__('Refund failed. Please check the Stripe dashboard for more details.', 'give'));
180 }
181
182 DonationNote::create([
183 'donationId' => $donation->id,
184 'content' => sprintf(
185 __('Donation refunded in Stripe for transaction ID: %s', 'give'),
186 $donation->gatewayTransactionId
187 ),
188 ]);
189
190 return new PaymentRefunded();
191 } catch (Exception $e) {
192 DonationNote::create([
193 'donationId' => $donation->id,
194 'content' => sprintf(
195 __(
196 'Error! Donation %s was NOT refunded. Find more details on the error in the logs at Donations > Tools > Logs. To refund the donation, use the Stripe dashboard tools.',
197 'give'
198 ),
199 $donation->id
200 ),
201 ]);
202
203 throw new PaymentGatewayException(sprintf(__('Stripe API error: %s', 'give'), $e->getMessage()));
204 }
205 }
206 }
207
208