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.
Related
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
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.
How can i get PLATFORM_SECRET_KEY in my test stripe account
i am payment using stripe connect
\Stripe\Stripe::setApiKey(PLATFORM_SECRET_KEY);
$tr = \Stripe\Payout::create(array(
"amount" => 24784,
"currency" => "usd",
"source_type" => "bank_account"
));
This represents the API key of your own account so it can be found in your dashboard: https://dashboard.stripe.com/account/apikeys
You would be acting as the platform where you make API requests on behalf of your connected accounts which is why you would use your own API key. You also need to pass the connected account id in the Stripe-Account header as documented here. The code should look like this:
\Stripe\Stripe::setApiKey(PLATFORM_SECRET_KEY);
$payout = \Stripe\Payout::create(
array(
"amount" => 24784,
"currency" => "usd",
"source_type" => "bank_account"
),
array(
"stripe_account" => "acct_XXXXX"
)
));
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,
));
Hello I am using following code for transaction
require_once('Stripe/lib/Stripe.php');
Stripe::setApiKey("<Api key>");
$customer = Stripe_Charge::create(array(
"amount" => 1500,
"currency" => "usd",
"card" => $_POST['stripeToken'],
"description" => "Charge for Facebook Login code."
));
echo "<pre>";print_r($customer);die;
// Charge the Customer instead of the card
$charge = Stripe_Charge::create(array(
"amount" => 1500,
"currency" => "usd",
"customer" => $customer->id)
);
echo 'Transaction Id '.$charge->id;
I have one cancel button if i click on that the payment which done by user will be revert back to client account
You'll most likely need to refund the money you charged from the card and then have the Cancel button run the charge on the customer instead.
This can be accomplished as followed:
(1) Retrieve the charge's identifier:
$charge = \Stripe\Charge::create(array(
...
));
// you can use the var_dump function to see what's inside the $charge object
// var_dump($charge);
$chargeID = $charge->id;
(2) Refund the user:
$re = \Stripe\Refund::create(array(
"charge" => $chargeID
));
(3) Charge the customer instead:
// Charge the Customer instead of the card
$charge = Stripe_Charge::create(array(
"amount" => 1500,
"currency" => "usd",
"customer" => $customer->id)
);
echo 'Transaction Id '.$charge->id;