天天看點

PayPal PHP接口 paypal線上支付

再次之前先說一個網址:https://www.paypaltech.com/SG2/             這個是生成paypal IPN的網址,這樣說吧,是替你生成代碼的網址(非常的好)!不懂沒關系!先知道一下! 

下載下傳教程網址:http://download.csdn.net/source/2225766

http://download.csdn.net/source/2225778

PayPal 快速、安全而又友善,是跨國交易的首選線上付款方式。現在PayPal可以和國内大部分信用卡關聯,可以實作國人的跨國交易收支。

申請PayPal注冊網址:https://www.paypal.com/

paypal接口與其它接口有些不同,稍微複雜一點。 其實銀行接口也算是一個站點的插件。

所謂paypal ipn(Instant Payment Notification),就是Paypal開發的一種能主動通知第三方賣家系統交易狀态的一種機制。IPN的原理很簡單,就是當産生了一個交易之後, 交易狀态發生變化時,如使用者已經付款、或者退款、撤銷時,Paypal利用常用的HTTP POST方式,将交易的一些變量送出給網站的某個頁面(稱之為IPN Handler),當這個頁面接受到請求時候,将這些資料原封不動加上一個訓示驗證的cmd=_notify-validate,POST回Paypal 的接口位址,如果資料正确,那麼Paypal傳回字元串VERIFIED,否則為INVALID,如果結果為VERIFIED,那麼你的程式就可以使用這 些資料進行操作。

開設Sandbox帳号

但代碼的調試是一件很痛苦的事情,因為作為第三方開發人員,不可能開兩個帳号,每次測試還要之間交易一些錢,是以Paypal專門開發了Sandbox給開發人員進行開發,首先到https://developer.paypal.com/ 注冊一個開發帳号,好了之後再進入Sandbox建立測試用的Paypal虛拟帳号(至少應該建立一個Business的和一個Personal的),這 種賬号注冊方法和Paypal的流程一樣,資訊可以是假的,包括銀行帳号、信用卡(其實Paypal Sandbox會自動生成一些随機的号碼)。接下來需要激活Paypal Sandbox的虛拟帳号,注意,這裡不管你在Paypal Sanbox注冊時填什麼郵件位址,有任何發送到虛拟帳号所填郵箱的郵件都存會在開發帳号的管理界面中的Email頁(導航欄上有)中。登入 Sandbox的虛拟Paypal環境,還需要驗證虛拟帳号的銀行,這裡可以随便填,然後通過Add Funds來給賬戶充值(想填多少填多少 920-203 920-533 )。然後,還需要激活IPN的選項,在Business的那個賬戶的Profile設定頁面中,點選,然後點選Edit按鈕,打開IPN,這裡如果你使用 的是固定的IPN Handle,可以直接将位址填入。

接下來,我們測試的時候,應該将Paypal接口的位址設定為https://www.sandbox.paypal.com/cgi-bin/webscr

基本的流程

當客戶向您付款時,PayPal将向位于指定 URL (type=”hidden” name=”notify_url” value=” “) 的 伺服器發送一個通知。此通知中将包括您的客戶的所有付款資訊(例如,客戶名稱、金額),以及一段加密代碼。當伺服器收到通知時,它随後會将該資訊(包括加 密代碼)發送回安全的PayPal URL。PayPal将通過檢查加密字元串對交易進行身份驗證。這種将 IPN 資料傳回PayPal的操作防止了“欺騙”,是以您可以確定 IPN 來自PayPal。在進行驗證時,PayPal會将其合法性的确認資訊發送回您的伺服器。

提示:要啟用即時付款通知,您将需要輸入一個 URL,通過它您可以接收到來自您的使用者資訊的通知。

啟用了即時付款通知後,每次當您接收付款時您的伺服器都會收到一個通知,此通知将以隐藏的“FORM POST”的方式發送到指定的 URL,并将包括所有付款資訊。此頁面的底部列出了通知的 FORM 變量。

每次收到來自PayPal的 IPN 時,您必須在實施訂單之前完成如下所述的通知确認過程。确認列出的資訊将可確定交易合法。

