У меня есть сайт, на котором для обработки платежей по подписке используется Stripe. Есть только один тип подписки. Я следил за этим руководством в NetTuts, чтобы выполнить первоначальную настройку. Была форма, работающая нормально, обработка подписок и все заработало. Клиент запросил код купона. Stripe поддерживает это, поэтому я решил добавить код купона в существующую форму.
Я установил коды купонов в Stripe, установил свои тестовые ключи и перешел в тестовый режим в Stripe. Я провожу несколько проверок своего кода:
- Проверьте, введен ли купон, если нет, создайте новый объект клиента без опции купона.
- Проверьте, действителен ли купон, если нет, верните ошибку.
Если купон был введен и он действителен, то передайте соответствующий объект купона Stripe в качестве опции при создании нового клиента.
if(isset($couponCode) && strlen($couponCode) > 0) {
$using_discount = true;
try {
$coupon = Stripe_Coupon::retrieve($couponCode);
if($coupon !== NULL) {
$cCode = $coupon;
}
// if we got here, the coupon is valid
} catch (Exception $e) {
// an exception was caught, so the code is invalid
$message = $e->getMessage();
returnErrorWithMessage($message);
}
}
try
{
if($using_discount == true) {
$customer = Stripe_Customer::create(array(
"card" => $token,
"plan" => "basic_plan",
"email" => $email,
"coupon" => $cCode
));
}
else {
$customer = Stripe_Customer::create(array(
"card" => $token,
"plan" => "basic_plan",
"email" => $email
));
}
$ couponCode заполняется полем формы правильно так же, как и все остальные поля, я трижды проверил, правильно ли оно извлекается.
Когда я пытаюсь отправить форму без кода купона, она списывает полную сумму и правильно проходит через Stripe.
Однако, если я ввожу действительный ИЛИ недопустимый код купона, он не передает объект купона с объектом клиента при создании нового объекта клиента и взимает полную сумму при прохождении через Stripe.
Я часами смотрел на код и не мог понять, почему он всегда не распознает код скидки и не передает соответствующий объект купона в Stripe.