2017-05-28 5 views
1

私はカスタムのJoomla 3.xコンポーネントにストライプ支払いボタンを実装しようとしています。com_swaです。私はStripe's checkoutでこれをやろうとしています。私はStripe documentationthis exampleに従っていますが、私はPOSTをやっていません。ここで Joomla 3.xコンポーネントにストライプ支払いフォームを投稿するには

は、私がこれまで持っているコードです:

com_swa /ビュー/ ticketpurchase/TMPL/default.php:

<form action="<?php echo JUri::root() .'index.php?option=com_swa&task=ticketpurchase.http_post' ?>" method="POST" > 
    <script 
     src="https://checkout.stripe.com/checkout.js" class="stripe-button" 
     data-key="pk_test_eXamPleK3y" 
     data-amount="<?php echo $item->price * 100 ?>" 
     data-currency="GBP" 
     data-label="Buy now!" 
     data-name='SWA' 
     data-description="Test description" 
     data-image="https://stripe.com/img/documentation/checkout/marketplace.png" 
     data-locale="auto" 
     data-zip-code="true" 
     data-email="<?php echo $this->user->email ?>" > 
    </script> 
</form> 

com_swa /コントローラ/ ticketpurchase.php:

private function http_post() { 

    JLog::add("http_post called", JLog::INFO, 'com_swa'); 

    $token = $_POST['stripeToken']; 
    $ammount = $_POST['data-amount']; 
    $currency = $_POST['data-currency']; 

    var_dump("Token: " . $token); 

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

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

    var_dump("Charge: " . $charge); 
    JLog::add('Charge: ' . $charge, JLog::INFO, 'com_swa'); 

} 

しかし、これはちょうど500 - View not found [name, type, prefix]: home, html, swaViewエラーになります。私はログファイルをチェックしており、http_post()メソッドが呼び出されたことを示すログはありません。

今はvar_dumpまたはいくつかの変数を記録したいだけですが、将来は$ chargeの内容に基づいて別のビューにリダイレクトしたいと考えています。

これについてのお手伝いをさせていただきますようお願い申し上げます。

+0

「swaViewHome」というビュークラスはありますか? –

+0

コメントありがとうございます。私はswaViewHomeというビューを持っていませんが、私が間違っていたことを理解しました。私はまもなく答えを発表します。 – geekman92

答えて

0

私は少し眠りをとり、この新鮮な顔に戻ってきて、間違っていたことをいくつか実現しました。他の誰かが同じ問題に遭遇したとき、私はそれらをここに挙げるでしょう。

  1. ビュー内のフォームに隠し入力がありませんoptiontaskです。
  2. 私がコントローラで呼び出しようとしていた機能は、公開されていたはずのプライベートなものでした。ここで

私のコードは今のように見えるものです:

com_swa /ビュー/ ticketpurchase/TMPL/default.php:

<form action="<?php echo JRoute::_('index.php?option=com_swa&task=ticketpurchase'); ?>" method="POST" > 
    <input type="hidden" name="option" value="com_swa" /> 
    <input type="hidden" name="task" value="ticketpurchase.http_post" /> 
    <input type="hidden" name="ticketId" value="<?php echo $item->id ?>"> 
    <script 
     src="https://checkout.stripe.com/checkout.js" class="stripe-button" 
     data-key="pk_test_tDaDvORCWuyXb0VRIHtMStDR" 
     data-amount="<?php echo $item->price * 100 ?>" 
     data-currency="GBP" 
     data-label="Buy now!" 
     data-name="SWA" 
     data-description="<?php echo $item->event_name . ' - ' . $item->ticket_name; ?>" 
     data-image="https://stripe.com/img/documentation/checkout/marketplace.png" 
     data-locale="auto" 
     data-zip-code="true" 
     data-email="<?php echo $this->user->email ?>" > 
    </script> 
</form> 

com_swa /コントローラ/ ticketpurchase.php:

public function http_post() { 

    JLog::add("http_post called", JLog::INFO, 'com_swa'); 

    $token = $this->input->getString('stripeToken'); 
    $email = $this->input->getString('stripeEmail'); 
    $ticketId = $this->input->getString('ticketId'); 

    $model = $this->getModel('ticketpurchase'); 
    $tickets = $model->getItems(); 
    $member = $model->getMember(); 

    $ticket = null; 
    foreach ($tickets as $t) { 
     if ($t->id == $ticketId) { 
      $ticket = $t; 
      break; 
     } 
    } 

    if ($ticket != null) { 
     try { 
      $charge = \Stripe\Charge::create(array(
       'description' => $ticket->event_name . ' - ' . $ticket->ticket_name, 
       'amount' => $ticket->price * 100, 
       'currency' => 'GBP', 
       'receipt_email' => $email, 
       'source' => $token, 
       'metadata' => array(
        'ticket_id' => $ticket->id, 
        'member_id' => $member->id 
        ) 
      )); 
      var_dump("Charge: " . $charge); 
      JLog::add('Charge: ' . $charge, JLog::INFO, 'com_swa'); 

     } catch (\Stripe\Error\Base $e) { 
      var_dump($e); 
     } 
    } else { 
     // can't find ticketId in items. 
    } 
    die(); 
} 
関連する問題