I am creating project using angular and larval. In my project i am integrating stripe for payment.My requirements are:
User fill their card details but not charged.User is charged after technician completes their service.I don't know how this flow will work.I already setup stripe in my project:
$charge = Stripe\Charge::create ([
"amount" => 10000,
"currency" => "gbp",
"source" => $token,
"description" => "payment",
"receipt_email"=>$email
]);
$charge = Stripe\Charge::create ([
"amount" => 10000,
"currency" => "gbp",
"source" => $token,
"description" => "payment",
"receipt_email"=>$email,
**"capture" => false**
]);
Notice the capture => false option here. This is what you need.
You will have to store the charge id some which you will find in your $charge variable.
When you want to charge actually charge do this,
$charge = \Stripe\Charge::retrieve($stripe_charge_id);
$charge->capture();
$stripe_charge_id will be the charge id that you stored earlier.
Also keep in mind that the uncaptured charge expires in 7 days.
you should check the documentation https://stripe.com/docs/api/charges/capture
Related
I am working on create payout, while run the code i am getting error
Sorry, you don't have any external accounts in that currency (usd)
first i am creating the customer, and then i am creating the bank account, and after then i am doing the payout, can anyone please help me how can i resolve this issue, here is my code
<?php
require_once('init.php');
\Stripe\Stripe::setApiKey("*************");
$customer = \Stripe\Customer::create(array(
"description" => "Customer for payout"
));
$customer_id = $customer->id;
$customer = \Stripe\Customer::retrieve($customer_id);
$bank_data = \Stripe\Token::create(array(
"bank_account" => array(
"country" => "US",
"currency" => "usd",
"account_holder_name" => "Charlotte Thomas",
"account_holder_type" => "individual",
"routing_number" => "110000000",
"account_number" => "000123456789"
)
));
$bank_token = $bank_data->id;
$bank_account = $customer->sources->create(array("source" => $bank_token));
$payout_data = \Stripe\Payout::create(array(
"amount" => 100,
"currency" => "usd",
));
echo "<pre>";
print_r($payout_data);
die;
?>
You're adding a bank account as a payment source to a customer object, i.e. for ACH payments.
For payouts, if this is your own Stripe account, you need to enter your bank account details in your dashboard at https://dashboard.stripe.com/account/payouts. You'll also need to set your payout schedule to "Manual" if you want to be able to create payouts via the API.
Also note that when creating charges, funds are not immediately available, so you will not be able to create a payout immediately after creating a charge. You can read all about payouts in Stripe's documentation at https://stripe.com/docs/payouts.
I'm using Stripe to process my payments in PHP with the API found here https://github.com/myg0v/Simple-Bootstrap-Stripe-Payment-Form
I'm using the following code to issue payment:
$charge = Stripe_Charge::create(array("amount" => $amount,
"currency" => "$currency",
"card" => $stripetoken,
"description" => $email));
Will the following code retrive the charge_id and refund the user?
$charge_id = $charge->stripe_charge_id;
$refund = Stripe_Refund::create(array(
"charge" => "$charge_id"
));
This syntax is for old versions of Stripe's PHP library (1.x). You should make sure that you use the latest version (currently 4.4.0).
Stripe's API reference includes samples for every request and language. You can check the sample requests for:
creating a charge
creating a refund
Basically:
$charge = \Stripe\Charge::create(array(
"amount" => $amount,
"currency" => $currency,
"source" = $token,
"description" => "Charge for $email"
));
$refund = \Stripe\Refund::create(array(
"charge" => $charge->id
));
First of all, I'm Sorry for my english.
I want to create a charge in Stripe from account A to account B. The account A is a mananaged account. The account B can be any of multiple accounts. But when I try to create the charge with the destination parameter the API resturn an error. Says:
"error": {
"type": "invalid_request_error",
"message": "The destination param must be a connected account.",
"param": "destination"
}
How I could connect the destination account (Account B) to get this??. I'm using the php api stripe to this. Next this is the example code that I using. Thanks in advance:
\Stripe\Stripe::setApiKey('sk_test_ACCOUNT_A_KEY');
// Charge the order:
$charge = \Stripe\Charge::create(array(
// 'source' => $token,
'customer' => 'cus_ID_CUSTOMER_TO_GET_PAYMENT',
"amount" => 100000,
"currency" => "usd",
"description" => "from account A to account B",
'destination' => 'acct_ID_DESTINATION_ACCOUNT'
)
);
echo "<pre>";
print_r($charge);
echo "</pre>";
If you have gone through stripe documentations you clearly will have seen there are three types of charges in Stripe connect.
Direct Charges
Destination Charges
Seperate Charges
In your case, you will have to use destination charges. You could use
$charge = \Stripe\Charge::create(array(
"amount" => 1000,
"currency" => "usd",
"source" => "cus_ID_CUSTOMER_TO_GET_PAYMENT",
"destination" => array(
"account" => "{CONNECTED_STRIPE_ACCOUNT_ID}",
),
));
to charge a customer on behalf of your connected account.
I'm using the Stripe Connect API with Managed Accounts to distribute payments to service providers on my app.
Our app would like to take 20% of each charge, and then distribute the rest to the service provider.
I know I can take the full amount of a charge and send it to a managed account, like so:
\Stripe\Stripe::setApiKey('sk_live_xxxxxx');
$charge = \Stripe\Charge::create(array(
"amount" => (int) $payment,
"currency" => "usd",
"customer" => $customerID,
"destination" => $providerID
));
But is there a way to only send 80% (or any partial amount) of a payment to the destination account, keeping the rest in our umbrella account? I really don't want to have to charge a customer's card twice just to facilitate this model.
When creating a charge with Connect, you choose your platform's fee with the application_fee parameter. So you can do something like this:
$amount = 1000; // amount in cents
$application_fee = intval($amount * 0.2); // 20% of the amount
$charge = \Stripe\Charge::create(array(
"amount" => $amount,
"currency" => "usd",
"customer" => $customerID,
"destination" => $providerID,
"application_fee" => $application_fee,
));
my stripe account is configured with test. and using test keys into my laravel application.
While posting, i am creating new stripe user if not exist like this,
Stripe::setApiKey(Config::get('constants.features.stripe.secret'));
$token = $input['_token'];
$customer = Stripe_Customer::create(array(
"description" => "#{$user->id} / {$user->username} / {$user->email}",
"source" => $token,
"email" => $user->email
));
And creating charge like this,
$charge = Stripe_Charge::create(array(
"amount" => '5000',
"currency" => "gbp",
"customer" => $customer->id,
"description" => 'description',
"statement_descriptor" => strtoupper("test desc")
));
But it return error Stripe_InvalidRequestError No such token:
The _token input from Laravel is the CSRF token. This is not the token you should be passing to stripe in the source field. The token in the source field should be the token generated by the stripe.js library which allows you to identify a customers credit card without actually seeing the card details.
The stripe documentation explains how you should be handling this https://stripe.com/docs/stripe.js