2016-12-14 2 views
3

У меня есть следующий код, он работает без ошибок, однако он не вставляет средства на сервер Stripe. Библиотека Stripe установлена ​​правильно.Как интегрировать платежи в Yii2?

config.php

<?php 
    //require_once('vendor/autoload.php'); 

    $stripe = array(
     "secret_key"  => "sk_test_key", 
     "publishable_key" => "pk_test_key" 
    ); 

\Stripe\Stripe::setApiKey($stripe['secret_key']); 

SiteController.php

public function actionSend() 
    { 
     $model = new SendForm(); 

      if ($model->load(Yii::$app->request->post()) && $model->validate()) { 
      $model->insertCharge(); 
       //Yii::$app->session->setFlash('Successfully charged $20.00!'); 
       return $this->render('send-confirm', ['model' => $model]); 
      } else { 
       return $this->render('send', [ 
        'model' => $model, 
       ]); 
      } 

    }// end function 

send.php

<?php $form = ActiveForm::begin(['options' => ['method' => 'post']]); ?> 

    <script src="https://checkout.stripe.com/checkout.js" class="stripe-button" 
    data-key="<?php echo $stripe['publishable_key']; ?>" 
    data-name="TEST" 
    data-description="Testing" 
    data-amount="2000" 
    data-locale="auto"> 

    </script> 
    <?php ActiveForm::end(); ?> 

SendForm.php

class SendForm extends Model 
{ 

    public function insertCharge() 
    { 

    \Stripe\Stripe::setApiKey(Yii::$app->stripe->secret_key); 

     $request = Yii::$app->request; 

     $token = $request->post('stripeToken'); 

     //$token = $_POST['stripeToken']; 

     $customer = \Stripe\Customer::create(array(
      'email' => '[email protected]', 
      'source' => $token 
    )); 

     $charge = \Stripe\Charge::create(array(
      'customer' => $customer->id, 
      'amount' => 2000, 
      'currency' => 'usd' 
    )); 

    }//end function 

}//end class 

Что может быть отсутствует или что не так? Благодарю.

+0

Неясно мне из вашего кода, как передний конец решает опубликовать в методе insertCharge(). В вашей форме нет атрибута 'action'. Кроме того, вы, вероятно, не хотите использовать Yii для создания формы. Это почти наверняка на 100% мудрее, чтобы создать форму с нуля, так как Checkout собирается сделать какую-то магию, чтобы опубликовать это действие и будет отменено, когда будет выполнен POST-запрос. – korben

+0

Итак, вы предлагаете мне применить метод действия для публикации токена? т. е.

+0

Да! Это более или менее то, что я получаю. В этом случае просто удалите леса из Yii, чтобы убедиться, что Checkout ведет себя так, как ожидалось. – korben

ответ

3

Я решил проблему, удалив леса формы Yii2 в представлении и добавив beforeAction на контроллер.

send.php

<form action="index.php?r=site%2Fcharge" method="post">

SiteController.php

public function beforeAction($action) 
{ 
    $this->enableCsrfValidation = false; 
    return parent::beforeAction($action); 
} 

public function actionCharge() 
{ 
    return $this->render('charge'); 
} 
+0

Рад видеть, что у вас это работает! – korben

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