通知确認IPN

為了確定付款已進入您的PayPal賬戶,您必須驗證用作“receiver_email”的電子郵件位址是否已在您的PayPal賬戶中注冊并得到确認。

伺服器收到即時付款通知後,您将需要通過建構一個發送到PayPal的 HTTP POST 對其進行确認。您的 POST 應發送到 https://www.paypal.com/cgi-bin/webscr

您必須完全按照收到表單變量時的原樣發送所有收到的表單變量。您還需要将一個值為“_notify-validate”的名為“cmd”變量(例如,cmd=_notify-validate )附加到 POST 字元串。

PayPal将回複該 POST,并在回複的正文中包含一個單詞“VERIFIED ”或“INVALID”。當您收到 VERIFIED 回複時,您需要在實施訂單之前執行若幹檢查:

  • 确認“payment_status”為“Completed”,因為系統也會為其他結果(如“Pending”或“Failed”)發送 IPN。

    檢查“txn_id”是否未重複,以防止欺詐者重複使用舊的已完成的交易。

    驗證“receiver_email”是已在您的PayPal賬戶中注冊的電子郵件位址,以防止将付款發送到欺詐者的賬戶 。

    檢查其他交易詳情(如物品号和價格),以确認價格未改變完成了以上檢查後,您可以使用 IPN 資料更新您的資料庫,并處理購物。

如果收到“無效”通知,則應将其視為可疑通知,并應對其進行調查。

主要參數:

向PayPal送出粘貼代碼時,應包括以下 4 個隐藏變量及一張圖檔,這就是說,您粘貼到PayPal的最短必需代碼應如下:

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

<input type="hidden" name="cmd" value="_xclick">  // "_xclick" 立即購買

<input type="hidden" name="business" value="[email protected]">  //PayPal賬戶上的電子郵件位址

<input type="hidden" name="item_name" value="Item Name"> //物品名稱(或購物車名稱)

<input type="hidden" name="currency_code" value="USD">  //定義币種以标示貨币變量 值可以為 "USD"、"EUR"、"GBP"、"CAD"、"JPY"。 

<input type="hidden" name="amount" value="0.00"> //物品的價格(購物車中所有物品的總價格,因為是_Xclick模式)

<input type="image" src="http://www.paypal.com/zh_XC/i/btn/x-click-but01.gif" name="submit" alt="請使用PayPal付款!">

</form>
           
