(asp.net)PayPal案例的关键源码代码__PayPal集成_API接口
?
輕輕松松集成PayPal
標準版
?
Paypal國際版網站集成簡易教程(一):序言
?
????? 前段時間接到一個外貿網站的項目,集成paypal支付接口的,對象是海外用戶,全部用US的信用卡結算。國內有個paypal的中文版,叫貝寶,不過只支持人民幣之間的結算,而且提供的功能不多。所以只能使用paypal國際版,也就是paypal.com,習慣性的google了一下相關資料,發現關于paypal.com接口的中文文檔并不多,也不詳細,只好自己上paypal.com研究,還好paypal上的資料非常齊全,而且還提供了開發者沙盒(sandbox),相比之下,國內流行的支付寶還有很長的路要走啊。
???
????? 項目結束的時候就有想法寫一篇網站集成paypal的簡易教程,方便以后的各位開發者,畢竟看長篇英文資料是很頭痛的事情^_^。一直到昨天期末考才結束,所以今天開始寫這個教程,其實內容也不多,可能還算不上教程,只能算經驗吧。
?
????? 主要分為序言、支付按鈕、返回信息方式(IPN&PDT)、實例四部分組成,預計在三天內完成,如果有新內容我臨時再加吧。
???
????? 接下來一篇將會介紹如何在網站上快速加入paypal支付按鈕。
?
?
?
?
Paypal國際版網站集成簡易教程(二):快速加入支付按鈕
?
????? 本篇主要介紹如何在你的網站上快速加入paypal支付按鈕,通過這個按鈕,人們可以方便快速的付款到你的paypal帳戶。
????? 首先,你需要注冊一個paypal帳戶,帳戶類型分為Personal(個人)、Premier(高級)和Business(商業),他們的差別對于開發者來說主要是返回的信息,Personal的不能使用IPN和PDT等商家工具,即不能獲取交易信息,但是Personal帳戶收款無需手續費;Premier和Business當然就提供了IPN和PDT功能,能夠在客戶支付成功后,將交易信息傳給指定的網站,用來二次使用。Premier和Business使用上的差異我不是很清楚,應該是月收款額和手續費上的區別吧。
?
????? 這里插進來介紹一下paypal sandbox,也就是沙盒,是paypal提供給開發者的一個工具,非常好用,你可以在https://developer.paypal.com/注冊和使用它。登錄以后可以新建帳戶,設置余額和帳戶類型,有一點要注意,每次使用時必須先登錄sandbox才能使用新建的那些帳戶。Sndbox里面有個測試工具,可以發送IPN的,以后會用到。
?
????? 接著上面的內容,注冊完帳戶以后,當然,一開始開發最好使用sandbox,不然資金轉來轉去手續費都扣光了,paypal的費率如下:
?
?????
????? 比起國內的支付工具,paypal貴了好多,當然,和國情也有關系。
????
????? 接下來是按鈕的代碼,很簡單,就是一個普通的網頁表單代碼:
??????
?
?程序代碼
<form action="https://www.paypal.com/cgi-bin/webscr" method="post"><input type="hidden" name="cmd" value="_xclick"><input type="hidden" name="business" value="sample@sample.com"><input type="hidden" name="item_name"value="Item Name Goes Here"><input type="hidden" name="item_number"value="Item Number Goes Here"><input type="hidden" name="amount" value="100.00"><input type="hidden" name="no_shipping" value="2"><input type="hidden" name="no_note" value="1"><input type="hidden" name="currency_code" value="USD"><input type="hidden" name="bn" value="IC_Sample"><input type="image" src="https://www.paypal.com/ en_US/i/btn/x-click-but23.gif" name="submit" alt="Make payments with payPal - it's fast, free and secure!"><img alt=""src="https://www.paypal.com/en_US/i/scr/pixel.gif"width="1" height="1"></form>?
?
????? 如果使用sandbox,action地址改成https://www.sandbox.paypal.com/cgi-bin/webscr即可,上面這段還是很容易理解的,看下name和value基本上就能知道每個值的含義了。
?
?????
????? 保存用瀏覽器打開,就會看到一個paypal的按鈕,點擊過去按照提示操作,就能付款到business指定值的帳戶了。
?
????? 這就是一個最簡單的paypal支付按鈕。
????? 再下一篇中會講一下如何在付款成功之后,將信息返回到你的網站,大部分需求都是客戶完成付款后返回信息到網站的數據庫,記錄網站客服的交易信息。
?
????? 最后稍微了解下為什么海外用戶喜歡用自己的網站做生意,而不是像國內一樣用淘寶之類的C2C平臺。一開始我也很不理解,有免費的平臺為什么要自己建設網站還要支付paypal的手續費,后來和客戶了解了一下,他們做的事網游虛擬交易,國外最大的C2C平臺就是eBay,但只有德國可以售賣虛擬物品,并且eBay上的交易并不是免費的,收取的手續費遠遠高于paypal的費率,因此,更多的海外用戶選擇自己建設網站進行電子商務。
?
?
?
?
Paypal國際版網站集成簡易教程(三):IPN的使用
?
????? 本文內容采用知識共享署名-非商業性使用-禁止演繹 2.5 中國大陸許可協議進行許可。
?
??????
?
?引用內容
什么是即時付款通知IPN
當您收到新的付款交易或者已發生的付款交易的狀態發生變化時,PayPal都將異步(即不作為網站付款流程的一部分) 發送付款詳細數據到您所指定的URL,以便您了解買家付款的具體情況并做出相應的響應。這個過程我們稱作即時付款通知(簡稱 IPN)。
?
?
????? 最近事情比較多,一直沒有繼續更新,不好意思了,今天難得有空,就把最重要的一段先發上來了。
?
????? 相信大部分網站集成Paypal都希望能夠實現客戶支付完成后返回信息到自己的網站,然后處理這些信息。比如客戶在你的網站上購買了一個產品,通過Paypal完成了支付,接著Paypal告訴你的網站客戶完成了支付以及支付信息,最后你的網站將這些信息記錄到你自己的數據庫中,并且將你的客戶訂單狀態設為已支付,接著你就可以進行一系列的相關訂單的后續操作。
????? IPN就能幫助我們實現這個功能,IPN示意圖如下(來自Paypal.com):
?
?????
?
????? 當客戶完成支付,Paypal會在后臺通過post方式向你的服務器傳送交易數據,來實現網站集成的功能。
接下來我們就來看IPN的實現方法。
????? 第一步,你需要一個sandbox的帳號,這很重要,因為它能讓你隨心所欲的進行測試,而不用擔心資金在天上飛。注冊地址:https://developer.paypal.com/
????? 第二步,登陸sandbox,新建一個商家帳號(賣方)和一個客戶賬號(買方),其中賣方帳號必須是Premier或者Business,不然無法使用IPN功能。
?????
?
????? 新建買家帳號的時候記得在Account Balance中加上金額,不然你就沒錢買東西了,如果paypal.com的帳號也能這樣加錢多好。
????? 新建完兩個帳號:
?????
?
????? 賣家帳號的test mode要設為enabled。
????? 選中business帳號,點擊下面的Enter Sandbox Test Site進入sandbox Test Site,登錄,就像普通Paypal帳號的管理頁面一樣。
?????
?
????? 點擊Profile,在Selling Preferences中選擇Instant Payment Notification Preferences,點擊edit加入IPN信息返回的地址,記得勾上前面那個選項,我是用.net寫的接受文件,所以我的IPN地址是http://www.chenchen.org/ipn.aspx,地址只要能在互聯網上訪問到就可以了。
?????
?
????? 在Profile -> Selling Preferences ->Website Payment Preferences選項中,有一個Auto Return的選項,將它設為on,并且在下面的return地址中填入你希望的客戶支付完成后返回的地址:
???? ?
?
?????? 以上就完成了商家端的設置。
?
????? 接下來是你網站上ipn.aspx文件的編寫,這個是用來接收支付數據的,是非常關鍵的一個文件。
????? 文件環境,.net 2.0,語言C#。
????? Ipn.aspx文件:此文件不用修改任何東西,代碼都在cs文件中。
????? Ipn.aspx.cs文件:關鍵代碼
?
????? 定義一個VerifyIPN()函數:
?
?
?程序代碼
bool VerifyIPN(){string strFormValues = Request.Form.ToString();string strNewValue;string strResponse;string serverURL = "https://www.sandbox.paypal.com/cgi-bin/webscr";HttpWebRequest req = (HttpWebRequest)WebRequest.Create(serverURL);req.Method = "POST";req.ContentType = "application/x-www-form-urlencoded";strNewValue = strFormValues + "&cmd=_notify-validate";req.ContentLength = strNewValue.Length;StreamWriter stOut = new StreamWriter(req.GetRequestStream(), System.Text.Encoding.ASCII);stOut.Write(strNewValue);stOut.Close();StreamReader stIn = new StreamReader(req.GetResponse().GetResponseStream());strResponse = stIn.ReadToEnd();stIn.Close();return strResponse == "VERIFIED";}?
?????? 這段代碼的作用是判斷IPN信息是否來自Pyapal,如果不進行判斷,那么惡意用戶完全可以模擬一個信息post到你的網站上,讓你認為訂單已經完成支付,所以,必須首先對接受到的信息進行驗證。
?
????? 代碼的基本原理,serverURL定義了驗證地址,sandbox為:https://www.sandbox.paypal.com/cgi-bin/webscr,Paypal.com就是https://www.paypal.com/cgi-bin/webscr。
????? 將paypal發送過來的所有信息加上一個&cmd=_notify-validate參數,表示對這個信息進行驗證,全部發送回paypal驗證,如果信息確實存在,則返回VERIFIED字符串。
驗證成功后,就可以用如下形式獲得交易信息:
?
?
?程序代碼
string ppTx = Request.Form["txn_id"].ToString();string ppStatus = Request.Form["payment_status"].ToString();string ppDate = Request.Form["payment_date"].ToString();string ppItem = Request.Form["item_name"].ToString();string ppPrice = Request.Form["mc_gross"].ToString();?
?
????? 每個變量的解釋可以參考Paypal網站上的說明,我這里就不再重復。
?
???? .cs代碼結構如下:
?
?
?程序代碼
public partial class paypal_ipn : System.Web.UI.Page{protected void Page_Load(object sender, EventArgs e){if (VerifyIPN())//驗證成功 {string ppTx = Request.Form["txn_id"].ToString();//獲取post中的各項變量值 …執行將數據寫入數據庫等操作} }?
?
?
?
?
????? 這樣,就實現了將支付信息傳回網站的功能。注:當交易狀態發生改變時,paypal也會返回一個ipn,比如完成支付,退款等等。
?
????? 介紹一下sandbox中IPN測試工具,登陸sandbox主帳號,就是你在sandbox上注冊的那個,不是那些賣家/買家帳號。
????? 選擇Test Tools -> Instant Payment Notification (IPN) Simulator:
?
????? 輸入你的ipn接受文件地址,選擇ipn信息的方式,然后會讓你填具體信息內容,再點擊Send IPN,就能模擬一個ipn到你網站的頁面,可以用來測試IPN是否正常工作。
?????
?????
????? 不過這個工具有個小BUG,就是發送的IPN里不包括contact_phone這個變量,但是實際的IPN里是有的,這里要注意一下。
????? 注:可以在商家帳號的Profile -> Selling Preferences ->Website Payment Preferences中,選擇Contact Telephone Number這一欄,來確定是否需要發送買家聯系電話。
?????
?
????? 通過IPN,你的網站就開始從真正意義上的集成了Paypal。
????? 這篇文章寫得有些倉促,如有疑問可以發送郵件到:chenchen[at]ndwork.com? 用@替換[at]。
????? 下一次我會講PDT方式,這個比IPN簡單很多。
?
?
Paypal國際版網站集成簡易教程(四):PDT的使用
?
?
?引用內容
?
什么是PDT
PDT是一個安全獲取付款明細的方式。在買家付完款后,賣家可以通過此方式即時獲取付款明細并顯示給買家看。
????? 暑假時候寫了前面三篇文章,后來去電視臺打工了,幫他們上了一個人居博覽會,再接著就開學了,又在杭州、溫州、寧波跑來跑去。一直不能靜下來繼續寫,現在工作又沒啥著落哈。
????? 今天難得有感覺想寫了,不知道是不是中午牛排的威力,趁機會就快點寫吧。
?
?????
?
????? 上圖是PDT的流程示意。
????? 1.首先買家付款后通過事先設定好的返回url(return)回到您的網站。
????? 2.接著paypal在返回url后面加上tx變量,即交易號。
????? 3.然后網站將收到的tx和您的令牌(paypal賬戶里申請)發回paypal。
????? 4.paypal驗證令牌通過后,將交易明細發回網站。
????? 5.最后網站將交易明細顯示給客戶。
?
?
目 ??錄
?
1 注冊您的PayPal帳號.... 2
2 創建“Buy Now”按鈕.... 2
3 創建“Shopping Cart”按鈕.... 4
3.1 創建“Add to Cart”按鈕... 4
3.2 創建“Upload Cart”按鈕... 6
4 加密網站付款EWP.. 9
4.1 使用加密網站付款的先決條件... 9
4.2 創建加密按鈕... 12
5 附錄1: 參考文檔及網站.... 19
6 附錄2:PayPal目前支持的貨幣列表.... 20
7 附錄3:常見問題.... 21
8 附錄4:標準變量列表.... 22
9 附錄6:國家或地區ISO3166代碼.... 29
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
1 注冊您的PayPal帳號
如果您已經有PayPal賬戶了,那恭喜您,您可以直接跳過這部分。
如果還沒有PayPal賬戶,那您可以通過https://www.paypal.com訪問主頁,如圖1-1所示,點擊 “Sign Up”或“Sign Up Now”按鈕立即注冊一個PayPal賬戶。如需幫助,您可以點擊主頁上方的“幫助”按鈕或在您的瀏覽器中輸入
https://www.paypal.com/cgi-bin/webscr?cmd=_help-ext&source_page=_home
獲取幫助。
?
圖1-1 PayPal主頁
注冊完以后,您就可以開始您的PayPal之旅了!
2 創建“Buy Now”按鈕
PayPal可以讓您輕松地通過您的網站接受單件物品的付款。“Buy Now”(立即購買)按鈕可以在幾分鐘內實施,讓來自PayPal數百萬用戶的商家和捐贈人以及網絡上的任何其他買家輕松訪問您的網站。
那如何在您自己的網站上創建一個“Buy Now”按鈕呢?很簡單,如圖2-1,這里我們集成了PayPal 的“Buy Now”按鈕;
?
圖2-1 立即購買Buy Now示例
?
創建這個“Buy Now”按鈕有兩種方法:
方法1-登陸PayPal網站自動創建
您可以通過登陸PayPal網站自動為您創建“Buy Now”按鈕。創建方法請參考 “PayPal網站付款標準版交易方式確認集成指南”(以下簡稱“集成指南”,下載方法見附錄1)文檔。
?
方法2-用網頁編輯器直接編寫代碼
利用您喜歡的網頁編輯器(如DreamWeaver)直接編輯HTML代碼,在您想要出現“Buy Now”按鈕的位置上插入以下示例代碼:
| 1 2 3 4 5 6 7 8 9 ? 10 | <form action="https://www.paypal.com/cgi-bin/webscr" method="post"> <input type="hidden" name="cmd" value="_xclick"> <input type="hidden" name="business" value="paypal@yoursite.com"> <input type="hidden" name="item_name" value="SIGMA SD1000"> <input type="hidden" name="amount" value="399.00"> <input type="hidden" name="currency_code" value="USD"> <input type="hidden" name="lc" value="US"> <input type="hidden" name="return" value="http://www.yoursite.com/thanks.html"> <input type="image" src="https://www.paypal.com/en_US/i/btn/x-click-but23.gif" border="0" name="submit" alt="Make payments with PayPal - it's fast, free and secure!"> </form> |
其中:
n??????????? 第1、2、10行是必須且不可更改得;
n??????????? 第3行用于設置您得PayPal賬戶,即修改粗體部分(下同);
n??????????? 第4,5行設置商品得屬性,包括商品描述,價格;
n??????????? 第6行用于設置貨幣種類,關于貨幣描述請參考附錄2;
n??????????? 第7行用于設置目標客戶國家所在地,其值可參考附錄6;
n??????????? 第8行用于設置客戶付完款后返回您網站的地址,具體請參考PDT/IPN參考文檔;
n??????????? 第9行在一般情況下無需改動。
除此之外,您可以根據實際需要增加、修改或刪除一些變量。
所有“Buy Now”按鈕可用變量您可以參考“集成指南”文檔中“HTML示例與立即購買,捐贈和購物車變量”部分;也可以訪問英文網站:
https://www.paypal.com/IntegrationCenter/ic_std-variable-reference.html
3 創建“Shopping Cart”按鈕
如果您的網站還沒有集成購物車功能,您可以通過創建“Add to Cart”按鈕直接使用PayPal的購物車。
如果您的網站已經有自己的購物車或者已經集成了第三方購物車的功能,那您可以通過創建“Upload Cart”按鈕將您的購物車明細上傳給PayPal并通過PayPal進行付款;您也可以為已有購物車生成一個訂單,并通過創建PayPal的“Buy Now”按鈕進行付款(其中:商品名稱可以為您的訂單號,商品價格可以為訂單總價)。
3.1 創建“Add to Cart”按鈕
如圖3-1所示,這里我們集成了PayPal“Add to Cart”按鈕:
?
圖3-1 “Add to Cart”按鈕
當點擊“Add to Cart”按鈕時,該商品即被加入到您的PayPal購物車里,如圖3-2所示:
?
圖3-2 PayPal購物車詳情
創建“添加到購物車”按鈕有兩種方法:
方法1-登陸PayPal網站自動創建
您可以通過登陸PayPal網站自動為您創建“添加到購物車”按鈕。創建方法請參考“集成指南”文檔中“創建購物車按鈕(第37頁)”部分。
方法2-用網頁編輯器直接編寫代碼
利用您喜歡的網頁編輯器(如DreamWeaver)直接編輯HTML代碼,在您想要出現“添加到購物車”按鈕的位置上插入以下代碼:
| 1 2 3 4 5 6 7 8 9 10 ? 11 | <form target="paypal" action="https://www.paypal.com/cgi-bin/webscr" method="post"> <input type="hidden" name="cmd" value="_cart"> <input type="hidden" name="add" value="1"> <input type="hidden" name="business" value="paypal@yoursite.com"> <input type="hidden" name="item_name" value="PPShopping Cart Example"> <input type="hidden" name="amount" value="99.99"> <input type="hidden" name="currency_code" value="USD"> <input type="hidden" name="lc" value="US"> <input type="hidden" name="return" value="http://www.yoursite.com/thanks.html"> <input type="image" src=https://www.paypal.com//en_US/i/btn/sc-but-01.gif </form> |
其中:
n??????????? 第1、2、3、11行是必須且不可更改得;
n??????????? 第4行用于設置您得PayPal賬戶;
n??????????? 第5,6行設置商品得屬性,包括商品描述及價格;
n??????????? 第7行用于設置貨幣種類,關于貨幣描述請參考附錄2;
n??????????? 第8行用于設置目標客戶國家所在地,其值可參考附錄6;
n??????????? 第9行用于設置客戶付完款后返回您網站的地址,具體請參考PDT/IPN文檔;
n??????????? 第10行在一般情況下無需改動。
除此之外,您可以根據實際需要增加、修改或刪除一些變量。
所有“添加購物車”按鈕可用變量您可以參考“集成文檔”中“HTML示例與立即購買,捐贈和購物車變量”部分;也可以訪問網址:
https://www.paypal.com/IntegrationCenter/ic_std-variable-reference.html
?
【注】
n??????????? 若要顯示當前購物車信息,您只需將
<input type="hidden" name="add" value="1">
改為
<input type="hidden" name="display" value="1">
若上面兩句同時存在,則只顯示當前購物車信息;
n??????????? 在FORM里需設置target="paypal"以使購物頁面和購物車頁面分開;
3.2 創建“Upload Cart”按鈕
若您的網站已經有自己的購物車或已經集成了第三方購物車,如圖3-3所示,那您可以通過創建“上傳購物車”按鈕將購物車詳細信息上傳給PayPal,然后通過PayPal來進行付款。
?
圖3-3 第三方購物車
在您的購物車頁面適合的位置上插入以下代碼:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ? 18 | <form action="https://www.paypal.com/cgi-bin/webscr" method="post"> <input type="hidden" name="cmd" value="_cart"> <input type="hidden" name="upload" value="1"> <input type="hidden" name="business" value="paypal@yoursite.com"> ? <input type="hidden" name="item_name_1" value="San Francisco Bay(32'X32')"> <input type="hidden" name="amount_1" value="250.00"> <input type="hidden" name="quantity_1" value="1"> ? <input type="hidden" name="item_name_2" value="Mount Hamilton(24'x15')"> <input type="hidden" name="amount_2" value="50.00"> <input type="hidden" name="quantity_2" value="1"> ? <input type="hidden" name="currency_code" value="USD"> <input type="hidden" name="lc" value="US"> <input type="hidden" name="return" value="http://www.yoursite.com/thanks.html"> <input type="submit" value="Upload Cart" alt="Make payments with PayPal - it's fast, free and secure!"> </form> |
其中:
n??????????? 第1、2、3、18行是必須且不可更改得;
n??????????? 第4行用于設置您得PayPal賬戶;
n??????????? 第6~8、10~12行分別設置了商品1,2得屬性,包括商品描述,商品價格及數量;如需添加更多商品,可照此類推;
n??????????? 第14行用于設置貨幣種類,關于貨幣描述請參考附錄2;
n??????????? 第15行用于設置目標客戶國家所在地,其值可參考附錄6;
n??????????? 第16行用于設置客戶付完款后返回您網站的地址,具體請參考PDT/IPN文檔部分;
n??????????? 第17行在一般情況下無需改動。
除此之外,您可以根據實際需要增加、修改或刪除一些變量。
點擊“Upload Cart”后,將顯示PayPal支付頁面,如圖3-4所示:
?
圖3-4 用PayPal支付您的購物車
點擊圖3-4藍色倒三角則可以顯示此次購物車的詳情,如圖3-5所示:
?
圖3-5 PayPal購物車詳情
所有“上傳購物車”按鈕可用變量您可以參考“集成指南”文檔中“HTML示例與立即購買,捐贈和購物車變量”部分;也可以訪問網址
https://www.paypal.com/IntegrationCenter/ic_std-variable-reference.html
?
【注】
n??????????? 若變量“quantity_X”沒有設置,則默認為1;
4 加密網站付款EWP
在第二章和第三章,我們列舉了很多PayPal 付款按鈕的實例代碼。很明顯,這些代碼中的一些關鍵信息,如PayPal賬戶、金額等都是未經過加密的,根據實際需要,您可以對這些信息進行加密;目前,PayPal提供了基于.NET和JAVA的加密示例,使用方法如下:
4.1 使用加密網站付款的先決條件
在使用加密的網站付款之前,您必須:
n??????????? 生成一個私鑰;
n??????????? 生成一個公共證書;
n??????????? 將您的公共證書上傳到PayPal網站;
n??????????? 下載PayPal的公共證書。
關于私鑰和公共證書的定義您可以參考“集成指南”文檔中“加密的網站付款/密鑰和證書”部分;
第1步-創建您的公共證書
下載OpenSSL并安裝
對于windows用戶,您可以從http://www.openssl.org/related/binaries.html或http://www.slproweb.com/products/Win32OpenSSL.html直接下載OpenSSL for Windows,下載完后直接安裝,安裝時建議您安裝在某個盤的根目錄下,如c:\OpenSSL。
對于非windows用戶,您可以從http://www.openssl.org/source下載您需要的版本,然后根據您實際的操作系統進行編譯安裝,示例如下:
| Login as root. Shell> tar –gz **.tar.gz Shell> config Shell> make Shell> make install |
創建私鑰和公共證書;
使用OpenSSL程序,輸入以下命令創建您的私鑰。該命令生成一個1024位的RSA私鑰。該私鑰存儲在文件<basename>-prvkey.pem中:
OpenSSL genrsa -out <basename>-prvkey.pem 1024
使用OpenSSL程序,輸入以下命令創建您的公共證書。該命令在文件<basename>-pubcert.pem中生成公共證書:
OpenSSL req –new –key <basename>-prvkey.pem –x509 –days 365 –out
<basename>–pubcert.pem
?
【注】
n??????????? OpenSSL 在OpenSSL得安裝目錄得bin下,若是在非windows操作系統中,請注意大小寫和路徑;
n??????????? 您可以將<basename>改寫成您想要的名字;
n??????????? 對于windows用戶來說,您也可以從
https://www.paypal.com/en_US/dwnloads/windows.zip
或https://www.paypal.com/en_US/dwnloads/java.zip下載PayPal為常用的開發環境提供的示例代碼,其中均包含了文件“key.bat”,下載并解壓后編輯該文件,設置好正確的OpenSSL路徑,然后在命令行執行命令“key <basename>”即可生成您的私鑰和公共證書,示例如下:
C:\paypal\coding\windows\key <basename>
創建PKCS12文件(適用于后面用JAVA生成加密代碼)
要創建PKCS12文件,輸入下面OpenSSL命令,該命令在文件<basename>-prvkey.p12 中生成PKCS12文件:
OpenSSl pkcs12 -export -inkey <basename>-prvkey.pem –in
<basename>-pubcert.pem -out <basename>-prvkey.p12
?
【注】
n??????????? 執行此命令時,將會提示您輸入密碼,請記住此密碼,下面用JAVA生成加密代碼時將會提示您輸入此密碼。
?
第2步-上傳您的公共證書
1)??? 登錄到您的PayPal企業或高級賬戶;
2)??? 點擊“Profile”子選項卡;
3)??? 從右側菜單中點擊“Encrypted payment Settings”鏈接;
4)??? 點擊“Add”;
5)??? 在窗口“Add Certificate”點擊“瀏覽…”并選擇您上面創建的公共證書。
?
【注】
n??????????? 公共證書必須為PEM格式,如上面的<basename>-pubcert.pem。
?
如果您的公共證書上傳成功,它將出現在您的公共證書下的下一個屏幕上,如圖4-1所示,您可以得到一個唯一的公共證書號(Cert ID):
?
圖4-1 公共證書示例
【注】
n??????????? 請記住這個證書號,此證書號將在后面生成加密代碼時使用;
n??????????? 一個PayPal賬戶最多可以獲取6個不同的證書號。
?
第3步-下載PayPal的公共證書
1)??? 登錄到您的PayPal企業或高級賬戶;
2)??? 點擊“Profile”子選項卡;
3)??? 點擊右側菜單中 “Encrypted payment Settings”鏈接;
4)??? 點擊“PayPal Public Certificate”下的“Download”按鈕;
?
4.2 創建加密按鈕
在進行創建加密按鈕之前,我們必須將原來HTML代碼中付款數據部分轉換成一個字符串形式,字符串按格式<variable_name>=<value>組成,變量與變量之間用“,”隔開,具體情況舉例如下:
1)??? 立即購買 / Buy Now
假設原來“Buy Now”按鈕的數據部分如下:
| <form action="https://www.paypal.com/cgi-bin/webscr" method="post"> <input type="hidden" name="cmd" value="_xclick"> <input type="hidden" name="business" value="paypal@yoursite.com"> <input type="hidden" name="item_name" value="SIGMA SD1000"> <input type="hidden" name="amount" value="399.00"> <input type="hidden" name="currency_code" value="USD"> <input type="image" src="https://www.paypal.com/en_US/i/btn/x-click-but23.gif" border="0" name="submit" alt="Make payments with PayPal - it's fast, free and secure!"> </form> |
則我們可以把它轉換成:
| cmd=_xclick,business=paypal@yoursite.com,item_name=SIGMASD1000,currency_code=USD,amount=399.00,cert_id=<證書號> |
?
【注】
n??????????? 請將<證書號>替換成您自己的證書號,如上面一個證書號是“4UXSJFDZ8A2PL”則在這“cert_id=<證書號>”就寫成“cert_id=4UXSJFDZ8A2PL”;
n??????????? 其中cmd=_xclick, business, item_name, amount及cert_id是必須的。
?
2)??? 添加到購物車 / Add to Cart
假設原來“Add to Cart”按鈕的數據部分如下:
| <form target="paypal" action="https://www.paypal.com/cgi-bin/webscr" method="post"> <input type="hidden" name="cmd" value="_cart"> <input type="hidden" name="add" value="1"> <input type="hidden" name="business" value="paypal@yoursite.com"> <input type="hidden" name="item_name" value="PPShopping Cart Example"> <input type="hidden" name="amount" value="99.99"> <input type="hidden" name="currency_code" value="USD"> <input type="image" src="https://www.paypal.com//en_US/i/btn/sc-but-01.gif" border="0" name="submit" alt="Make payments with PayPal - it's fast, free and secure!"> </form> |
則我們可以把它轉換成:
| cmd=_cart,add=1,business=paypal@yoursite.com,item_name=PPShoppingCartExample,currency_code=USD,amount=99.99,cert_id=<證書號> |
?
【注】
n??????????? 請將<證書號>替換成您自己的證書號,如上面一個證書號是“4UXSJFDZ8A2PL”則在這“cert_id=<證書號>”就寫成“cert_id=4UXSJFDZ8A2PL”;
n??????????? 其中cmd=_xclick, add, business, item_name, amount及cert_id是必須的。
?
3)??? 上傳購物車 / Upload Cart
假設原來“Upload Cart”按鈕的數據部分如下:
| <form action="https://www.paypal.com/cgi-bin/webscr" method="post"> <input type="hidden" name="cmd" value="_cart"> <input type="hidden" name="upload" value="1"> <input type="hidden" name="business" value="paypal@yoursite.com"> ? <input type="hidden" name="item_name_1" value="San Francisco Bay(32'X32')"> <input type="hidden" name="amount_1" value="250.00"> <input type="hidden" name="quantity_1" value="1"> ? <input type="hidden" name="item_name_2" value="Mount Hamilton(24'x15')"> <input type="hidden" name="amount_2" value="50.00"> <input type="hidden" name="quantity_2" value="1"> ? <input type="hidden" name="currency_code" value="USD"> <input type="submit" value="Upload Cart" alt="Make payments with PayPal - it's fast, free and secure!"> </form> |
則我們可以把它轉換成:
| cmd=_cart,upload=1,business=paypal@yoursite.com,item_name_1=SanFranciscoBay(32’x32’),amount_1=250.00,quantity_1=1,item_name_2=MountHamilton(24’x15’),amount_2=1,quantity_2=1,,currency_code=USD,cert_id=<證書號> |
?
【注】
n??????????? 請將<證書號>替換成您自己的證書號,如上面一個證書號是“4UXSJFDZ8A2PL”則在這“cert_id=<證書號>”就寫成“cert_id=4UXSJFDZ8A2PL”;
n??????????? 其中cmd=_xclick, upload, business及cert_id是必須的。
?
在生成加密數據字符串后,下面我們介紹如何在C#和JAVA中通過程序生成加密按鈕。
4.2.1 用C#生成加密按鈕
1)??? 用PayPal提供的示例代碼生成單個按鈕
從https://www.paypal.com/en_US/dwnloads/windows.zip下載windows.zip,解壓后在Visual .NET環境中編譯,里面包含了ButtonEncryptionLib和ButtonEncryptionLibTest兩個工程。其中ButtonEncryptionLib用于生成加密按鈕的DLL,這個要求系統已經安裝了OpenSSL for Windows;ButtonEncryptionLibTest則會引用前者生成的DLL編譯一個可執行文件PPEncrypt,此文件即可用于加密單個按鈕,您可以在目錄ButtonEncryptionLibTest\bin\Debug下找到。
生成加密按鈕步驟
將您的私鑰、公共證書和PayPal的公共證書拷貝到與PPEncrypt同一個目錄下;運行下面的命令即可生成加密內容;
PPEncrypt <CertFile> <PrivKeyFile> <PPCertFile> <CmdTxt> <OutputFile> [Sandbox]
其中:
| <CertFile> | 您的公共證書文件名 |
| <PrivKeyFile> | 您的私鑰文件名 |
| <PPCertFile> | PayPal的公共證書文件名 |
| <CmdTxt> | 加密的字符串命令行 |
| <OutputFile> | 輸出HTML代碼的文件名 |
| [Sandbox] | 在PayPal測試環境中生成 |
比如:
| PPEncrypt my-pubcert.pem my-prvkey.pem paypal_pubcert.pem |
打開生成文件<OutputFile>(這里為button.html),將里面加密的FORM內容復制到您需要付款的頁面中即可。
<OutputFile>的樣本如下:
| <form action="https://www.paypal.com/cgi-bin/webscr" method="post"> <input type="hidden" name="cmd" value="_s-xclick"> <input type="image" src="https://www.paypal.com/en_US/i/btn/x-click-but23.gif" border="0" name="submit" alt="Make payments with PayPal - it's fast, free and secure!"> <input type="hidden" name="encrypted" value="-----BEGIN PKCS7----- MIIHTwYJKoZIhvcNAQcEoIIHQDCCBzwCAQExggEwMIIBLAIBADCBlDCBjjELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQw … … 1C7YhvLqslFdnUfeI8RR5vqQpvr4pHUwjEsAz3m/ZAO6/Riqo7/JimpWHjMDbZzR F91ttNhph8Ts22CfoAckT5tEPCG9G/iM0oPLfMFl8L2mCQhzHN02nEYU6080z9N0Zfd9 -----END PKCS7----- "> </form> |
2)??? 集成PayPal加密按鈕到您的.Net/C#環境中
a.??? 在OpenSSL目錄下您可以找到文件libeay32.dll和ssleay32.dll,將這兩個文件復制到<windir>\system32下;
b.??? 將上面由ButtonEncryptionLib工程編譯成的ButtonEncryptionLib.dll復制到您的.Net/C#工程中,并通過“添加引用”將此DLL添加到您當前的工程里;
c.??? 將您的私鑰、公共證書和PayPal的公共證書拷貝到該工程下一個目錄中,如<YOUR_CSHARP_PROJECT_PATH>\cert ;
d.??? 在需要添加“生成加密按鈕”的地方引用該組件,示例代碼如下:
| //申明一個ButtonEncryption用于加密字符串 ButtonEncryption buttonenc = new ButtonEncryption(true); string sResult = ""; //獲取所有證書存放的路徑 string VPath = Page.Server.MapPath(HttpContext.Current.Request.ApplicationPath + "/cert/"); string sCmdTxt = "cmd=_xclick,cert_id=XXXX,buiness=paypal@yoursite.com..."; string sCertFile = VPath + "your-pubcert.pem"; string sPrivKeyFile = VPath + "your-prvkey.pem"; string sPPCertFile = VPath + "paypal_cert_pem.txt"; //生成加密字符串到sEncryption string sEncryption = buttonenc.SignAndEncrypt(sCmdTxt, sCertFile, sPrivKeyFile, sPPCertFile, ref sResult); string outString=""; outString = outString +"<form action=""https://www.paypal.com/cgi-bin/webscr"" method=""post"">"); outString = outString +"<input type=""hidden"" name=""cmd"" value=""_s-xclick"">" ; outString = outString +"<input type=""image"" outString = outString +"<input type=""hidden"" name=""encrypted"" value=""" ; outString = outString + sEncryption; outString = outString +" ""></form>" ; //outString輸出的就是加密付款按鈕的HTML代碼 |
?
4.2.2 用JAVA生成加密按鈕
在開始使用JAVA生成加密按鈕之前,您必須做以下幾個準備工作:
1)??????? 下載并安裝JDK,請參考http://java.sun.com/j2se/1.4.2/download.html;
2)??????? 根據JDK的版本下載相對應的crypto,下載地址為
http://www.bouncycastle.org/latest_releases.html,下載后解壓到某一個目錄備用,記住此目錄名(如 c:\crypto-124),用于后面的CRYPTO_HOME;
3)??????? 從http://java.sun.com/products/jce/index.jsp或
http://java.sun.com/j2se/1.4.2/download.html下載Java(TM) Cryptography Extension(JCE);解壓JCE*.rar/.zip,并將其中local_policy.jar及
US_export_policy.jar覆蓋至$JAVA_HOME\jre\lib\security目錄中。
1>? 用PayPal提供的示例代碼生成單個按鈕
從https://www.paypal.com/en_US/dwnloads/java.zip下載 java.zip,解壓。
?????? 生成單個加密按鈕步驟如下:
Java ButtonEncryption <CertFile> <PrivKeyFile> <PPCertFile> <Password> <CmdTxt> <OutputFile> [Sandbox]
其中:
| <CertFile> | 您的公共證書文件名 |
| <PrivKeyFile> | 您的私鑰文件名 |
| <PPCertFile> | PayPal的公共證書文件名 |
| <Password> | 生成PKCS12文件時輸入的密碼 |
| <CmdTxt> | 加密的字符串命令行 |
| <OutputFile> | 輸出HTML代碼的文件名 |
| [Sandbox] | 在PayPal測試環境中生成 |
比如:
| Java ButtonEncryption my-pubcert.pem my-prvkey.p12 paypal_pubcert.pem pwd |
<OutputFile>的樣本如下:
| <form action="https://www.paypal.com/cgi-bin/webscr" method="post"> <input type="hidden" name="cmd" value="_s-xclick"> <input type="image" src="https://www.paypal.com/en_US/i/btn/x-click-but23.gif" border="0" name="submit" alt="Make payments with PayPal - it's fast, free and secure!"> <input type="hidden" name="encrypted" value="-----BEGIN PKCS7----- MIIHTwYJKoZIhvcNAQcEoIIHQDCCBzwCAQExggEwMIIBLAIBADCBlDCBjjELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQw … … 1C7YhvLqslFdnUfeI8RR5vqQpvr4pHUwjEsAz3m/ZAO6/Riqo7/JimpWHjMDbZzR F91ttNhph8Ts22CfoAckT5tEPCG9G/iM0oPLfMFl8L2mCQhzHN02nEYU6080z9N0Zfd9 -----END PKCS7----- "> </form> |
?
2>? 集成PayPal加密按鈕到您的JAVA工程環境中
| import com.paypal.crypto.sample.*; ? import java.io.*; import java.security.InvalidAlgorithmParameterException; import java.security.KeyStoreException; import java.security.NoSuchAlgorithmException; import java.security.NoSuchProviderException; import java.security.Security; import java.security.UnrecoverableKeyException; import java.security.cert.CertStoreException; import java.security.cert.CertificateException; import org.bouncycastle.cms.CMSException; |
| Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider()); try{ //先申明變量PrivkeyFile CertFile PPCertPath Password CmdText //這些變量的定義可以參考上面 private static String PrivkeyFile = null; private static String CertFile = null; private static String PPCertPath = null; private static String Password = "password"; private static String CmdText = null; //cmd=_xclick,business=paypal@yoursite.com,amount=1.00 //TODO:初始化變量PrivkeyFile CertFile PPCertPath Password CmdText //…… ? //申明一個ClientSide,其中PrivkeyFile CertFile PPCertPath Password CmdText ClientSide client_side = new ClientSide(PrivkeyFile,CertFile,PPCertPath,Password); //生成加密數據 String result = client_side.getButtonEncryptionValue( CmdText, PrivkeyFile, CertFile, PPCertPath, Password ); //生成加密付款按鈕的HTML代碼 StringBuffer sbResult = new StringBuffer(“”); sbResult.append("<form action=\"https://www.paypal.com/cgi-bin/webscr\" method=\"post\">" );? sbResult.append("<input type=\"hidden\" name=\"cmd\" value=\"_s-xclick\">" ); sbResult.append("<input type=\"image\" sbResult.append ("alt=\"Make payments with PayPal - it's fast, free and secure!\">" ); sbResult.append("<input type=\"hidden\" name=\"encrypted\" value=\"" ); sbResult.append( result ); sbResult.append( "\"></form>"); //通過調用sbResult.toString()即可輸出加密付款按鈕的HTML代碼 //以下為捕獲意外事件 }catch(NoSuchAlgorithmException e){ e.printStackTrace(); }catch(NoSuchProviderException e){ e.printStackTrace(); }catch(IOException e){ e.printStackTrace(); }catch(CMSException e){ ?????? e.printStackTrace(); }catch(CertificateException e){ ?????? e.printStackTrace(); }catch(KeyStoreException e){ ?????? e.printStackTrace(); }catch(UnrecoverableKeyException e){ ?????? e.printStackTrace(); }catch(InvalidAlgorithmParameterException e){ ?????? e.printStackTrace(); }catch (CertStoreException e){ ?????? e.printStackTrace(); } |
?
5 附錄1: 參考文檔及網站
n??????????? PayPal網站付款標準版交易方式確認集成指南
【中文版】
https://www.paypal.com/zh_CN/pdf/PP_WebsitePaymentsStandard_IntegrationGuide.pdf
【英文版】
https://www.paypal.com/en_US/pdf/PP_WebsitePaymentsStandard_IntegrationGuide.pdf
n??????????? 訂單管理集成指南
【中文版】
https://www.paypal.com/zh_CN/pdf/PP_OrderManagement_IntegrationGuide.pdf
【英文版】
https://www.paypal.com/en_US/pdf/PP_OrderManagement_IntegrationGuide.pdf
n??????????? PayPal集成中心https://www.paypal.com/IntegrationCenter/ic_home.html
n??????????? 標準標量列表
https://www.paypal.com/IntegrationCenter/ic_std-variable-reference.html
n??????????? IPN和PDT變量列表
https://www.paypal.com/IntegrationCenter/ic_ipn-pdt-variable-reference.html
n??????????? 加密按鈕 https://www.paypal.com/IntegrationCenter/ic_button-encryption.htm
n??????????? 英文論壇搜索 http://paypal.forums.liveworld.com/search.jspa?objID=c1
n??????????? 按鈕示例網站 http://paypaltech.com/demo_site/
n??????????? IPN代碼生成器
http://paypaltech.com/content/index.php?option=com_content&task=view&id=25&Itemid=49
n??????????? EWP for PHP http://paypaltech.com/Stephen/encode/index.php
n??????????? PEM和P12的轉換器
http://paypaltech.com/content/index.php?option=com_content&task=view&id=21&Itemid=42
6 附錄2:PayPal目前支持的貨幣列表
| 貨幣代號 | 貨幣名稱 |
| USD | U.S. Dollars |
| AUD | Australian Dallars |
| CAD | Canaidan Dollars |
| CZK | Czech Korunna |
| DKK | Danish Kroner |
| EUR | Euros |
| HKD | Hong Kong Dollars |
| HUF | Hungarian Forint |
| NZD | New Zealand Dollars |
| NOK | Norwegian Kroner |
| PLN | Polish Zlotych |
| GBP | Pounds Sterling |
| SGD | Singapore Dollars |
| SEK | Swedish Kronor |
| CHF | Swiss Frances |
| JPY | Japan Yen |
?
?
?
?
?
?
?
?
?
?
?
?
7 附錄3:常見問題
n??????????? 若在您的“Buy Now”按鈕中添加了變量“invoice”(訂單標識號),則應保證每次付款中的“invoice”號碼唯一;若重復付款,PayPal 將提示您,如下圖所示:
n??????????? 在所有涉及到價格的變量中,其數值都只精確到小數點后面兩位;若其中一個數值精確到兩位以上或者格式不對時,PayPal將提示您發生錯誤,如下圖所示:
n??????????? 如果您為您的網站付款流程頁面定義了LOGO,則該LOGO圖片必須存放在一個HTTPS服務器上,以避免出現一些安全警告,如下圖所示:
?
?
?
?
?
?
?
?
?
?
8 附錄4:標準變量列表
變量 cmd 的值
| cmd 的值 | 說明 |
| _xclick | “立即購買”和“捐贈”按鈕。 |
| _cart | “購物車” 按鈕。 |
| _ext-enter | 預填充您的客戶的PayPal注冊表單。需要一個redirect_cmd 變量,其值應為 _xclick 。 |
?
用于IPN的變量: notify_url
| 變量名 | 說明 | 必填/選填 | 字段長度 |
| notify_url | 用于接受PayPal發送的關于即時付款通知的交易信息的URL。必須是有效的URL。 | 選填 | 255 |
?
表單變量: 物品信息
| 變量名 | 說明 | 必填/選填 | 字段長度 |
| amount | 購物價格或金額,不包括運費、手續費或稅費。如果在“立即購買”或者“捐贈”交易情況下省略,則由客戶在購買時填寫此值。 ????立即“購買”或者“捐贈”交易情況下是選填 ????“購物車”交易情況下是必填 | 請參考本行說明 | ? |
| item_name | 物品描述。如果在“立即購買”或者“捐贈”交易情況下省略,則客戶將看到一個可以選擇輸入物品名稱的欄目。 ????立即“購買”或者“捐贈”交易情況下是選填 ????“購物車”交易情況下是必填 | 請參考本行說明. | 127 |
| item_number | 可用于跟蹤購買或捐贈的傳遞變量,在付款完成時傳回給您。如果在“立即購買”或者“捐贈”交易情況下省略,則將沒有變量傳回給您。 | 選填 | 127 |
| quantity | 物品數量。將金額、運費和稅費乘以數量將得出付款總額。如果這是購物車交易,PayPal將附加物品數量(例如, quantity1、quantity2)。 提示:數量的值必須是正整數。不允許為空、零或負數。 | 選填 | ? |
| undefined_quantity | 如果設置為 1,則允許買家修改數量。 | 選填 | 1 |
| on0 | 第一選項欄名稱。如果省略,則將沒有變量傳回給您. | 選填 | 64 |
| on1 | 第二選項欄名稱。如果省略,則將沒有變量傳回給您。 | 選填 | 64 |
| os0 | 第一組選項值。如果此選項通過文本框或單選按鈕選中,則每個值均應不超過 64 個字符。如果該值由客戶通過文本框輸入,則上限為 200 個字符。如果省略,則不會傳回給您任何變量。 提示:必須對 on0 進行定義,才能識別 os0。 | 選填 | 64 or 200 |
| os1 | 第二組選項值。如果此選項通過文本框或單選按鈕選中,則每個值均應不超過 64 個字符。如果該值由客戶通過文本框輸入,則上限為 200 個字符。如果省略,則不會傳回給您任何變量。 提示:必須對 on1 進行定義,才能識別 os1。 | 選填 請參考本行說明. | 64 or 200 |
?
表單變量:顯示信息
| 名字 | 說明 | 必填/選填 | 字段長度 |
| add | 添加一個物品到PayPal購物車 若“add”和“display”兩個變量同時設置,則只顯示當前購物車信息。 | 必填 | 1 |
| cancel_return | 指在付款取消的情況下,客戶瀏覽器返回到的 URL 。例如,您的網站上顯示“付款已取消”頁面的 URL。如果省略,則用戶將被帶到PayPal網站。 | 選填 | ? |
| cbt | 設置“PayPal付款完成”頁面上的“繼續”按鈕的文本。 提示:return 變量也需要被設置。 | 選填 | 60 |
| cn | 提示欄上的標簽。該值不保存,而且不會出現在任何給您的通告中。如果省略,則將沒有變量傳回給您。 | 選填 | 40 |
| cpp_header_image | 將您選擇的圖片設置為顯示在付款頁面的左上角。該圖片的最大尺寸為 750像素寬、90 像素高。有效的字符集為 URL 安全字符。由于圖片不存儲在我們的數據庫上,所以 cpp_header_image 變量沒有字符限制。建議您只提供存儲在安全 (https) 服務器上的圖片。 | 選填 | 無限制 |
| cpp_headerback_color | 為付款頁面標題設置背景色。有效的字符集為 6 字符 HTML 十六進制 ASCII代碼。此變量不區分大小寫。 | 選填 | ? |
| cpp_headerborder_color | 設置付款頁面標題四周的邊框顏色。邊框是位于標題空間四周,粗細為 2 像素的方框,方框最大尺寸為 750 像素寬、90 像素高。有效的字符集為 6 字符HTML 十六進制 ASCII 代碼。此變量不區分大小寫。 | 選填 | ? |
| cpp_payflow_color | 為付款頁面的標題以下區域設置背景色。有效的字符集為 6 字符 HTML 十六進制 ASCII 代碼。此變量不區分大小寫。 提示:不允許使用與貝寶錯誤信息相沖突的背景色。默認顏色為白色。 | 選填 | ? |
| cs | 設置您的付款頁面的背景色。如果設為“1”,背景色將為黑色。如果省略 或設為“0”,背景色則為白色。 | 選填 | ? |
| display | 顯示當前PayPal購物車的物品信息。 | 選填 | 1 |
| image_url | 您希望在PayPal付款頁面左上角的用作標識的 150x50 像素圖片的 URL。必須是有效的URL。 如果省略,則客戶看到的是您的商家名稱(如果您有企業賬戶)或您的電子郵件地址(如果您有高級賬戶)。 | 選填 | ? |
| no_note | 為付款加入說明。如果省略或設為“0”,則會提示您的客戶輸入說明。如果設為“1”,則不會提示您的客戶輸入說明。 | 選填 | 1 |
| no_shipping | 買家的送貨地址。 省略或設為 0 = 提示客戶輸入收貨地址。 1 = 不要求客戶提供收貨地址。 2 = 客戶必須提供收貨地址。 | 選填 | 1 |
| page_style | 為與此按鈕/ 鏈接相關的付款頁面設置“自定義付款頁面的樣式”。 page_style 的值與添加或編輯頁面樣式時您選擇的頁面樣式名稱相同。 page_style 變量的最大長度為 30 個字符。 有效的字符集只能為小寫 7 位字母數字 ASCII 字符,加下劃線。不能包含空格。 如果您希望按鈕/ 鏈接始終引用您設置為首選的樣式,請將該變量設置為 "primary"。 如果您希望該按鈕/ 鏈接始終引用默認的貝寶頁面樣式,請將該變量設置為 "paypal"。 | 選填 | 30 |
| return | 指完成付款后客戶的瀏覽器返回到的 URL 。 例如,在您的站點上顯示“感謝您的付款” 的頁面的 URL。 如果省略,則您的買家將被帶到PayPal網站。 | 選填 | ? |
| rm | 付款完成后的返回 URL 的行為(“返回方法”)。 提示:rm變量只有在return變量被設置后才能生效。 如果省略或為 0,則 GET 方法用于沒有啟用即時付款通知的所有購物車交易,而 POST 方法用于所有其他交易。 如果為 1 并設置了 return,則客戶的瀏覽器由 GET 方法返回至返回 URL,并且不提交任何交易變量。 如果為 2 并設置了 return,則客戶的瀏覽器由 POST 方法返回至返回URL,同時將所有可用交易變量發送至該 URL。 | 選填 | ? |
?
表單變量: 交易信息
| 名字 | 說明 | 必填/選填 | 字段長度 |
| address_override | 如果設置為 1,通過預填充欄傳送的地址將會覆蓋用戶的已存儲地址。用戶可以看到傳送的地址,但是無法進行編輯。如果地址無效(例如,缺少必需的欄,包括國家或地區)或者沒有包括地址,則不會顯示地址。 | 選填 | 1 |
| currency_code | 付款貨幣。定義幣種以標示貨幣變量(amount、shipping、shipping2、handling、tax)。如果省略,則所有貨幣字段將解釋為美元。 | 選填 | ? |
| custom | 永遠不會向您的客戶顯示的傳遞變量。如果省略,則不會傳回給您任何變量。 | 選填 | 256 |
| handling | 手續費。并非根據數量而定。無論所購物品數量多少,均收取相同手續費。 如果省略,則不收取手續費。 | 選填 | ? |
| invoice | 您可以用于識別此次購物的帳單號碼的傳遞變量。如果省略,則不會傳回給您任何變量。 | 選填 | 127 |
| redirect_cmd | 只有在cmd的值為“_ext-enter”,即賬戶注冊的預填充時才有效。 redirect_cmd 的唯一有效值是 _xclick. | 選填 | 40 |
| shipping | 在您啟用了特定于物品的運費時,運送此物品的成本。如果使用了shipping 而未定義 shipping2 ,則無論所購物品數量多少,都將收取該固定金額。 提示:如果您使用的是基于物品的運費,請確保選中您的用戶信息中的覆蓋復選框。 如果省略,并啟用了基于用戶信息的運費,則將向您的客戶收取您的用戶信息中定義的金額或百分比。 | 選填 | ? |
| shipping2 | 每增加一件物品所需的運送成本。如果省略,并啟用了基于用戶信息的運費,則將向您的客戶收取您的用戶信息中定義的金額或百分比。 | 選填 | ? |
| tax | 基于交易的稅費覆蓋變量。將該變量設置為您希望應用于交易的固定稅額,而不論買家所處的位置。如果存在,該值將覆蓋可能已在您的用戶信息中設定的任何稅費設置。如果省略,則適用用戶信息稅費設置(如有)。 | 選填 | ? |
| tax_cart | 整個購物車的稅費。而不是單個物品的稅額。 | 選填 | ? |
?
表單變量: 購物車特有
| 名字 | 必填/選填 | 說明 | 允許的值 |
| amount | 必填 | 物品的價格(購物車中所有物品的總價格)。 | 任何有效貨幣金額 |
| business | 必填 | 您PayPal賬戶上的電子郵件地址。 | 您PayPal賬戶上的電子郵件地址 |
| handling_cart | 選填 | 對整個購物車收取的單筆手續費。如果在多個“添加到購物車”按鈕中使用handling_cart,將使用第一件物品的handling_cart 值。 | 任何有效貨幣金額 |
| item_name | 必填 | 物品名稱(或購物車名稱)。 | ? |
| paymentaction | 選填 | 指明交易是否是稍后在https://www.paypal.com/ 上通過PayPal授權與捕獲進行捕獲的授權。 | ? |
| upload | 必填 | 上傳第三方購物車 | 1 |
?
表單變量:第三方購物車中單個物品的變量
| 名字 | 說明 | 必填/選填 | 字段長度 |
| amount_x | 物品 #x 的價格。 | 必填 | ? |
| handling_x | 物品 #x 的手續費。 | 選填 | ? |
| item_name_x | 購物車中的物品 #x 的名稱。必須為字母數字字符。 | 必填 | 127 |
| item_number_x | 可用于跟蹤購買 或捐贈的傳遞變量,在付款完成時傳回給您。 如果省略,則將沒有變量傳回給您。 | 選填 | 127 |
| on0_x | 物品 #x 的第一選項欄名稱。 | 選填 | 64 |
| on1_x | 物品 #x 的第二選項欄名稱。 | 選填 | 64 |
| os0_x | 物品 #x 的第一組選項值。 必須對 on0_x 進行定義,才能識別 os0_x 。 | 選填 | 200 |
| os1_x | 物品 #x 的第二組選項值。 必須對 on1_x 進行定義,才能識別 os1_x 。 | 選填 | 200 |
| quantity_x | 物品 #x 的數量。quantity_x 的值必須是正整數。不允許為空、零或負數。 | 選填 | ? |
| shipping_x | 運送物品 #x 的第一件(數量 1)的成本。 | 選填 | ? |
| shipping2_x | 每增加一件運送物品 #x (數量 2 或更多)所需的運送成本。 | 選填 | ? |
| tax_x | 物品 #x 的稅額。 | 選填 | ? |
?
表單變量:網站付款的預填充變量
| 變量名 | 說明 | 要求 | 字段長度 |
| address1 | 街道(第 1 欄,共 2 欄) | 字母數字字符 | 100 |
| address2 | 街道(第 2 欄,共 2 欄) | 字母數字字符 | 100 |
| city | 市/ 縣 | 字母數字字符 | 40 |
| country | 設置運送和開單國家或地區。請查看附錄6,以了解允許的國家或地區代碼。 | 字母 | 2 |
| | 客戶的電子郵件地址 | 字母數字字符 | 127 |
| first_name | 名 | 字母 | 32 |
| last_name | 姓 | 字母 | 32 |
| lc | 定義買家的交易方式確認流程的語言 | 字母 | 2 |
| night_phone_a | 美國電話號碼的區號,或非美國電話號碼的國家或地區代碼。它會預填充買家的家庭電話。 | 數字 | 3 |
| night_phone_b | 美國電話號碼的 3 位數前綴,或非美國電話號碼的完整電話號碼(不包括國家或地區代碼)。它會預填充買家的家庭電話。 | 數字 | 3 |
| night_phone_c | 美國電話號碼的 4 位數電話號碼。它會預填充買家的家庭電話。 | 數字 | 4 |
| state | 省/ 直轄市/ 自治區 | 必須為兩個字符的正式縮寫 | 2 |
| zip | 郵編 | 數字 | 32 |
?
表單變量: 賬戶注冊的預填充變量
| 變量名 | 說明 | 要求 | 字段長度 |
| business_address1 | 客戶所在的街道 | 字母數字字符 | 128 |
| business_address2 | 客戶所在的街道 | 字母數字字符 | 128 |
| business_city | 客戶所在的市/ 縣 | 字母數字字符 | 128 |
| business_state | 客戶所在的省/ 直轄市/ 自治區 | 必須為兩個字符的正式縮寫 | 2 |
| business_country | 客戶所在的國家 | 字母 | 2 |
| business_cs_email | 客戶的email地址 | 字母數字字符 | 128 |
| business_cs_phone_a | 客戶的客服電話所在的美國電話號碼的區號,或非美國電話號碼的國家或地區代碼。 | 數字 | 3 |
| business_cs_phone_b | 客戶的客服電話所在的美國電話號碼的 3 位數前綴,或非美國電話號碼的完整電話號碼(不包括國家或地區代碼)。它會預填充買家的家庭電話。 | 數字 | 3 |
| business_cs_phone_c | 客戶的客服電話所在的美國電話號碼的 4 位數電話號碼。它會預填充買家的家庭電話。 | 數字 | 4 |
| business_url | 客戶網站的URL | 字母數字字符. 必須是有效的. | 128 |
| night_phone_b | 美國電話號碼的 3 位數前綴,或非美國電話號碼的完整電話號碼(不包括國家或地區代碼)。它會預填充買家的家庭電話。 | 數字 | 3 |
| business_night_phone_a | 客戶所在的美國電話號碼的區號,或非美國電話號碼的國家或地區代碼。它會預填充買家的家庭電話。 | 數字 | 3 |
| business_night_phone_b | 客戶所在的美國電話號碼的 3 位數前綴,或非美國電話號碼的完整電話號碼(不包括國家或地區代碼)。它會預填充買家的家庭電話。 | 數字 | 3 |
| business_night_phone_c | 客戶所在的美國電話號碼的 4 位數電話號碼。它會預填充買家的家庭電話。 | 數字 | 4 |
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
9 附錄6:國家或地區ISO3166代碼
| 國家或地區名 | 代碼 | 國家或地區名 | 代碼 | 國家或地區名 | 代碼 |
| 安圭拉 | AI | 希臘Greece | GR | 波蘭Poland | PL |
| 阿根廷Argentina | AR | 中國香港特別行政區 | HK | 葡萄牙Portugal | PT |
| 澳大利亞 | AU | 匈牙利Hungary | HU | 新加坡Singapore | SG |
| 奧地利Austria | AT | 冰島Iceland | IS | 斯洛伐克Slovakia | SK |
| 比利時Belgium | BE | 印度India | IN | 斯洛文尼亞 | SI |
| 巴西Brazil | BR | 愛爾蘭Ireland | IE | 南非South Africa | ZA |
| 加拿大 | CA | 以色列Israel | IL | 韓國Korea | KR |
| 智利Chile | CL | 意大利Italy | IT | 西班牙Spain | ES |
| 中國 | CN | 牙買加Jamaica | JM | 瑞典Sweden | SE |
| 哥斯達黎加Costa Rica | CR | 日本 | JP | 瑞士Switzerland | CH |
| 塞浦路斯 | CY | 拉脫維亞 | LV | 中國臺灣地區 | TW |
| 捷克共和國Czech Republic | CZ | 立陶宛 | LT | 泰國Thailand | TH |
| 丹麥Denmark | DK | 盧森堡Luxembourg | LU | 土耳其Turkey | TR |
| 多米尼加共和國 | DO | 馬來西亞Malaysia | MY | 英國Great Britain | GB |
| 厄瓜多爾Ecuador | EC | 馬耳他 | MT | 美國U.S.A | US |
| 愛沙尼亞 | EE | 墨西哥Mexico | MX | 烏拉圭Uruguay | UY |
| 芬蘭Finland | FI | 荷蘭Holland | NL | 委內瑞拉Venezuela | VE |
| 法國 | FR | 新西蘭New Zealand | NZ | ? | ? |
| 德國Germany | DE | 挪威Norway | NO | ? | ? |
?
?
關于.NET技術 等其他計算機技術,歡迎加群一起討論 3群 70536418 2群 5851499 1群 12672376
?
轉載于:https://www.cnblogs.com/guolilong/archive/2012/04/11/2441830.html
總結
以上是生活随笔為你收集整理的(asp.net)PayPal案例的关键源码代码__PayPal集成_API接口的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 几种android实时视频网络传输方案比
- 下一篇: ASP.Net0626快播影院视频网的设