Hello got this code how can i return stripe payment description to a php variable so that i can later on can use it in sql query.
\Stripe\Stripe::setApiKey("STRIPE API");
try {
//Charge the Card
$newcard = \Stripe\Charge::create(array(
"customer" => $userstrip,
"amount" => 400,
"currency" => "USD",
'capture' => false),
);
$newcards = $newcard->description; // Tried like this
Okay if you just use id instead of description it also gets the payment id! :)
I have a mobile app (Flutter) which uses Lumen as backend. For payments I use Stripe SDK for PHP.
I need to send an invoice to user after successful charge. I understood it works this way:
Create customer in Stripe
Charge customer using customer_id
Create invoice item using customer_id
Stripe will automatically send an invoice via email using customer's email
I have two functions:
public function addCard(Request $request) {
$user = User::find($user->id);
if (is_null($user->stripe_id) || empty($user->stripe_id)) {
$customer = \Stripe\Customer::create([
"name" => $user->name,
"email" => $user->email,
"description" => "Test",
]);
$user->stripe_id = $customer->id;
$user->save();
}
}
public function charge(Request $request) {
$charge = \Stripe\Charge::create([
'amount' => 2000,
'currency' => 'eur',
'customer' => $user->stripe_id,
'description' => 'Some description',
]);
\Stripe\InvoiceItem::create([
'customer' => $user->stripe_id,
'amount' => 2500,
'currency' => 'usd',
'description' => 'One-time setup fee',
'auto_advance' => true,
]);
}
It adds user but without credit card details. Which arguments should I pass so that Stripe can create card token for specified user? Since it's a mobile app I cannot use Stripe.js for this purpose.
At the moment when the charge function is called I get the error message:
Cannot charge a customer that has no active card
This is my first project with payment gateway... So any help is really appreciated.
Just to clarify, an Invoice is something you would send to your customer and ask your customer to pay for the invoice 0 .
If you've already charged your customer, you will NOT send invoice to your customer because this will end up double charging your customer. Instead, you should send a receipt 1 to your customer on the charge you've created.
Saying all that,
To accept a payment from a customer, through Stripe, you could do the following
1. Create one-time charge
Step 1: create a token representing the credit card information. This normally involves your customer goes to your app/website and see a credit card form
You could use Stripe Element which is a preBuild secure UI showing a credit card form
...
...
var token = stripe.createToken(cardElement);
...
Step 2: After you get the token, pass it your PHP server side and call Stripe Charge API
// see https://stripe.com/docs/api/charges/create?lang=php#create_charge-source
$charge = \Stripe\Charge::create([
'amount' => 2000,
'currency' => 'eur',
'source' => $token->id,
'description' => 'Some description',
]);
Follow step by step guide to try the above
2. Save a credit card to a customer and charge the customer later
This is very similar to case 1, except now you are saving a card to the customer and charge the customer. token by default is single use only, if you want to reuse the card e.g. you are charging the customer later for some subscriptions, you will need to save the card to the customer aka Attach Card to customer before you can re-use the token/card.
Step 1: create a token same as above
...
var token = stripe.createToken(cardElement);
...
Step 2: Pass the token your PHP server side and save the card to the customer
// Create a new customer with the token
// https://stripe.com/docs/api/customers/create#create_customer-source
$customer = \Stripe\Customer::create([
"name" => $user->name,
"email" => $user->email,
"description" => "Test",
"source" => $token->id,
]);
// Or you could attach it to an existing customer
\Stripe\Customer::createSource(
'cus_xxxx',
[
'source' => $token->id,
]
);
Step 3: Charge the customer with the saved card.
// When charging this customer, it will use the default card saved at step 2
$charge = \Stripe\Charge::create([
'amount' => 2000,
'currency' => 'eur',
'customer' => $customer->id,
'description' => 'Some description',
]);
Follow step by step guide to try the above
The above shows the simplest way to charge to a customer credit card using Stripe API + Stripe Element
This is just the starting point. After you are familiar with the above concept, you could explore more on
1. PaymentMethod and PaymentIntent
These are the new APIs Stripe recommend but built on top of charges API
https://stripe.com/docs/payments/accept-a-payment
https://stripe.com/docs/payments/save-and-reuse
Invoicing
https://stripe.com/docs/billing/invoices/workflow
https://stripe.com/docs/billing/invoices/create-invoice
This is powerful billing tool which allows you to bill your customer either on their saved card or sending an invoice to your customer to pay.
Check this article (link). You can send the receipt of the transaction (not the invoice)
In your case I think you need pass the email from the server with the following
stripe.paymentIntents.create(
{
amount: 1000,
currency: USD,
payment_method: clonedPaymentMethod.id,
confirmation_method: 'automatic',
confirm: true,
receipt_email: 'abc#cde.com',
}, {
stripeAccount: stripeVendorAccount
},
function(err, paymentIntent) {
// asynchronously called
const paymentIntentReference = paymentIntent;
For compliance reasons I am generating tokens on the client side and sending those details to stripe. I want to display the last four digits and the type of card on my confirmation page
I am creating a customer
// Create a Customer:
$customer = \Stripe\Customer::create([
'source' => $token,
'email' => $current_user->user_email,
]);
than adding them to a subscription
//create the subscription for the customer
$subscription = \Stripe\Subscription::create(array(
'customer' => $customer->id,
"items" => array(
array(
"plan" => "dpc-standard",
),
)
));
The subscription returns https://stripe.com/docs/api#subscription_object
a ton of data including the invoice_id that is generated for the subscription but doesn't return any CC details
When you create a Customer and pass the source parameter set to a token id, it will save that card on the new customer. The value returned by this call is a Customer object with the sources property which will contain the new card you just saved.
You can access the last 4 digits easily using:
$last4 = $customer->sources->data[0]->last4;
I'm building stripe payment gateway in PHP, all things working. but I need to create first subscription for future dates(that user select). its always starts with current date when I submit details. Please help...
I'm not able to find there is date parameter for start subscription from specific date. Please help so I can complete payment gateway.
https://stripe.com/docs/api#subscriptions
$charge = \Stripe\Charge::create(array(
"amount" => 1,
"currency" => "usd",
"customer" => $stripe_custmerid,
"description" => $_SESSION['user_name']
));
$subscription = \Stripe\Subscription::create(array(
"customer" => $stripe_custmerid,
"plan" => $plan_id,
));
First of all, I am aware that this question has been asked but they didn't explain how to get the information using
charge.succeeded
I am creating an auth and capture charge using Stripe. I need the charge ID to confirm/capture the charge.
The following code creates the charge but doesn't charge until it's been approved.
\Stripe\Charge::create(array(
"amount" => $price,
"currency" => "usd",
"customer" => $custID, // obtained with Stripe.js
"description" => "Charge for test#example.com",
"capture" => false
));
I assumed that I could get the charge ID by doing:
$chargeID = $charge->id;
because that's how I get the customer ID when I create a customer. But I get nothing when I echo out the variable, which doesn't help since I want to save it in a database. I've looked everywhere but can't find anything concrete or recent.
Then to complete the charge. I have to capture it this way:
$ch = \Stripe\Charge::retrieve("$chargeID");
$ch->capture();
This is all from the Stripe API Reference but it doesn't explain how to get the charge ID. It doesn't even tell you how to get the customer ID, luckily Stack Overflow came through with that one.
This is all done using PHP.
According to Stripe's Documentation, when creating a new charge you get Stripe\Charge JSON object in return (or an exception if something went wrong).
You can var_dump the object you just created to see what your object looks like, but according the the API you can use the id of the returned object:
$charge = \Stripe\Charge::create(array(
"amount" => $price,
"currency" => "usd",
"customer" => $custID, // obtained with Stripe.js
"description" => "Charge for test#example.com",
"capture" => false
));
// you can use the var_dump function to see what's inside the $charge object
// var_dump($charge);
$chargeID = $charge->id;
(And you don't need to call the Charge::retrieve again, you can use the current $charge object).