2013-02-22 2 views
4

У меня есть сайт, который использует Stripe для обработки подписных платежей. Существует только один тип подписки. Я выполнил this tutorial на NetTuts, чтобы выполнить первоначальную настройку. Имел форму, обрабатывающую тонкую обработку подписки, и все сработало. Клиент запросил код купона. Stripe поддерживает это, поэтому я намеревался добавить код купона в существующую форму.Использование купонных кодов с полосой

Я установил коды купонов в Stripe, установил свои тестовые ключи и переключился в тестовый режим в полосе. я выступаю несколько проверок в моем коде:

  1. Проверьте, чтобы увидеть, был ли введен купон, если не создать новый объект клиента без опции купона
  2. Проверьте, действительно ли Купон , если не вернуть ошибку

Если был введен купон и он действителен, то при создании нового клиента передайте соответствующий купон-объект 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.

ответ

4

Возможно, это немного устарело, и вы нашли решение для своего кода. Но, похоже, все, что вам нужно сделать, это передать исходный $ couponCode в качестве значения массива для купона. Как указано codasaurus, вы просто получаете массив обратно из полосы купона, который вам не нужен, если вы не сделали $ cCode-> id и передали идентификатор обратно в ваш массив, чтобы создать клиента.

Я изменил, когда вы установили значение $ using_discount в true, поскольку это приведет к отправке купонного кода, если купон был действительным или нет.

Как только купон действительно действителен, мы отправим купон. Вам нужно только значение вашего отправленного состояния, так что купон - это ссылка на скидку в системе. Или вы можете использовать $ coupon-> id, если хотите создать его таким образом.

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

if($coupon!='' && strlen($coupon) > 0) { 
      try { 
       $coupon = Stripe_Coupon::retrieve($coupon); //check coupon exists 
       if($coupon !== NULL) { 
       $using_discount = true; //set to true our coupon exists or take the coupon id if you wanted to. 
       } 
       // 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); 
      } 

     } 
     if($using_discount==true) 
     { 
      $customer = Stripe_Customer::create(array(
        "card" => $token, 
        "plan" => $plan, 
        "email" => $id, 
        "coupon"=>$coupon) //original value input example: "75OFFMEMBER" stripe should be doing the rest. 
       ); 
     } 
     else 
     { 
      $customer = Stripe_Customer::create(array(
        "card" => $token, 
        "plan" => $plan, 
        "email" => $id) 
       ); 
     } 
+0

Да. Я думал, что я прохожу код купона, но у меня было несколько перепутанных имен переменных, поэтому на самом деле это не получилось. Спасибо за ответ, хотя, я уверен, что это поможет многим, кто приходит сюда из Google. – biggles

2

Глядя на документацию https://stripe.com/docs/api#create_customer, вызов Stripe_Customer :: create() ищет только код купона. Похоже, вы проезжаете весь объект купона.

Если ваша первая попытка не улавливается, $ couponCode уже имеет ваш код купона. Кроме того, есть несколько других проверок, которые необходимо выполнить, чтобы определить, действительно ли купон. Например, если coupon-> times_redeemed < coupon-> max_redemptions, или если coupon-> redeem_by прошел и т. Д. Вы также можете проверить, использует ли клиент купон, проверяя объект скидок клиента.

Если какая-либо из этих проверок терпит неудачу, просто установите значение $ using_discount = false;

Смежные вопросы