我的网站上集成了支付网关。当用户完成付款后,他/她将被重定向到特定页面,例如www.example.com/redirect。我想阻止用户直接在地址栏中输入此网址(www.example.com/redirect)并访问该页面。我想尽快了。
实际上该页面受访客用户保护,但如果登录的用户类型为url,则会将其重定向到该页面,因此将跳过付款选项。我希望用户必须先支付金额,然后重定向到此页面。
答案 0 :(得分:1)
很难准确回答,因为你只给出一个非joomla url作为例子,但在每个Joomla脚本的顶部是以下行:
defined('_JEXEC') or die( 'Restricted access' );
您显然无法阻止用户输入网址,因此至少会检测会话是否已到位。如果用户不在活动的Joomla会话中,则会触发并阻止访问。您可以根据您需要检查的内容轻松调整它以执行您想要的任何操作,例如,如果引荐来源是您的支付网关等。
答案 1 :(得分:0)
我有类似的愿望。我希望页面只显示用户是否已登录以及是否填写了订单输入页面。
我决定做的是检查POST中是否有数据。
controller / place_order.php(snipet)
public function submitOrder()
{
$post = JRequest::get('post');
$model = $this->getModel();
if($post != null && $post != ''){
if($model->placeOrder()){
}
}
JRequest::setVar('layout', 'submitOrder');
parent::display();
}
这可以防止任务执行我的placeOder函数在模型中的任何内容。然后我只是添加类似于提交订单页面的内容。在你的情况下“重定向”。
view / place_order / tmpl / submitOrder.php(snipet)
defined('_JEXEC') or die('Restricted access');
$user =& JFactory::getUser();
if ($user->guest) {
echo "<p>You must login to access this page.</p>";
}
else if($_POST == "" || $_POST == null){
echo "<p>You can not directly access this page.</p>";
}else {
//Your order was submitted successfully HTML (don't forget to close it at the bottom ;)
你有很多方法可以做到这一点......你可能甚至不需要检查控制器,如果你不想但我会按时保存。没有看到你的代码,很难定制答案,但如果你掌握这个概念,它应该有所帮助(我希望......)。
查看此页面答案 2 :(得分:0)
这应该在组件的基本控制器(controller.php
)中完成。如果你看一下这段代码:
// Check for edit form.
if ($vName == 'form' && !$this->checkEditId('com_weblinks.edit.weblink', $id))
{
// Somehow the person just went to the form - we don't allow that.
return JError::raiseError(403,
JText::sprintf('JLIB_APPLICATION_ERROR_UNHELD_ID', $id));
}
这个代码块存在于大多数核心组件中,旨在完全按照您的意愿执行。通过$this->checkEditId()
函数解释了它实际上如何实现它的功能。我希望您熟悉JControllerForm
类,如果您没有查看API。因为为页面创建了一个编辑ID,并且&#34;授权用户根据他的最后一页访问特定页面&#34; 由JControllerForm
完成。