1 | <?php |
||||
2 | |||||
3 | namespace Srmklive\PayPal\Traits\PayPalAPI; |
||||
4 | |||||
5 | trait Invoices |
||||
6 | { |
||||
7 | /** |
||||
8 | * Create a new draft invoice. |
||||
9 | * |
||||
10 | * @param array $data |
||||
11 | * |
||||
12 | * @throws \Throwable |
||||
13 | * |
||||
14 | * @return array|\Psr\Http\Message\StreamInterface|string |
||||
15 | * |
||||
16 | * @see https://developer.paypal.com/docs/api/invoicing/v2/#invoices_create |
||||
17 | */ |
||||
18 | public function createInvoice(array $data) |
||||
19 | { |
||||
20 | $this->apiEndPoint = 'v2/invoicing/invoices'; |
||||
21 | |||||
22 | $this->options['json'] = $data; |
||||
23 | |||||
24 | $this->verb = 'post'; |
||||
25 | |||||
26 | return $this->doPayPalRequest(); |
||||
27 | } |
||||
28 | |||||
29 | /** |
||||
30 | * Get list of invoices. |
||||
31 | * |
||||
32 | * @param array $fields |
||||
33 | * |
||||
34 | * @throws \Throwable |
||||
35 | * |
||||
36 | * @return array|\Psr\Http\Message\StreamInterface|string |
||||
37 | * |
||||
38 | * @see https://developer.paypal.com/docs/api/invoicing/v2/#invoices_list |
||||
39 | */ |
||||
40 | public function listInvoices(array $fields = []) |
||||
41 | { |
||||
42 | $fields_list = collect($fields); |
||||
0 ignored issues
–
show
Bug
introduced
by
Loading history...
|
|||||
43 | |||||
44 | $fields = ($fields_list->count() > 0) ? "&fields={$fields_list->implode(',')}" : ''; |
||||
45 | |||||
46 | $this->apiEndPoint = "v2/invoicing/invoices?page={$this->current_page}&page_size={$this->page_size}&total_required={$this->show_totals}{$fields}"; |
||||
47 | |||||
48 | $this->verb = 'get'; |
||||
49 | |||||
50 | return $this->doPayPalRequest(); |
||||
51 | } |
||||
52 | |||||
53 | /** |
||||
54 | * Send an existing invoice. |
||||
55 | * |
||||
56 | * @param string $invoice_id |
||||
57 | * @param string $subject |
||||
58 | * @param string $note |
||||
59 | * @param bool $send_recipient |
||||
60 | * @param bool $send_merchant |
||||
61 | * @param array $recipients |
||||
62 | * |
||||
63 | * @throws \Throwable |
||||
64 | * |
||||
65 | * @return array|\Psr\Http\Message\StreamInterface|string |
||||
66 | * |
||||
67 | * @see https://developer.paypal.com/docs/api/invoicing/v2/#invoices_send |
||||
68 | */ |
||||
69 | public function sendInvoice(string $invoice_id, string $subject = '', string $note = '', bool $send_recipient = true, bool $send_merchant = false, array $recipients = []) |
||||
70 | { |
||||
71 | $this->apiEndPoint = "v2/invoicing/invoices/{$invoice_id}/send"; |
||||
72 | |||||
73 | $this->options['json'] = $this->getInvoiceMessagePayload($subject, $note, $recipients, $send_recipient, $send_merchant); |
||||
74 | |||||
75 | $this->verb = 'post'; |
||||
76 | |||||
77 | return $this->doPayPalRequest(false); |
||||
78 | } |
||||
79 | |||||
80 | /** |
||||
81 | * Send reminder for an existing invoice. |
||||
82 | * |
||||
83 | * @param string $invoice_id |
||||
84 | * @param string $subject |
||||
85 | * @param string $note |
||||
86 | * @param bool $send_recipient |
||||
87 | * @param bool $send_merchant |
||||
88 | * @param array $recipients |
||||
89 | * |
||||
90 | * @throws \Throwable |
||||
91 | * |
||||
92 | * @return array|\Psr\Http\Message\StreamInterface|string |
||||
93 | * |
||||
94 | * @see https://developer.paypal.com/docs/api/invoicing/v2/#invoices_remind |
||||
95 | */ |
||||
96 | public function sendInvoiceReminder(string $invoice_id, string $subject = '', string $note = '', bool $send_recipient = true, bool $send_merchant = false, array $recipients = []) |
||||
97 | { |
||||
98 | $this->apiEndPoint = "v2/invoicing/invoices/{$invoice_id}/remind"; |
||||
99 | |||||
100 | $this->options['json'] = $this->getInvoiceMessagePayload($subject, $note, $recipients, $send_recipient, $send_merchant); |
||||
101 | |||||
102 | $this->verb = 'post'; |
||||
103 | |||||
104 | return $this->doPayPalRequest(false); |
||||
105 | } |
||||
106 | |||||
107 | /** |
||||
108 | * Cancel an existing invoice which is already sent. |
||||
109 | * |
||||
110 | * @param string $invoice_id |
||||
111 | * @param string $subject |
||||
112 | * @param string $note |
||||
113 | * @param bool $send_recipient |
||||
114 | * @param bool $send_merchant |
||||
115 | * @param array $recipients |
||||
116 | * |
||||
117 | * @throws \Throwable |
||||
118 | * |
||||
119 | * @return array|\Psr\Http\Message\StreamInterface|string |
||||
120 | * |
||||
121 | * @see https://developer.paypal.com/docs/api/invoicing/v2/#invoices_cancel |
||||
122 | */ |
||||
123 | public function cancelInvoice(string $invoice_id, string $subject = '', string $note = '', bool $send_recipient = true, bool $send_merchant = false, array $recipients = []) |
||||
124 | { |
||||
125 | $this->apiEndPoint = "v2/invoicing/invoices/{$invoice_id}/cancel"; |
||||
126 | |||||
127 | $this->options['json'] = $this->getInvoiceMessagePayload($subject, $note, $recipients, $send_recipient, $send_merchant); |
||||
128 | |||||
129 | $this->verb = 'post'; |
||||
130 | |||||
131 | return $this->doPayPalRequest(false); |
||||
132 | } |
||||
133 | |||||
134 | /** |
||||
135 | * Register payment against an existing invoice. |
||||
136 | * |
||||
137 | * @param string $invoice_id |
||||
138 | * @param string $payment_date |
||||
139 | * @param string $payment_method |
||||
140 | * @param float $amount |
||||
141 | * @param string $payment_note |
||||
142 | * @param string $payment_id |
||||
143 | * |
||||
144 | * @throws \Throwable |
||||
145 | * |
||||
146 | * @return array|\Psr\Http\Message\StreamInterface|string |
||||
147 | * |
||||
148 | * @see https://developer.paypal.com/docs/api/invoicing/v2/#invoices_payments |
||||
149 | */ |
||||
150 | public function registerPaymentInvoice(string $invoice_id, string $payment_date, string $payment_method, float $amount, string $payment_note = '', string $payment_id = '') |
||||
151 | { |
||||
152 | $this->apiEndPoint = "v2/invoicing/invoices/{$invoice_id}/payments"; |
||||
153 | |||||
154 | $data = [ |
||||
155 | 'payment_id' => $payment_id, |
||||
156 | 'payment_date' => $payment_date, |
||||
157 | 'method' => $payment_method, |
||||
158 | 'note' => $payment_note, |
||||
159 | 'amount' => [ |
||||
160 | 'currency_code' => $this->currency, |
||||
161 | 'value' => $amount, |
||||
162 | ], |
||||
163 | ]; |
||||
164 | |||||
165 | $this->options['json'] = $data; |
||||
166 | |||||
167 | $this->verb = 'post'; |
||||
168 | |||||
169 | return $this->doPayPalRequest(); |
||||
170 | } |
||||
171 | |||||
172 | /** |
||||
173 | * Delete payment against an existing invoice. |
||||
174 | * |
||||
175 | * @param string $invoice_id |
||||
176 | * @param string $transaction_id |
||||
177 | * |
||||
178 | * @throws \Throwable |
||||
179 | * |
||||
180 | * @return array|\Psr\Http\Message\StreamInterface|string |
||||
181 | * |
||||
182 | * @see https://developer.paypal.com/docs/api/invoicing/v2/#invoices_payments-delete |
||||
183 | */ |
||||
184 | public function deleteExternalPaymentInvoice(string $invoice_id, string $transaction_id) |
||||
185 | { |
||||
186 | $this->apiEndPoint = "v2/invoicing/invoices/{$invoice_id}/payments/{$transaction_id}"; |
||||
187 | |||||
188 | $this->verb = 'delete'; |
||||
189 | |||||
190 | return $this->doPayPalRequest(false); |
||||
191 | } |
||||
192 | |||||
193 | /** |
||||
194 | * Register payment against an existing invoice. |
||||
195 | * |
||||
196 | * @param string $invoice_id |
||||
197 | * @param string $payment_date |
||||
198 | * @param string $payment_method |
||||
199 | * @param float $amount |
||||
200 | * |
||||
201 | * @throws \Throwable |
||||
202 | * |
||||
203 | * @return array|\Psr\Http\Message\StreamInterface|string |
||||
204 | * |
||||
205 | * @see https://developer.paypal.com/docs/api/invoicing/v2/#invoices_refunds |
||||
206 | */ |
||||
207 | public function refundInvoice(string $invoice_id, string $payment_date, string $payment_method, float $amount) |
||||
208 | { |
||||
209 | $this->apiEndPoint = "v2/invoicing/invoices/{$invoice_id}/refunds"; |
||||
210 | |||||
211 | $data = [ |
||||
212 | 'refund_date' => $payment_date, |
||||
213 | 'method' => $payment_method, |
||||
214 | 'amount' => [ |
||||
215 | 'currency_code' => $this->currency, |
||||
216 | 'value' => $amount, |
||||
217 | ], |
||||
218 | ]; |
||||
219 | |||||
220 | $this->options['json'] = $data; |
||||
221 | |||||
222 | $this->verb = 'post'; |
||||
223 | |||||
224 | return $this->doPayPalRequest(); |
||||
225 | } |
||||
226 | |||||
227 | /** |
||||
228 | * Delete refund against an existing invoice. |
||||
229 | * |
||||
230 | * @param string $invoice_id |
||||
231 | * @param string $transaction_id |
||||
232 | * |
||||
233 | * @throws \Throwable |
||||
234 | * |
||||
235 | * @return array|\Psr\Http\Message\StreamInterface|string |
||||
236 | * |
||||
237 | * @see https://developer.paypal.com/docs/api/invoicing/v2/#invoices_refunds-delete |
||||
238 | */ |
||||
239 | public function deleteRefundInvoice(string $invoice_id, string $transaction_id) |
||||
240 | { |
||||
241 | $this->apiEndPoint = "v2/invoicing/invoices/{$invoice_id}/refunds/{$transaction_id}"; |
||||
242 | |||||
243 | $this->verb = 'delete'; |
||||
244 | |||||
245 | return $this->doPayPalRequest(false); |
||||
246 | } |
||||
247 | |||||
248 | /** |
||||
249 | * Generate QR code against an existing invoice. |
||||
250 | * |
||||
251 | * @param string $invoice_id |
||||
252 | * @param int $width |
||||
253 | * @param int $height |
||||
254 | * |
||||
255 | * @throws \Throwable |
||||
256 | * |
||||
257 | * @return array|\Psr\Http\Message\StreamInterface|string |
||||
258 | * |
||||
259 | * @see https://developer.paypal.com/docs/api/invoicing/v2/#invoices_generate-qr-code |
||||
260 | */ |
||||
261 | public function generateQRCodeInvoice(string $invoice_id, int $width = 100, int $height = 100) |
||||
262 | { |
||||
263 | $this->apiEndPoint = "v2/invoicing/invoices/{$invoice_id}/generate-qr-code"; |
||||
264 | |||||
265 | $this->options['json'] = [ |
||||
266 | 'width' => $width, |
||||
267 | 'height' => $height, |
||||
268 | ]; |
||||
269 | $this->verb = 'post'; |
||||
270 | |||||
271 | return $this->doPayPalRequest(); |
||||
272 | } |
||||
273 | |||||
274 | /** |
||||
275 | * Generate the next invoice number. |
||||
276 | * |
||||
277 | * @throws \Throwable |
||||
278 | * |
||||
279 | * @return array|\Psr\Http\Message\StreamInterface|string |
||||
280 | * |
||||
281 | * @see https://developer.paypal.com/docs/api/invoicing/v2/#invoices_generate-next-invoice-number |
||||
282 | */ |
||||
283 | public function generateInvoiceNumber() |
||||
284 | { |
||||
285 | $this->apiEndPoint = 'v2/invoicing/generate-next-invoice-number'; |
||||
286 | |||||
287 | $this->verb = 'post'; |
||||
288 | |||||
289 | return $this->doPayPalRequest(); |
||||
290 | } |
||||
291 | |||||
292 | /** |
||||
293 | * Show details for an existing invoice. |
||||
294 | * |
||||
295 | * @param string $invoice_id |
||||
296 | * |
||||
297 | * @throws \Throwable |
||||
298 | * |
||||
299 | * @return array|\Psr\Http\Message\StreamInterface|string |
||||
300 | * |
||||
301 | * @see https://developer.paypal.com/docs/api/invoicing/v2/#invoices_get |
||||
302 | */ |
||||
303 | public function showInvoiceDetails(string $invoice_id) |
||||
304 | { |
||||
305 | $this->apiEndPoint = "v2/invoicing/invoices/{$invoice_id}"; |
||||
306 | |||||
307 | $this->verb = 'get'; |
||||
308 | |||||
309 | return $this->doPayPalRequest(); |
||||
310 | } |
||||
311 | |||||
312 | /** |
||||
313 | * Update an existing invoice. |
||||
314 | * |
||||
315 | * @param string $invoice_id |
||||
316 | * @param array $data |
||||
317 | * |
||||
318 | * @throws \Throwable |
||||
319 | * |
||||
320 | * @return array|\Psr\Http\Message\StreamInterface|string |
||||
321 | * |
||||
322 | * @see https://developer.paypal.com/docs/api/invoicing/v2/#invoices_update |
||||
323 | */ |
||||
324 | public function updateInvoice(string $invoice_id, array $data) |
||||
325 | { |
||||
326 | $this->apiEndPoint = "v2/invoicing/invoices/{$invoice_id}"; |
||||
327 | |||||
328 | $this->options['json'] = $data; |
||||
329 | |||||
330 | $this->verb = 'put'; |
||||
331 | |||||
332 | return $this->doPayPalRequest(); |
||||
333 | } |
||||
334 | |||||
335 | /** |
||||
336 | * Delete an invoice. |
||||
337 | * |
||||
338 | * @param string $invoice_id |
||||
339 | * |
||||
340 | * @throws \Throwable |
||||
341 | * |
||||
342 | * @return array|\Psr\Http\Message\StreamInterface|string |
||||
343 | * |
||||
344 | * @see https://developer.paypal.com/docs/api/invoicing/v2/#invoices_list |
||||
345 | */ |
||||
346 | public function deleteInvoice(string $invoice_id) |
||||
347 | { |
||||
348 | $this->apiEndPoint = "v2/invoicing/invoices/{$invoice_id}"; |
||||
349 | |||||
350 | $this->verb = 'delete'; |
||||
351 | |||||
352 | return $this->doPayPalRequest(false); |
||||
353 | } |
||||
354 | |||||
355 | /** |
||||
356 | * Get Invoice Message Payload. |
||||
357 | * |
||||
358 | * @param string $subject |
||||
359 | * @param string $note |
||||
360 | * @param array $recipients |
||||
361 | * @param bool $send_recipient |
||||
362 | * @param bool $send_merchant |
||||
363 | * |
||||
364 | * @return array |
||||
365 | */ |
||||
366 | protected function getInvoiceMessagePayload(string $subject, string $note, array $recipients, bool $send_recipient, bool $send_merchant): array |
||||
367 | { |
||||
368 | $data = [ |
||||
369 | 'subject' => !empty($subject) ? $subject : '', |
||||
370 | 'note' => !empty($note) ? $note : '', |
||||
371 | 'additional_recipients' => (collect($recipients)->count() > 0) ? $recipients : '', |
||||
0 ignored issues
–
show
$recipients of type array is incompatible with the type Illuminate\Contracts\Support\Arrayable expected by parameter $value of collect() .
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
Loading history...
|
|||||
372 | 'send_to_recipient' => $send_recipient, |
||||
373 | 'send_to_invoicer' => $send_merchant, |
||||
374 | ]; |
||||
375 | |||||
376 | return collect($data)->filter()->toArray(); |
||||
0 ignored issues
–
show
$data of type array<string,array|boolean|string> is incompatible with the type Illuminate\Contracts\Support\Arrayable expected by parameter $value of collect() .
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
Loading history...
|
|||||
377 | } |
||||
378 | } |
||||
379 |