0

我对 PHP 真的很陌生,并且有一些问题......

我一直在实现一个 PayPal 支付表单,代码如下:

<input type="hidden" name="currency_code" value="USD">
<input type="hidden" name="lc" value="US"> <input type="hidden" name="rm" value="2">
<input type="hidden" name="shipping_1" value="<?php echo $shipping; ?>">
<input type="hidden" name="return" value="http://www.predragstevanovic.com/webprodavnica/index.php?view=thankyou"/>
<input type="hidden" name="cancel_return" value="predragstevanovic.com/webprodavnica/">
<input type="hidden" name="notify_url" value="predragstevanovic.com/webprodavnica/paypal.php"/>
<input type="submit" name="pay now" value="Plati" /> 

我的根目录是webprodavnica,在这个目录里面我有:index.php, db_fns.php, cart_fns.phppaypal.php然后我有另一个目录views,里面还有 2 个目录:layoutswithshop.phpshopwith plati_kupovinu.phpindex.phpand thankyou.php

当我按下支付按钮时,我被卡住了,它转到了贝宝,当完成交易什么都不做时,我想将我重定向到我服务器上的thankyou.php 页面。我在本地托管这个,因为我找不到免费托管来测试这个应用程序......如果有人能推荐一个会很酷的。我也没有域,predragstevanovic.com只是一个例子。

所以,发生的事情是用户点击支付按钮,然后将用户带到贝宝(他们离开我的页面),在那里他们完成了交易,但没有返回到我想要显示的页面thankyou.php

如果我想从我的服务器显示thankyou视图,如何编写代码?

谢谢

4

2 回答 2

0
<?php $view = "Thank You"?>
<input type="hidden" name="return" value="<?php echo $view;?>">

您可以根据需要设置 $view 的值。如果您想动态设置值(可能来自 ajax 调用),那么您可以使用 javascript 来执行此操作

从你的 js 向thankyou.php 进行 json 调用。从thankyou.php 中,返回你想要发送的json_encode。在 js 中,您可以使用输入字段的“id”属性设置值。 http://php.net/manual/en/function.json-encode.php
http://api.jquery.com/jQuery.getJSON/

你的问题会随着时间而改变。忽略前面的部分。
编辑:根据我的经验,当您将您的网站与贝宝或任何支付网站集成时,您需要提供一个 URL 作为参数。如果您在提供并且仍然没有将其重定向到您的站点,我怀疑存在配置问题,或者存在一些错误。

于 2013-10-30T07:06:04.897 回答
0

问题归结为构建一个有效的 URL 以设置input returnPayPal 将读取的内容以了解将用户重定向到哪里。由于您没有域,因此您必须使用您的 IP 来识别您的服务器。

假设您有一个公共 IP,您可以通过询问 Wolfram|Alpha来查询它。


现在,由于您有兴趣为您的应用程序寻找托管,您将需要一个易于适应的解决方案。我建议的是配置文件。让我们称之为configuration.php

我们必须将此配置文件放在服务器中,但我们不希望用户能够直接访问它,以解决我们使用以下代码:

<?php
    if (count(get_included_files()) == 1)
    {
        header('HTTP/1.0 404 Not Found');
        exit();
    }
?>

此代码检查文件是否被客户端直接访问(即:用户访问此文件的 url,而不是包含在另一个 PHP 文件中或在服务器中读取)。如果发生这种情况,它将返回 404,就好像文件不存在一样。


您可以使用此文件设置一些您可以在其他 PHP 文件中访问的变量,为此您必须包含此文件,如下所示:

<?php require_once('configuration.php'); ?>

请注意,我上面提供的代码将允许毫无问题地包含该文件。


现在,您将在该文件中使用您的公共 IP 设置一个变量。这是推荐的方法:

<?php
    if (count(get_included_files()) == 1)
    {
        header('HTTP/1.0 404 Not Found');
        exit();
    }
    $_configuration = array
    (
        'Server' => '127.0.0.1' //place your real public IP
    );
?>

注意:$_configuration是一个关联数组,你可以给它设置很多值,例如:

$_configuration = array
(
    'Server' => '127.0.0.1',
    'MySQL_User' => 'MrAdmin',
    'MySQL_Password' => 'ACRYSPXN'
);

要访问此变量,您将执行以下操作:

<?php
    require_once('configuration.php');
    echo $_configuration['Server'];
?>

注意:require_once每个文件只包含一次,因此您可以require_once('configuration.php');在文件中多次放置而不会出现问题。


最后,我们将使用该配置变量来创建您传递给 paypal 的 Url:

<?php
    require_once('configuration.php');
    $server = $_configuration['Server'];
?>
<input type="hidden" name="return" value="http://<?php echo $server; ?>/webprodavnica/index.php?view=thankyou"/>

在这里,您的 IP 代替了域。这允许你在配置文件中设置你的domiang(一旦你得到一个),它应该可以正常工作:

<?php
    if (count(get_included_files()) == 1)
    {
        header('HTTP/1.0 404 Not Found');
        exit();
    }
    $_configuration = array
    (
        'Server' => 'predragstevanovic.com' //place your real Internet domain
    );
?>

最后的细节将用户正确重定向到thankyou.php. 您可以按如下方式实现:

<?php
    if ($_SERVER['REQUEST_METHOD'] == 'GET')
    {
        //The server recieved a GET request ...
        if (array_key_exists('view', $_GET))
        {
            //... with the view parameter ...
            if ($_GET['view'] == 'thankyou')
            {
                //... having the value 'thankyou'.
                //redirect to thankyou.php
                $target = './views/shop/thankyou.php';
                header('Location: '.$target, true, 307);
                exit();
            }
        }
    }
?>
于 2013-10-30T09:23:26.660 回答