因为安全因素,不能向客户端显示表单参数,  而是要客户点击提交后, 通过服务端程序处理并生成动态表单, 并以post方式提交到另外一个站点, 并且重定向至该站点.. 请问有实现方法吗?举个例子:
电子商务网站的paypal付款接口, 客户点击checkout时, 我希望表单的地址是本地地址, 比如progress.php, 然后在progress.php中处理所有paypal所需的post数据, 并且post到paypal, 同时页面转向了paypal的页面, 而对用户来说是透明的, 他只是点击了checkout按钮, 下一步就到了paypal页面并继续完成付款. 

解决方案 »

  1.   

    <html>
    <head>
    <script type="text/javascript">
    function loadXMLDoc()
    {
    if (window.XMLHttpRequest)
      {// code for IE7+, Firefox, Chrome, Opera, Safari
      xmlhttp=new XMLHttpRequest();
      }
    else
      {// code for IE6, IE5
      xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
      }
    xmlhttp.open("POST","ajax_info.txt",false);
    xmlhttp.send();
    }
    </script>
    </head>
    <body>
      

  2.   

    楼上用的是ajax方法吧,似乎没有实现我要的功能吧?或者还没够清楚,服务器端是怎么处理的呢?
      

  3.   

    那就隐藏表单来post就行了。或者用curl构造一个post,不过无论是get或post,都可以得数据,post只是作一个欺骗外行人而己。
    最重要的是做好数据加密
      

  4.   

    你直接把form的action设置成post,在客户端就不显示参数了啊?!你到底是什么意思呢?
      

  5.   

    楼主大概是想在人家查看网页的源文件时,看不到POST表的具体传递参数。
    还是赞同3楼,做好数据加密
      

  6.   

    paypal支持使用公匙和密匙来加密和解密表单,你可以参考下paypal给的文档
      

  7.   

    我把例子说清楚点吧:
    有一个要确认付款页面,上面有一个表单form。这个form提交后用户会跳转到paypal上面去付款。但这个form里面是不包括input, textarea这些要提交的表单值的(也就是我说的不输出表单,表单的值对客户端是不可见的),里面只有一个input type=submit的按扭。这个form的action是指向页面本身,而不是paypal站点。表单的值在客户端不输出,当用户点击提交后再由服务端程序生成表单元素的值并把它们post到paypal上面。而且页面也要一起转向到paypal上面。curl方式是可以在服务端post数据,但页面还是保持在原来的地方,不能转向到指定的站点上
    加密表单这些方法是可以用,但现在只想知道有什么方法可以如上述不用输出表单直接可以在服务器端post数据,不要说curl,socket这些方法了
      

  8.   

    你想以post的形式提交,但是客户端页面看不到表单的内容,只能看到一个确认的按钮,点击按钮,就将需要的值以post的形式提交到另外的页面是吧?
    我这有2个提议,你参考下!
    1:你可以用input type=hidden;
    2:你在之前填值的页面把相应的值保存到session什么的中,在这个提交页面只做个跳转的按钮,你让那些session什么的,点确认就传过去,直接退出或者关闭就销毁session就是了。
      

  9.   

    <input type="hidden" name='paypal'..../>
      

  10.   


    这个地方我们都是直接action到paypal的,这个表单里不包含对用户需要保密的数据
      

  11.   


    不登录paypay就能完成付款操作吗?
      

  12.   

    有个叫CURL的东东,可以在服务器端实现POST和GET操作
      

  13.   

    protected  function requestUrlByPost($url,$data,&$result,$timeout=3) {
    /*$tracTime = array();
    $tracTime[__LINE__] = getmicrotime();*/ $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
    curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
    $result = curl_exec($ch);
    curl_close($ch); if (is_string($result) && strlen($result)) {
    $return = 'info';
    } else {
    $return = 'error';
    }

    // 监控日志
    /*$tracTime[__LINE__] = getmicrotime();
    TracingLog($tracTime, __METHOD__, array($return,$url), SERVICE_API);*/

    if($return=='error') {
    //monErrorLog(__METHOD__, $url.'?'.implode('&', $data));
    return false;
    }
    return true;
    }
      

  14.   


    protected  function requestUrlByPost($url,$data,&$result,$timeout=3) {
    /*$tracTime = array();
    $tracTime[__LINE__] = getmicrotime();*/ $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
    curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
    $result = curl_exec($ch);
    curl_close($ch); if (is_string($result) && strlen($result)) {
    $return = 'info';
    } else {
    $return = 'error';
    }

    // 监控日志
    /*$tracTime[__LINE__] = getmicrotime();
    TracingLog($tracTime, __METHOD__, array($return,$url), SERVICE_API);*/

    if($return=='error') {
    //monErrorLog(__METHOD__, $url.'?'.implode('&', $data));
    return false;
    }
    return true;
    }
      

  15.   


    CURLY方法是可以执行这些操作,但是用这种方法页面不用跳转到paypal上去。用户点击确认付款后还要跳转去paypal上面登陆付款的。
      

  16.   

    用js动态生成个form然后提交上去
      

  17.   


    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js" type="text/javascript" ></script>
    <script>
    $(function(){
    $('<form />',{
    action : "http://www.qq.com",
    method : "POST",
    html   : "<input name='qq' value='123456' />"
    }).appendTo($('body')).submit();
    });
    </script>
      

  18.   

    没难度的东西!!你说的接口若干年前就做过!在本地服务器处理用户提交的数据,然后处理,模拟post请求发送到对方的接口,然后再在处理页面里跳转!!
    不知道你说的问题在哪!
      

  19.   


    改改头像吧,难看;
    分以下几步:
    1,自选你说不要input这些,但你要处理业务必须传数据,不用表单,这些数据要不存数据库,要不存文件,提交页面就只用<input type="hidden" name="id" value="1">这总没人知道你是什么东西了吧。数据再在提交后的页面提取出来.
    2,不同域的post,如果对两个域都是你自己的好办,两边规则你自己写,API实现方法有很多,最常见的就是curl了。
    3,处理完后要跳转,你可以在A域post数据后,一直做数据等待,等到数据成功返回后,做个带页面跳转到B域就可以了。
      

  20.   


    头像有空再换过来。
    你所说的好像就是我想要的。可以说具体一点吗?
    我要把数据post到paypal,两边是不同的域,不过paypal可能会有相应的api。
    你所说的用curl处理,具体是怎么处理吗?我知道网站有很多关于curl模拟post操作的实例,但能套用到这里吗?
    你的第三点说使用curl post数据,有数据返回后,应该怎么跳转到B域呢?难道是用PHP的header()转向或者js的location来转?希望可以一一解释我的疑惑,把你的那几点说得详细点,谢谢!
      

  21.   

    有什么安全不安全的,支付宝,财付通等等支付接口都是get方式,那岂不是更不安全?
    人家都能直接拿出来用,你作为接入方,还怕什么
    打印隐藏的form然后js提交是最省力的解决方式。
    当然,有人非要说不行,你就用curl模拟提交了。至于你所说的什么跨站post安全问题,胡思乱想,人家接口提供给你post提交方式,难道还会有问题??你思维可真混乱用户向你的脚本a.php提交数据,你处理完数据后将需要post的数据通过模拟的方式提交到对方接口地址就ok了。
      

  22.   

    我也遇到楼主这样的问题,楼主我估计是做WAP的跳转吧,WAP不支持js的跳转,所以我也是不知道在B页如何自动跳转和传参数。  
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); // 使用自动跳转    我使用这个还是不能实现自动跳转,只给我回传个1不知何意?