解析PayPal支付介面的PHP開發方式

來源:互聯網
上載者:User

申請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="you@youremail.com">
//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>

可用變數

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" 值:

到:

通過上述 “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 行

添加稱為 “upload” 的新變數

在 <表格> 和 標籤之間新增以下行:

定義物品明細

對於以下各特定物品參數,定義與通過您的合作商購物車購買的各物品對應的一組新值。將 “_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” 變數,我們將假定所有貨幣變數值為美元。

以上就是本文所介紹的運用PHP開發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.