Зарядка карты несколько раз - PullRequest
0 голосов
/ 10 апреля 2019

Привет, я включил Stripe в свое приложение, чтобы продать некоторые платные регистрации.В моей полосовой панели я уже создал несколько купонов , некоторые из них имеют процентные скидки, а некоторые фиксированные.Мне нужно заряжать своих клиентов в нескольких валютах. У меня проблема с начислением платы клиенту. Допустим, у меня есть план на 348 долл. США в год, и я предоставил

  1. Клиенту C1 купон CP1 с фиксированной скидкой 347 долл. (Таким образом, сумма начисления будетвсего $ 1)
  2. Клиент C2 - купон CP2 со скидкой 50% (таким образом, сумма начисления составит $ 174)

В случае 2 проблема не возникает, и счет-фактура создается.но в случае 1 он взимается 2 раза:

  • Сначала за 1 доллар (стоимость со скидкой)
  • Вся сумма 348 долларов (не знаю, с чего это взимается)

Вот мой код ниже:


Обновлена ​​плановая стоимость (применен купон, в котором "определенная сумма отключена")

$cc = $_POST['coupon'];
$actual_amount = $_POST['actual_amount'];
$cpnObj = \Stripe\Coupon::retrieve($cc);
$cpnDtl = $cpnObj->getLastResponse()->json;
if($cpnDtl['id']){
	$amount_off = $cpnDtl['amount_off'];
	$percent_off = $cpnDtl['percent_off'];
	
	if ($amount_off) {
		$discount = $amount_off/100;
		$paymoney = $actual_amount - $discount; 
	}

	if ($percent_off) {
		$discount = $actual_amount * $percent_off/100;
		$paymoney = $actual_amount - $discount;                
	}
}

Позже через некоторую переменную сеанса я использую эту разрозненную сумму для списания средств с карты клиента

$token = $_POST['stripeToken'];  
$plan_id = $_POST['plan_id'];
		
//Creating Customer
$customer = \Stripe\Customer::create([
	"description" => "creating the customer",
	"email" => "myemail@somedomain.com",
	"source" => $token // obtained with Stripe.js
]);

//If Merchant account is created at Stripe end, Charge his Card
if($customer->id != ''){
	$chargeCard = \Stripe\Charge::create([
		"amount" => $paymoney (calculated above after applying the promo-code),
		"currency" => 'USD',
		"description" => "subscription for a year",
		"capture" => true,
		"customer" => $customer->id,
		"receipt_email" => "myemail@somedomain.com",
		"statement_descriptor" => "card is charged for so and so ... "
	]);
}

//If Card is charged successfully, create the Merchant's Subscription at Stripe end
if($chargeCard->id != ''){
	$subscription = \Stripe\Subscription::create(array(
		"customer" => $customer->id,
		"items" => [
						[
							"plan" => $plan_id,
						],
				],
		"billing" => "charge_automatically",
		"cancel_at_period_end" => false
	));
}

Я прочитал в документе здесь https://stripe.com/docs/api/, что при создании Charge или Customer " Source " является необязательным параметром.Это вопрос " Источник "?Также в документе " создание клиента " говорится, что

Вы должны предоставить источник, если у клиента еще нет действительного источника, и вы подписываете клиента наавтоматически взимать плату за тариф, который не является бесплатным.

, поэтому я могу использовать ЖЕ « Source " при создании клиента и создании объекта начисления?

Можете ли вы помочь мне в этом отношении?

Заранее спасибо.

1 Ответ

0 голосов
/ 11 апреля 2019

Я думаю, что комбинация платы и кода подписки, которая у вас есть, вызывает двойную оплату.Сначала вы выдаете одноразовый платеж.Это успешно, и, глядя на код, он сразу же начинает оплату подписки.Есть ли какая-то конкретная причина, по которой вы должны зарядить карту и создать подписку?

Поскольку я не думаю, что вам нужен первый созданный платеж, более того, вы можете использовать купоны непосредственно насоздание подписки :

$subscription = \Stripe\Subscription::create(array(
    "customer" => $customer->id,
    "coupon" => $cc,
    "items" => [
                    [
                        "plan" => $plan_id,
                    ],
            ],
    "billing" => "charge_automatically",
    "cancel_at_period_end" => false
));

Так что вам не нужен этот расчетный бит в начале.

Что касается вашего вопроса об источнике (сохраненная карта, банковский счет и т. Д.): При использовании объекта клиента он автоматически будет использовать источник по умолчанию из него.Если у них не хранится больше карточек, и они не выбирают одну для использования, указывать ее не нужно.

...