How to update the amount on an existing Stripe charge using PHP? - php

I am working with Stripe's auth and capture. Currently, the charge is $200 upon creating it.
$charge = \Stripe\Charge::create(array(
"amount" => 20000,
"currency" => "usd",
"customer" => $custID, // obtained with Stripe.js
"description" => "Charge for test#example.com",
"capture" => false
));
But I want to change it to $100 upon capturing the charge.
$ch = \Stripe\Charge::retrieve("$chargeID");
$ch->amount = 10000;
$ch->save();
$ch->capture();
This part is wrong:
$ch->amount = 10000;
How would I do this? I'm using PHP.
This should be possible since Stripe's official article on auth and capture mentions it:
https://support.stripe.com/questions/does-stripe-support-authorize-and-capture

Since you have not previously captured the transaction you can set the ammount when capturing like so.
$ch = \Stripe\Charge::retrieve($chargeID);
$ch->capture(array("amount" => 10000));
https://stripe.com/docs/api#capture_charge

Related

Stripe Charge after service complete

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

stripe create payout getting error "Sorry, you don't have any external accounts in that currency (usd)"

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.

Get charge ID after Stripe payment and issue refund in PHP

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
));

How to connect to managed account in stripe and make a payment?

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.

Stripe Connect PHP - Split Payments?

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,
));

Categories