如何在 Joomla 3.x 组件中发布 Stripe 付款表单



我正在尝试在我的自定义Joomla 3.x组件中实现一个名为com_swa的Stripe付款按钮。我正在尝试通过条纹的结帐来执行此操作。我一直在遵循 Stripe 文档中的这个示例,但我在进行 POST 时遇到了问题。

这是我到目前为止的代码:

com_swa/views/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/控制器/购票.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 = StripeCustomer::create(array(
        'email' => $email,
        'source'  => $token
    ));
    $charge = StripeCharge::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的内容重定向到不同的视图。

任何这方面的帮助将不胜感激!

所以我睡了一会儿,回到这个新鲜的面孔,意识到我做错了一些事情。我将在这里列出它们,以防其他人偶然遇到同样的问题。

  1. 视图中的窗体没有隐藏的输入optiontask
  2. 我尝试在控制器中调用的函数在应该是公共的时是私有的。

这是我的代码现在的样子:

com_swa/views/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/控制器/购票.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 = StripeCharge::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 (StripeErrorBase $e) {
            var_dump($e);
        }
    } else {
        // can't find ticketId in items.
    }
    die();
}

最新更新