程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP綜合 >> 解析PayPal支付接口的PHP開發方式

解析PayPal支付接口的PHP開發方式

編輯:PHP綜合

申請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>

可用變量

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支付接口的主要操作步驟。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved