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.