Paypal IPN介面開發小結

來源:互聯網
上載者:User
Paypal IPN介面開發小結2007-01-30 – 18:Jan

最近終於搞定了該死的Paypal ipn,特地在此留下點東西備忘。
所以paypal ipn(Instant Payment Notification),就是Paypal開發的一種能主動通知第三方賣家系統交易狀態的一種機制。IPN的原理很簡單,就是當產生了一個交易之後, 交易狀態發生變化時,如使用者已經付款、或者退款、撤銷時,Paypal利用常用的HTTP POST方式,將交易的一些變數提交給網站的某個頁面(稱之為IPN Handler),當這個頁面接受到請求時候,將這些資料原封不動加上一個指示驗證的cmd=_notify-validate,POST回Paypal 的介面地址,如果資料正確,那麼Paypal返回字串VERIFIED,否則為INVALID,如果結果為VERIFIED,那麼你的程式就可以使用這 些資料進行操作。
但代碼的調試是一件很痛苦的事情,因為作為第三方開發人員,不可能開兩個帳號,每次測試還要之間交易一些錢,所以Paypal專門開發了Sandbox給 開發人員進行開發,首先到https://developer.paypal.com/ 註冊一個開發帳號,好了之後再進入Sandbox建立測試用的Paypal虛擬帳號(至少應該建立一個Business的和一個Personal的),這 種帳號註冊方法和Paypal的流程一樣,資訊可以是假的,包括銀行帳號、信用卡(其實Paypal Sandbox會自動產生一些隨機的號碼)。接下來需要啟用Paypal Sandbox的虛擬帳號,注意,這裡不管你在Paypal Sanbox註冊時填什麼郵件地址,有任何發送到虛擬帳號所填郵箱的郵件都存會在開發帳號的管理介面中的Email頁(導覽列上有)中。登入 Sandbox的虛擬Paypal環境,還需要驗證虛擬帳號的銀行,這裡可以隨便填,然後通過Add Funds來給賬戶儲值(想填多少填多少)。然後,還需要啟用IPN的選項,在Business的那個賬戶的Profile設定頁面中,點擊,然後點擊 Edit按鈕,開啟IPN,這裡如果你使用的是固定的IPN Handle,可以直接將地址填入。
接下來,我們測試的時候,應該將Paypal介面的地址設定為https://www.sandbox.paypal.com/cgi-bin/webscr
最後基本的流程為:

使用者在我們的網站上選擇商品、放入購物車,然後檢查準備支付
網站根據購物車中的商品,產生Paypal的支付表單(也是提交到上面IPN用的Paypal介面地址),包含了此次交易的一些資訊(下次會專門找機會解釋一下)。並在自己的資料庫中產生一張訂單記錄。
Paypal在Session中記錄下這些交易資訊
使用者用Paypal賬戶登入Paypal(Sandbox用Sandbox的虛擬帳號),複查明細,點擊Pay按鈕
Paypal進行交易處理,如果我們的Paypal收款帳號在接受帳款上沒有什麼問題(沒有特別的需要在介面上“Accept”的地方),交易完成,那麼Paypal會發送一個IPN,並發送提示郵件。
我們IPN Handler接受到資訊,首先向Paypal進行校正,如果資訊正確,然後根據資訊和自己資料庫中進行比對,如果無誤,可以將支付資訊儲存,並修改訂單狀態。
然後Paypal會顯示一個介面表示交易完成,此時如果使用者點擊“Return”按鈕,Paypal會將使用者送回我們網站指定地點。
我們網站迎接使用者回來,向使用者表示感謝,並進行提醒,給出訂單號等等。

整個流程基本如下,不過其中有很多要注意的地方:

我們看到了,介面地址是https開頭的,也就是要求使用SSL進行串連,其實Paypal Sandbox可以使用http,但是最後實際的Paypal介面,不支援http協議,所以如果你用PHP寫IPN Handler指令碼的話,在驗證資訊的代碼部分,如果簡簡單單使用fopen、HTTP_Request之類的工具是沒用的,PHP的socks庫不支援 SSL,應該使用curl,有兩種方法,一個是使用PHP擴充中的libcurl,Paypal官方發布的SDK中便是使用的這個方法,但Paypal的 SDK非常複雜,如果想自己寫,可以使用Snoopy,一個簡單實用的PHP請求庫(它自己說是類比了瀏覽器的行為),而它使用的是Curl的可執行文 件,通過管道獲得結果,而非php的libcurl,所以自己cURL的首頁上下載一個支援SSL的編譯版本,可能還需要安裝OpenSSL,不過對於 Linux系統,可能應該會都帶。
在支付表單中,可以自己設定notify_url欄位,來指定此次交易的資訊應該發送到哪個地方,這樣就可以覆蓋在Profile中我們的設定,另外,這個欄位要進行urlencode。
我們得到的IPN資訊中,status對應的便是交易狀態,如Complete表示完成,首字母大寫,而驗證結果則是VERIFIEY或者INVALID,全部大寫,具體的內容,可以查看Paypal官方的文檔訂單管理整合指南。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.