hi, i am using stripe connect for payments.
I want to hold the payment until customer mark product as delivered. so how can i make a delay for the payment to go to the vendor until customer is satisfied with the product delivered.?
hi, i am using stripe connect for payments.
I want to hold the payment until customer mark product as delivered. so how can i make a delay for the payment to go to the vendor until customer is satisfied with the product delivered.?
I think, in the chargeCustomer function (app/addons/stripe_connect/Tygh/Addons/StripeConnect/Payments/StripeConnect.php) you should comment out the "$charge->capture();" part and call it for example on specific order status change
(!) Not tested
The Stripe Connect add-on already has option to delay transfer of funds, starting from version 4.13.1. Please check the Delay transfer of funds option in the payment method's settings.
https://docs.cs-cart.com/latest/user_guide/payment_methods/stripe_connect.html
I think, in the chargeCustomer function (app/addons/stripe_connect/Tygh/Addons/StripeConnect/Payments/StripeConnect.php) you should comment out the "$charge->capture();" part and call it for example on specific order status change
(!) Not tested
I will try this and let you know if it works.
The Stripe Connect add-on already has option to delay transfer of funds, starting from version 4.13.1. Please check the Delay transfer of funds option in the payment method's settings.
https://docs.cs-cart.com/latest/user_guide/payment_methods/stripe_connect.html
i think with this option we can delay payment for specific number of days what i want is to delay the payment until an action occurs from customer sides.
I think, in the chargeCustomer function (app/addons/stripe_connect/Tygh/Addons/StripeConnect/Payments/StripeConnect.php) you should comment out the "$charge->capture();" part and call it for example on specific order status change
(!) Not tested
i cant find your described function call i.e, "$charge->capture() in the following method
but it is present in the chargeWithout3DSecure function.
protected function chargeCustomer(array $order_info, Customer $customer, PayoutsManager $payouts_manager)
{
$amount = $this->formatAmount($order_info['total']);
$params = [
'amount' => $amount,
'currency' => $this->processor_params['currency'],
'customer' => $customer->id,
'metadata' => [
'order_id' => $order_info['order_id'],
'withdrawal' => 0,
],
'capture' => false,
'description' => $this->getChargeDescription($order_info),
];
$options = null;
if ($order_info['company_id'] && empty($order_info['use_gift_certificates'])) {
$receiver = static::getChargeReceiver($order_info['company_id']);
list($accounting_withdrawal,, $application_fee) = $this->getWithdrawalAmount($order_info, $payouts_manager);
$params['application_fee'] = $application_fee;
$params['metadata']['withdrawal'] = $accounting_withdrawal;
// payment receiver must be specified in options to perform Direct charge
$options = ['stripe_account' => $receiver];
// customer account must be shared to a connected account by converting it into a payment token
$params['source'] = $this->shareCustomer($customer, $receiver);
unset($params['customer']);
}
try {
$charger = Charge::create($params, $options);
} catch (Exception $e) {
throw new StripeException(
__('stripe_connect.charge_creating_error', ['[error]' => $e->getMessage()]),
$params
);
}
return $charger;
}
You are right. I meant the chargeWithout3DSecure function
You are right. I meant the chargeWithout3DSecure function
Hi i tried something different.
I added transfer_funds method in frontend/stripe_connect.pre.php
and called it from the customer end.
Can you tell me if its the correct approach.
and secondly can you tell me how i can confirm that payment is transferred to the vendor stripe account ?
here is the transfer_funds methods.
if (
$mode === 'transfer_funds'
&& !empty($_REQUEST['order_id'])
) {
$order_info = fn_get_order_info($_REQUEST['order_id']);
if (!$order_info || !fn_stripe_connect_is_allowed_transfer_funds_by_order_info($order_info)) {
return [CONTROLLER_STATUS_NO_CONTENT];
}
$processor = ServiceProvider::getProcessorFactory()->getByPaymentId($order_info['payment_id']);
try {
/** @var \Tygh\Common\OperationResult $result */
$result = $processor->manuallyTransferFunds($order_info);
$processor->updatePaymentsDescriptions($order_info);
$result->showNotifications();
$result->getData() && fn_set_notification(NotificationSeverity::NOTICE, __('notice'), __('stripe_connect.funds_transferred_successfully'));
} catch (Exception $e) {
fn_set_notification(
NotificationSeverity::ERROR,
__('error'),
__('stripe_connect.transfer_funds_error')
. ' '
. __(
'stripe_connect.reason_with_error_text',
['[error_text]' => $e->getMessage()]
)
);
}
if (isset($_REQUEST['redirect_url'])) {
return [CONTROLLER_STATUS_REDIRECT, $_REQUEST['redirect_url']];
} else {
return [CONTROLLER_STATUS_REDIRECT, 'orders.details?order_id=' . $order_info['order_id']];
}
}
return [CONTROLLER_STATUS_OK];
hi there, fid u managed to find a solution for this? I am facing same thing and I think all UE selling store who use Stripe or other 3rd party payment solution are facing it.
Hello!
I don’t think there will be an universal solution here, as all payment methods with automatic money distribution have time limits on how long the money is held for distribution to vendors.