2012-07-29 79 views
1

我試圖創建一個HTML表單,它將爲產品選擇的各種選項的價格加起來,然後POST到PayPal的立即購買功能。HTML表單自動添加,然後POST

下面是PayPal立即購買表單的示例。我試圖添加功能以允許每個變體在發佈之前添加最終數量。爲什麼PayPal不允許這一開始是超越我的。沒有時間咆哮。

以下是帶有定價的Buy Now表單的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="[email protected]"> 

<!-- 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> 

回答

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的傳遞的參數

+1

謝謝你們兩位。我靠近嗎? http://pastebin.com/u2uRNqPk – 2012-07-29 21:54:34

+0

@LukePighetti但您的代碼中包含一個選擇列表? 但是,我以前認爲的代碼可能有一個錯誤,如果用戶從列表A中選擇,然後他改變了主意並決定從列表A中更改另一個項目,則表單將被提交而不考慮列表的值B是否改變! 繞過這個問題: 選擇應該是一個數組即choose = array(0,0); 然後recordSelect()應該接受參數將作爲該數組的數字鍵,它應該與它調用。 請稍等片刻後查看答案的編輯。 – 2012-07-29 22:05:39

0

我希望,你的問題是理論性的,因爲在計算價格一個網頁是完全不安全的。任何知道wget命令的人都可以欺騙一個以任意價格訂購商品的帖子 - 甚至是免費的。

這是一個更好的方法。

  1. 將購物車放在服務器上。無論您何時在網頁上顯示購物車,都需要發出一次性購票,以識別購物車並讓用戶發佈一次。一定要從票證中刪除所有的規則 - 沒有可見的時間戳,序列號或諸如此類。在附加到結果之前加密或散列票證可能是最好的。此外,請確保在有限的時間內售票良好 - 例如5分鐘,以便盜用的票證保質期短。

  2. 在服務器上做所有的價格計算,以便用戶不能欺騙你的服務器進入未授權的折扣。

這種技術和其他類似技術稱爲代表性狀態轉移或代表性狀態轉移。這裏有一個很好的描述:http://en.wikipedia.org/wiki/REST

祝你成功創業。

+0

感謝Eric,我們嘗試使用PayPal內置的立即購買功能,因爲我們是一家擁有三家不同供應商的網站,每個供應商只有一個產品。我完全同意這種方法不安全。我們最近想到的僅僅是讓一個客戶將一個HTML表單發佈到服務器上的一個php文件中,然後相應地計算出價格並直接從服務器端向PayPal發佈一個新表單。問題是我不知道PayPal如何處理這個問題並使其工作,因爲Buy Now表單通常是我發佈的客戶端發佈的。同樣感謝您的好評 – 2012-07-29 22:12:23

+0

如果您使用PHP,請查看[cURL](http://php.net/manual/en/book.curl.php),這將允許您生成POST請求到PHP網站。如果您正在執行ASP.NET應用程序,請查看['WebClient'](http://stackoverflow.com/questions/8222092/sending-http-post-with-system-net-webclient)客戶端。 – saluce 2012-07-29 22:29:44