我正在尝试在我的自定义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的内容重定向到不同的视图。
任何这方面的帮助将不胜感激!
所以我睡了一会儿,回到这个新鲜的面孔,意识到我做错了一些事情。我将在这里列出它们,以防其他人偶然遇到同样的问题。
- 视图中的窗体没有隐藏的输入
option
和task
。 - 我尝试在控制器中调用的函数在应该是公共的时是私有的。
这是我的代码现在的样子:
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();
}