PayPal 提供附加變量,用于自定義您的 Form Post。所有可用變量如下(變量名稱必須用小寫):

        
可用變量
business 您的PayPal賬戶上的電子郵件位址 quantity 物品數量。大于 1 時,會與金額相乘 item_name 物品名稱(或購物車名稱)。必須是字母數字字元,最多為 127 個字元 item_number 用于跟蹤付款的可選傳遞變量。必須是字母數字字元,最多為 127 個字元 amount 物品的價格(購物車中所有物品的總價格) shipping 該物品的運送成本 shipping2 每增加一件物品所需的運送成本 handling 手續費 tax 基于交易的稅額。如果使用該變量,傳遞值将覆寫所有使用者資訊稅收設定(不管買家所在位置)。 no_shipping 送貨位址。如果設為 "1",則不會要求您的客戶提供送貨位址。該變量為可選項;如果省略或設為 "0",将提示您的客戶輸入送貨位址 cn 可選标簽,會在提示欄上顯示(最多 40 個字元) no_note 為付款加入提示。如果設為 "1",則不會提示您的客戶輸入提示。該變量為可選項;如果省略或設為 "0",将提示您的客戶輸入提示。 on0 第一選項欄名稱。最多 64 個字元 os0 第一組選項值。最多 200 個字元。"on0" 必須定義,以便識别 "os0"。 on1 第二選項欄名稱。最多 64 個字元 os1 第二組選項值。最多 200 個字元。"on1" 必須定義,以便識别 "os1"。 custom 決不會向您的客戶顯示的可選轉遞變量。可用于跟蹤存貨 invoice 決不會向您的客戶顯示的可選轉遞變量。可用于跟蹤賬單号 notify_url 僅與 IPN 一起使用。發送 IPN Form Post 的網際網路 URL return 您的客戶完成付款後将傳回的網際網路 URL cancel_return 您的客戶取消付款後将傳回的網際網路 URL image_url 您要用作圖示的圖檔的網際網路 URL,圖檔大小為 150 X 50 像素 cs 設定您的付款頁面的背景色。如果設為 "1",背景色将為黑色。該變量為可選項;如果省略或設為 "0",背景色将為白色 擴充變量 PayPal 允許您粘貼擴充變量,條件是将改變以下 "cmd" 值:<input type="hidden" name="cmd" value="_xclick"> 到: <input type="hidden" name="cmd" value="_ext-enter"> <input type="hidden" name="redirect_cmd" value="_xclick"> 通過上述 "cmd" 值修改,您還可使用以下變量: 擴充變量 email 客戶的電子郵件位址 first_name 客戶的名。必須是字母數字字元,最多為 32 個字元 last_name 客戶的姓。必須是字母數字字元,最多為 64 個字元 address1 客戶位址所在國家或地區。必須是字母數字字元,最多為 100 個字元 address2 客戶位址第二行。必須是字母數字字元,最多為 100 個字元 city 客戶位址所在城市。必須是字母數字字元,最多為 100 個字元 state 客戶位址所在州。必須是正式的 2 個字母縮寫 zip 客戶位址的郵政編碼 night_phone_a 客戶夜間聯系電話号碼的區号 night_phone_b 客戶夜間聯系電話号碼前三位 day_phone_a 客戶白天聯系電話号碼的區号 day_phone_b 客戶白天聯系電話号碼前三位 提示:若要更改"使用者資訊"中的預設運費和手續費設定,請轉至您的使用者資訊,編輯您的運費計算,然後點選"允許采用基于交易的運費"複選框。 将單個物品傳遞給PayPal 如果您的第三方購物車可設定成向PayPal傳遞單個物品,有關物品的資訊将加入買家和賣家的記錄日志和系統通知中。要加入該物品的資訊,您需要将 HTML 格式元素粘貼至PayPal購物車流程的新版本。該過程與 #1 節"将總購物車數量傳遞給PayPal"描述的非常相似,不同之處在于: 将 "cmd" 變量設定到 "_cart" 更換必要的 HTML 行 <input type="hidden" name="cmd" value="_xclick"> 與<input type="hidden" name="cmd" value="_cart"> 添加稱為 "upload" 的新變量 在 <表格> 和 </表格> 标簽之間新增以下行:<input type="hidden" name="upload" value="1"> 定義物品明細 對于以下各特定物品參數,定義與通過您的合作商購物車購買的各物品對應的一組新值。将 "_x" 附加到變量名稱,其中 x 是物品号碼,從 1 開始,每加入一物品增加一。 item_name_x (物品 #x 需要)購物車中物品 #x 的名稱。必須是字母數字字元,最多為 127 個字元 item_number_x 與購物車中物品 #x 關聯的可選傳遞變量。必須是字母數字字元,最多為 127 個字元 amount_x (物品 #x 需要)物品 #x 的價格 shipping_x 運送物品 #x 的第一件(數量 1)的成本 shipping2_x 每增加一件運送物品 #x(數量 2 或更多)所需的運送成本 handling_x 物品 #x 的處理成本 on0_x 物品 #x 的第一選項欄名稱。最多 64 個字元 os0_x 物品 #x 的第一組選項值。最多 200 個字元。"on0_x" 必須定義,以便識别 "os0_x"。 on1_x 物品 #x 的第二選項欄名稱。最多 64 個字元 os1_x 物品 #x 的第二組選項值。最多 200 個字元。"on1_x" 必須定義,以便識别 "os1_x"。 為購物車中每件物品重複此設定 為您的買家購物車中的各物品加入以上表格中的一組必需的變量和任何選項變量。購物車中的第一物品必須用以 "_1" 結束的參數定義,如 "item_name_1"、"amount_1" 等。同樣,第二物品應用變量 "item_name_2"、"amount_2" 等命名。提示:"_x" 值必須以一為機關按序遞增,以便識别。如果從 item #1 跳到 item #3 而不定義 item #2,則第三個物品會被忽略。 要指定币種:所有貨币變量(金額、運費、運費 2、手續費、稅款)将以粘貼在付款上的 "currency_code" 變量指定的币種顯示。因為其不是随物品不同的,無需向變量名稱附加 "_x"。如果沒有粘貼 "currency_code" 變量,我們将假定所有貨币變量值為美元。 PayPay API PayPal提供了多個API接口供開發者使用。在使用API之前,你必須先申請一個進階個人賬戶或者企業賬戶,同時你必須擷取API 憑證供每次調用API 時使用。 一旦你擷取了API憑證,您就可以調用相關的API接口了。目前,我們提供兩種API接口方式,NVP和SOAP。一般來說我們推薦您使用 NVP 接口。 • Name-Value Pair(NVP)接口 – 請求和響應都是使用簡單的HTTP。該接口簡單易實作,适合于初級開發者和需要快速完成內建的人員; • SOAP接口 - 請求和響應都是通過SOAP來完成。該接口适合于面向對象工程的開發; PayPal API:NVP(名稱/值對)接口 通過NVP API接口, 您隻需給PayPal發送一個HTTP請求,并通過“名稱=值”的形式指定請求參數,即可充分利用PayPal的API功能。 NVP API 是 PayPal 的業務功能、風險管理和業務邏輯的簡單接口。NVP API 最基本的使用方法是通過到 PayPal 伺服器的 HTTPS 連接配接發送一個 NVP 字元串,然後處理響應(也是一個 NVP 字元串)。執行 NVP API 調用的基本步驟如下: • 為特定的 API 方法構造一個請求參數字元串。 • 通過 HTTPS 連接配接向 PayPal 伺服器發送這個參數字元串。 • 處理伺服器響應中的 NVP。 每個NVP API請求字元串包含有API使用者名、API密碼、所要調用API的名稱及用來辨別交易的令牌,如: [email protected]&PWD=mypassword &METHOD=GetExpressCheckoutDetails&TOKEN=EC-23T233ZP3DFB... 成功的應答包含以下要素:ACK=Success ,以及一個用來辨別交易的唯一令牌。 ACK=Success&TIMESTAMP=date/timeOfResponse &CORRELATIONID=debuggingToken&VERSION=2.300000&BUILD=buildNumber &TOKEN=EC-3DJ78083ES565113B&[email protected] &PAYERID=95HR9CM6D56Q2&PAYERSTATUS=verified &FIRSTNAME=John&LASTNAME=Smith... 您可以使用NVP API完成以下操作: • 搜尋已完成的交易記錄,以及查詢交易詳情; • 自動化後端功能,例如,捕獲授權,以及處理退款等; API Profile 進入商家賬号得到相應的APIProfile,如果是以中文語言檢視,在-使用者資訊-API 通路-中得到,其中裡面申請API時,有兩個選項,第一個是用簽名的方式,第二種是以證書的方式來認證商家身份,當你選擇下載下傳數字證時,可以到www.paypaltech.com/tools/pem2p12.php轉換為.p12檔案,也可以采用OpenSSL的指令完成,一句話搞定,要輸入密碼喔~。這裡的連結有詳細說明www.paypal.com/IntegrationCenter/ic_certificate.html 相應參考資料請參考連接配接www.paypal.com/IntegrationCenter/ic_expresscheckout.html 了解關于Express Checkout的原理; 在此基礎上,你可以通路www.paypal.com/IntegrationCenter/ic_nvp.html 擷取相關測試代碼; 關于PayPal的測試環境你可以通路www.paypal.com/IntegrationCenter/ic_sandbox.html, API Reference https://www.paypal.com/IntegrationCenter/ic_api-reference.html