· 6 years ago · Aug 26, 2019, 11:36 AM
1<?php
2
3$membership_id = 123; // @todo SET THIS
4
5$membership = rcp_get_membership( $membership_id );
6
7global $rcp_options;
8
9if ( ! class_exists( 'Stripe\Stripe' ) ) {
10 require_once RCP_PLUGIN_DIR . 'includes/libraries/stripe/init.php';
11}
12
13if ( rcp_is_sandbox() ) {
14 $secret_key = trim( $rcp_options['stripe_test_secret'] );
15} else {
16 $secret_key = trim( $rcp_options['stripe_live_secret'] );
17}
18
19\Stripe\Stripe::setApiKey( $secret_key );
20
21$subscription_id = $membership->get_gateway_subscription_id();
22$customer_id = $membership->get_gateway_customer_id();
23
24$create_setup_intent = true;
25$intent = false;
26
27try {
28 /*
29 * See if the customer has a "past_due" subscription that requires a new payment method or
30 * requires action on an existing payment method. If so, let's use the payment intent that
31 * Stripe has already created.
32 */
33 $subscription = \Stripe\Subscription::retrieve( $subscription_id );
34
35 if ( 'past_due' === $subscription->status ) {
36 $invoice = \Stripe\Invoice::retrieve( $subscription->latest_invoice );
37 $payment_intent = \Stripe\PaymentIntent::retrieve( $invoice->payment_intent );
38
39 if ( in_array( $payment_intent->status, array( 'requires_action', 'requires_payment_method' ) ) ) {
40 // Use this existing payment intent.
41 $create_setup_intent = false;
42 $intent = $payment_intent;
43 }
44 }
45} catch ( Exception $e ) { }
46
47var_dump( $intent );