I try to manage a subsbription to several service purchase with PayPal
First step: Crate a Checkout Order with a purchase_units each service subscriptio.
Second step: In the return url (after the Authorize Payment) I capture the payment for the order.
Third step: watch the webhook, and I received this events:
- BILLING.PLAN.CREATED (mark my payment as Waiting)
- CHECKOUT.ORDER.APPROVED (activation of the purchase services)
- PAYMENT.CAPTURE.COMPLETED (creation of Invoice, send Invoice, mark Invoice as pai💥)
My code is
$invoiceNumber = $this->client->invoice->nextNumber();$invoiceNumber = $invoiceNumber->invoice_number;...$invoiceArray = [...];$response = $this->client->invoice->createDraft($invoice);// My response is not like documentation$invoiceId = ltrim(strrchr($response->href, '/'), '/');$this->client->invoice->send($invoiceId, ['send_to_invoicer' => false,'send_to_recipient' => true,]);...$this->client->invoice->recordPayment($invoiceId, $recordBody);
The real problem is how build the $recordBody
I try in several mode, but every attempt fail
Following the API Documentation my $recordBody must be like this
$recordBody = ['amount' => ['currency_code' => 'EUR','value' => number_format($total, 2, '.', '') ],'method' => 'PAYPAL','payment_id' => ???,];
but how use for the payment_id parameter?I try to use EVERY ID received but the only message I receive is
{"name":"RESOURCE_NOT_FOUND","message":"The specified resource does not exist.","debug_id":"b52ee464c946e","details":[],"links":[ {"href":"https://developer.paypal.com/docs/api/invoicing/#errors","method":"GET" } ]}
searching I found this alternative $recordBody (I copy the source)
$recordBody = ["payment_date" => "2023-06-07T07:58:25Z","transaction_id" => "2KU35265BX277451G"]
but the PayPal error is
{"name":"INVALID_REQUEST","message":"Request is not well-formed, syntactically incorrect, or violates schema.","debug_id":"116d3f3bcc4f3","details":[ {"field":"/method","location":"body","issue":"MISSING_REQUIRED_PARAMETER","description":"Payment method is missing. Please provide a valid payment method." } ],"links":[ {"href":"https://developer.paypal.com/docs/api/invoicing/#errors","method":"GET" } ]}
I SOLVE!I Solve this problem 2 minutes after send this post!
The API documentation of invoicing/invoice/{id}/record-payment IS WRONG!!! 3 days of attempts!
This is the correct $recordBody
$recordBody = ["payment_date" => date("Y-m-d"),'amount' => ['currency_code' => 'EUR','value' => number_format($total, 2, '.', '') ],'method' => 'PAYPAL','transaction_id' => $event['resource']['id'], // this paramete is not documented
// 'payment_id' => $event['resource']['id'], // this is the parameter in the documentation]