This PHP function searches Stripe payments by the Stripe Receipt number, and returns the Payment Intent object. This is for when you’re not using the Stripe PHP library, and just using your own PHP functions for Stripe.
Parameters
$receipt_number
– The Stripe receipt number to search for. (This refers to the receipt_number generated by Stripe.)$months
– The number of months to search. The default is1
(it will search the last 1 month of payments). This must be an integer. Example: if you pass3
it will search the past 3 months, relative to the current moment.
Return Values
This function will return the Payment Intent object, if a payment with a matching Receipt Number is found. If not found, it will return a string with a message like, “Receipt #9999-9999 was not found for the last 1 month.”
Required
To use the function below, you also need the query_stripe_paymentintents function to query the Stripe Payment Intents API.
/** * Get Stripe payment by Receipt # * @param string $receipt_number The Stripe receipt number to search for. * @param int $months How many months to search, default is the last 1 month. * @return object|string $payment Paymentintent object with matching Receipt #, or string if not found. */ function get_stripe_payment_by_receipt($receipt_number, int $months = 1) { $ago = strtotime("-$months month"); $has_more = true; $pg = ""; while($has_more){ $response = query_stripe_paymentintents("?created[gte]={$ago}{$pg}&limit=100"); if (!empty($response->data)) { $data = $response->data; // look for receipt foreach ($data as $key => $r) { if(empty($r->charges->data[0]->receipt_number)) continue; if($receipt_number === $r->charges->data[0]->receipt_number && 'succeeded' == $r->status) { $payment = $r; break 2; } } if($has_more = $response->has_more ?? false) { $curs = end($data)->id;//update cursor $pg = "&starting_after=$curs"; } } elseif($error = $response->error ?? 0) { $err_msg = $response->error->message ?? ''; error_log(sprintf('Stripe API Error: %s', $err_msg)); } elseif(is_string($response)) { error_log(sprintf('curl error: %s', $response)); } } if(empty($payment)) { return sprintf('Receipt # %s was not found for the last %d %s.', $receipt_number, $months, ((1 === $months) ? 'month' : 'months')); } return $payment; }
Questions and Comments are Welcome