Stripeを使用してサブスクリプションの支払いを処理しているサイトがあります。サブスクリプションのタイプは1つだけです。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
));
}
$ cuponCodeには、他のすべてのフィールドが入力されるのと同じ方法でフォームフィールドが正しく入力されます。正しくプルされていることを、トリプルチェックしました。
クーポンコードなしでフォームを送信しようとすると、全額が請求され、Stripeを正しく通過します。
ただし、有効または無効なクーポンコードを入力すると、新しい顧客オブジェクトを作成するときにクーポンオブジェクトが顧客オブジェクトに渡されず、Stripeを通過するときに全額が請求されます。
私は何時間もコードを見てきましたが、なぜ割引コードを常に認識できず、一致するクーポンオブジェクトをStripeに渡さないのか理解できないようです。