好的,我们有一个使用Joomla的成员站点,以及一个允许用户执行某些任务(创建团队)的组件。他们可以登录并创建一个团队,但他们无法向该团队添加成员,直到他们支付25美元的费用。
这通过Paypal IPN发生。下面基本上有这个表格......(删除了一些个人数据)。
<input type="hidden" name="cmd" value="_xclick">
<input type="hidden" name="item_name" value="<?php echo $item_name;?>">
<input type="hidden" name="business" value="blah@blah.com">
<input type="hidden" name="amount" value="25">
<input type="hidden" name="quantity" value="1">
<input type="hidden" name="no_note" value="1">
<!--<input name="userId" value="<?php //echo $user->id;?>" type="hidden">-->
<!--<input name="task" value="paypal_register" type="hidden">-->
<input type="hidden" name="currency_code" value="USD">
<!-- Enable override of buyers's address stored with PayPal . -->
<!-- Set variables that override the address stored with PayPal. -->
<input type="hidden" name="return" value="<?php echo JURI::ROOT().'index.php?option=com_fastball&view=payment&task=paypal_register';?>">
<input type="hidden" name="notify_url" value="<?php echo JURI::ROOT().'index.php?option=com_fastball&view=payment&task=paypal_register&userId='.$user->id.'&ipn=1';?>">
<!--<input type="image" name="submit" border="0" src="https://www.paypal.com/en_US/i/btn/btn_buynow_LG.gif" alt="PayPal - The safer, easier way to pay online">-->
</form>
&#13;
现在有时IPN重定向并且工作得很好。但其他时候它会从&#34; index.php?select = com_fastball&amp; view = payment&amp; task = paypal_register&amp; userId =&#34; to&#34; index.php?option = com_fastball&#34;,因此不会激活Joomla中包含通知时更新数据库的代码的视图。
似乎相当随机。有几种情况,1 - 新用户创建新团队。 2 - 老用户创建新团队。 3-老用户更新旧团队。
但无论如何,他们都点击此付款表单按钮,并将THESE通知URL作为隐藏输入。
所以我不确定PayPal在哪里A.)获取缩短的URL,或B.)由于某种原因,他们正在缩短它。它返回到缩短的URL,其中所有Paypal帖子信息显示在URL参数中(&amp; st =已完成&amp; amt = 25.00等来自paypals服务器)
这非常令人沮丧,我可能没有很好地解释,如果您有任何问题或想法,请告诉我。谢谢!
答案 0 :(得分:0)
对于网址路径,您应使用JURI::base()
而不是JURI::ROOT
。您可以在此处查看文档https://docs.joomla.org/Constants。
答案 1 :(得分:0)
这似乎是最近的PayPal问题。所有网址(return,cancel_return和notify_url)PayPal正在删除第一个&#39;&#39;之后所有内容的网址。
另请注意,问题似乎是间歇性的;它可能取决于您连接到的PayPal服务器(QueryString values removed from the IPN endpoint by PayPal)。
我对自己的PayPal表单进行了一些修改,只替换了&#39;&amp;&#39;使用'&'
(编码版本),似乎有效。