我的网站上集成了一个支付网关。当用户完成付款后,他/她将被重定向到特定页面,例如 www.example.com/redirect。我想阻止用户直接在地址栏中输入此网址(www.example.com/redirect)并访问该页面。我要尽快。
实际上,该页面受到访客用户的保护,但如果登录用户键入该 url,那么它会将他重定向到该页面,因此将跳过付款选项。我希望用户必须先支付金额,然后再重定向到此页面。
我的网站上集成了一个支付网关。当用户完成付款后,他/她将被重定向到特定页面,例如 www.example.com/redirect。我想阻止用户直接在地址栏中输入此网址(www.example.com/redirect)并访问该页面。我要尽快。
实际上,该页面受到访客用户的保护,但如果登录用户键入该 url,那么它会将他重定向到该页面,因此将跳过付款选项。我希望用户必须先支付金额,然后再重定向到此页面。
很难准确回答,因为您只给出了一个非 joomla 网址作为示例,但在每个 Joomla 脚本的顶部都是以下行:
defined('_JEXEC') or die( 'Restricted access' );
您显然不能阻止用户输入 url,因此这至少会检测会话是否已经到位。如果用户不在活动的 Joomla 会话中,这将触发并阻止访问。您可以轻松地调整它以根据您的要求做任何您想做的事情,具体取决于您必须检查的内容,即推荐人是否是您的支付网关等。
我也有类似的愿望。我希望该页面仅在用户登录并填写订单输入页面时显示。
我决定做的是检查 POST 中是否有数据。
控制器/place_order.php(片段)
public function submitOrder()
{
$post = JRequest::get('post');
$model = $this->getModel();
if($post != null && $post != ''){
if($model->placeOrder()){
}
}
JRequest::setVar('layout', 'submitOrder');
parent::display();
}
这可以防止任务在模型中执行我的 placeOder 函数。然后我只添加类似于提交订单页面的内容。在你的情况下“重定向”。
查看/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 ;)
有很多方法可以做到这一点......如果你不想,你可能甚至不需要检查控制器,但我这样做是为了节省时间。如果没有看到你的代码,很难定制答案,但如果你在这里掌握了这个概念,它应该会有所帮助(我希望......)。
您可能还想从Joomla 中查看有关授权和权限的此页面。
这应该在组件的基本控制器 ( 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,请查看该 API。因为为页面创建编辑 ID 并“授权用户根据他的最后一页访问特定页面”是由JControllerForm
.