【问题标题】:HTML form that automatically adds and then POST自动添加然后 POST 的 HTML 表单
【发布时间】:2012-07-27 14:43:18
【问题描述】:

我正在尝试创建一个 HTML 表单,它将为产品选择的各种选项的价格相加,然后 POST 到 PayPal 的“立即购买”功能。

以下是 PayPal 立即购买表单的示例。我正在尝试添加功能以允许每个变体在发布前加起来达到最终数量。为什么 PayPal 不允许这样开始,这超出了我的理解。不过没时间吐槽。

这是带有定价的“立即购买”表单的贝宝示例。问题是您只能选择最终价格。它不允许矩阵式定价。

例如: 商品价格:50 美元

变体 1:
--- 选项 A:+$25
--- 选项 B:+$50

变体 2:
--- 选项 A:+$10
--- 选项 B:+$15

因此,如果您选择 1A 和 2B,表单将显示 $50 + $25 + $15 = $90

<form action="https://www.paypal.com/cgi-bin/webscr" method="post"> 

<!-- Identify your business so that you can collect the payments. --> 
<input type="hidden" name="business" value="herschelgomez@xyzzyu.com"> 

<!-- Specify a Buy Now button. --> 
<input type="hidden" name="cmd" value="_xclick"> 

<!-- Specify details about the item that buyers will purchase. --> 
<input type="hidden" name="item_name" value="Hot Sauce"> 
<input type="hidden" name="currency_code" value="USD"> 

<!-- Provide a dropdown menu option field. --> 
<input type="hidden" name="on0" value="Type">Type of sauce <br /> 
    <select name="os0">  
        <option value="Select a type">-- Select a type --</option> 
        <option value="Red">Red sauce</option> 
        <option value="Green">Green sauce</option> 
    </select> <br /> 

<!-- Provide a dropdown menu option field with prices. --> 
<input type="hidden" name="on1" value="Size">Size <br /> 
    <select name="os1"> 
        <option value="06oz">6 oz. bottle - $5.95 USD</option> 
        <option value="12oz">12 oz. bottle - $9.95 USD</option> 
         <option value="36oz">3 12 oz. bottles - $19.95 USD</option> 
    </select> <br /> 

<!-- Specify the price that PayPal uses for each option. -->  
<input type="hidden" name="option_index" value="1"> 
<input type="hidden" name="option_select0" value="06oz"> 
<input type="hidden" name="option_amount0" value="5.95"> 
<input type="hidden" name="option_select1" value="12oz"> 
<input type="hidden" name="option_amount1" value="9.95"> 
<input type="hidden" name="option_select2" value="36oz"> 
<input type="hidden" name="option_amount2" value="19.95"> 

<!-- Display the payment button. --> 
<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"> 
<img alt="" border="0" width="1" height="1" 
    src="https://www.paypal.com/en_US/i/scr/pixel.gif" > 
</form>

【问题讨论】:

    标签: javascript html paypal forms


    【解决方案1】:

    在您的页面头部或表单之前添加以下脚本。

    <script>
                selects = array(0,0);
                function recordSelect(i){
                    ++selects[i];
        if (selects[i] > 1) selects[i] = 1;
                    if (selects[0] == 1 && selects[1] == 1 ) document.getElementById('#YourformId').submit();
                }
            </script>
    

    此解决方案假定您已为表单设置了 id 属性值。 然后在表单中的每个选择中使用 recordSelect() 添加 onChange 事件,如下所示:

    <select name="os0" onchange="recordSelect(0)">  
        <option value="Select a type">-- Select a type --</option> 
        <option value="Red">Red sauce</option> 
        <option value="Green">Green sauce</option> 
    </select> 
    
    <select name="os1" onchange="recordSelect(1)">  
            <option value="Select a type">-- Select a type --</option> 
            <option value="another">something</option> 
            <option value="another2">item</option> 
        </select> 
    

    请注意recordSelect传递的参数

    【讨论】:

    • @LukePighetti 但您的代码包含一个选择列表?但是,我之前考虑的代码可能有一个错误,如果用户从列表A中选择然后他改变主意并决定从列表A中更改另一个项目,那么将提交表单而不考虑列表B的值改不改!绕过这个问题:selects 应该是一个数组,即 selects = array(0,0);然后 recordSelect() 应该接受的参数将充当数组的数字键,并且应该用它调用。请稍后查看答案的编辑。
    【解决方案2】:

    我希望您的问题是理论上的,因为在网页上计算价格是完全不安全的。任何知道 wget 命令的人都可以欺骗一个帖子,该帖子会以任意价格订购商品——甚至是免费的。

    这是一个更好的方法。

    1. 将购物车保存在服务器上。每当您在网页上显示购物车时,发出一张一次性票,以识别购物车并让用户发布一次。请务必从票证中删除所有规律性——没有可见的时间戳、序列号等。在将票证附加到结果之前,最好对票证进行加密或散列。此外,请确保门票在有限的时间内有效 - 例如 5 分钟,以便被盗门票的保质期很短。

    2. 在服务器上进行所有价格计算,以免用户欺骗您的服务器提供未经授权的折扣。

    这种技术以及其他类似技术称为 Representational State Transfer,或 ReST。这是一个很好的描述:http://en.wikipedia.org/wiki/REST

    祝您创业成功。

    【讨论】:

    • 感谢 Eric,我们正在尝试使用 PayPal 的内置“立即购买”功能,因为我们是一个拥有三个不同供应商的网站,每个供应商只有一个产品。我完全同意这种方法不安全。我们最近的想法是让客户端将 HTML 表单发布到服务器上的 php 文件,然后相应地计算价格并直接从服务器端将新表单发布到 PayPal。问题是我不知道 PayPal 如何处理这个问题并让它发挥作用,因为“立即购买”表格通常是客户发布的,据我所知。也谢谢你的好话
    • 如果您使用的是 PHP,请查看 cURL,这将允许您使用 PHP 生成对网站的 POST 请求。如果您正在做一个 ASP.NET 应用程序,请查看WebClient 客户端。
    猜你喜欢
    • 2023-04-08
    • 2021-09-05
    • 1970-01-01
    • 2014-09-13
    • 2020-12-16
    • 1970-01-01
    • 1970-01-01
    • 2011-01-04
    • 2015-05-13
    相关资源
    最近更新 更多