|
申請(qǐng)PayPal注冊(cè)網(wǎng)址:https://www.paypal.com/
paypal接口與其它接口有些不同,稍微復(fù)雜一點(diǎn)。 其實(shí)銀行接口也算是一個(gè)站點(diǎn)的插件。
所謂paypal ipn(Instant Payment Notification),就是Paypal開(kāi)發(fā)的一種能主動(dòng)通知第三方賣(mài)家系統(tǒng)交易狀態(tài)的一種機(jī)制。IPN的原理很簡(jiǎn)單,就是當(dāng)產(chǎn)生了一個(gè)交易之后, 交易狀態(tài)發(fā)生變化時(shí),如用戶(hù)已經(jīng)付款、或者退款、撤銷(xiāo)時(shí),Paypal利用常用的HTTP POST方式,將交易的一些變量提交給網(wǎng)站的某個(gè)頁(yè)面(稱(chēng)之為IPN Handler),當(dāng)這個(gè)頁(yè)面接受到請(qǐng)求時(shí)候,將這些數(shù)據(jù)原封不動(dòng)加上一個(gè)指示驗(yàn)證的cmd=_notify-validate,POST回Paypal 的接口地址,如果數(shù)據(jù)正確,那么Paypal返回字符串VERIFIED,否則為INVALID,如果結(jié)果為VERIFIED,那么你的程序就可以使用這 些數(shù)據(jù)進(jìn)行操作。
開(kāi)設(shè)Sandbox帳號(hào)
但代碼的調(diào)試是一件很痛苦的事情,因?yàn)樽鳛榈谌介_(kāi)發(fā)人員,不可能開(kāi)兩個(gè)帳號(hào),每次測(cè)試還要之間交易一些錢(qián),所以Paypal專(zhuān)門(mén)開(kāi)發(fā)了Sandbox給 開(kāi)發(fā)人員進(jìn)行開(kāi)發(fā),首先到https://developer.paypal.com/注冊(cè)一個(gè)開(kāi)發(fā)帳號(hào),好了之后再進(jìn)入Sandbox建立測(cè)試用的Paypal虛擬帳號(hào)(至少應(yīng)該建立一個(gè)Business的和一個(gè)Personal的),這 種賬號(hào)注冊(cè)方法和Paypal的流程一樣,信息可以是假的,包括銀行帳號(hào)、信用卡(其實(shí)Paypal Sandbox會(huì)自動(dòng)生成一些隨機(jī)的號(hào)碼)。接下來(lái)需要激活Paypal Sandbox的虛擬帳號(hào),注意,這里不管你在Paypal Sanbox注冊(cè)時(shí)填什么郵件地址,有任何發(fā)送到虛擬帳號(hào)所填郵箱的郵件都存會(huì)在開(kāi)發(fā)帳號(hào)的管理界面中的Email頁(yè)(導(dǎo)航欄上有)中。登錄 Sandbox的虛擬Paypal環(huán)境,還需要驗(yàn)證虛擬帳號(hào)的銀行,這里可以隨便填,然后通過(guò)Add Funds來(lái)給賬戶(hù)充值(想填多少填多少 920-203 920-533 )。然后,還需要激活I(lǐng)PN的選項(xiàng),在Business的那個(gè)賬戶(hù)的Profile設(shè)置頁(yè)面中,點(diǎn)擊,然后點(diǎn)擊Edit按鈕,打開(kāi)IPN,這里如果你使用 的是固定的IPN Handle,可以直接將地址填入。
接下來(lái),我們測(cè)試的時(shí)候,應(yīng)該將Paypal接口的地址設(shè)置為https://www.sandbox.paypal.com/cgi-bin/webscr
基本的流程
當(dāng)客戶(hù)向您付款時(shí),PayPal將向位于指定 URL (type=”hidden” name=”notify_url” value=” “)的服務(wù)器發(fā)送一個(gè)通知。此通知中將包括您的客戶(hù)的所有付款信息(例如,客戶(hù)名稱(chēng)、金額),以及一段加密代碼。當(dāng)服務(wù)器收到通知時(shí),它隨后會(huì)將該信息 (包括加密代碼)發(fā)送回安全的PayPal URL。PayPal將通過(guò)檢查加密字符串對(duì)交易進(jìn)行身份驗(yàn)證。這種將 IPN 數(shù)據(jù)傳回PayPal的操作防止了“欺騙”,因此您可以確保 IPN 來(lái)自PayPal。在進(jìn)行驗(yàn)證時(shí),PayPal會(huì)將其合法性的確認(rèn)信息發(fā)送回您的服務(wù)器。
提示:要啟用即時(shí)付款通知,您將需要輸入一個(gè) URL,通過(guò)它您可以接收到來(lái)自您的用戶(hù)信息的通知。
啟用了即時(shí)付款通知后,每次當(dāng)您接收付款時(shí)您的服務(wù)器都會(huì)收到一個(gè)通知,此通知將以隱藏的“FORM POST”的方式發(fā)送到指定的 URL,并將包括所有付款信息。此頁(yè)面的底部列出了通知的 FORM 變量。
每次收到來(lái)自PayPal的 IPN 時(shí),您必須在實(shí)施訂單之前完成如下所述的通知確認(rèn)過(guò)程。確認(rèn)列出的信息將可確保交易合法。
通知確認(rèn)IPN
為了確保付款已進(jìn)入您的PayPal賬戶(hù),您必須驗(yàn)證用作“receiver_email”的電子郵件地址是否已在您的PayPal賬戶(hù)中注冊(cè)并得到確認(rèn)。
服務(wù)器收到即時(shí)付款通知后,您將需要通過(guò)構(gòu)建一個(gè)發(fā)送到PayPal的 HTTP POST 對(duì)其進(jìn)行確認(rèn)。您的 POST 應(yīng)發(fā)送到https://www.paypal.com/cgi-bin/webscr
您必須完全按照收到表單變量時(shí)的原樣發(fā)送所有收到的表單變量。您還需要將一個(gè)值為“_notify-validate”的名為“cmd”變量(例如,cmd=_notify-validate)附加到 POST 字符串。
PayPal將回復(fù)該 POST,并在回復(fù)的正文中包含一個(gè)單詞“VERIFIED”或“INVALID”。當(dāng)您收到 VERIFIED 回復(fù)時(shí),您需要在實(shí)施訂單之前執(zhí)行若干檢查:
確認(rèn)“payment_status”為“Completed”,因?yàn)橄到y(tǒng)也會(huì)為其他結(jié)果(如“Pending”或“Failed”)發(fā)送 IPN。
檢查“txn_id”是否未重復(fù),以防止欺詐者重復(fù)使用舊的已完成的交易。
驗(yàn)證“receiver_email”是已在您的PayPal賬戶(hù)中注冊(cè)的電子郵件地址,以防止將付款發(fā)送到欺詐者的賬戶(hù) 。
檢查其他交易詳情(如物品號(hào)和價(jià)格),以確認(rèn)價(jià)格未改變完成了以上檢查后,您可以使用 IPN 數(shù)據(jù)更新您的數(shù)據(jù)庫(kù),并處理購(gòu)物。
如果收到“無(wú)效”通知,則應(yīng)將其視為可疑通知,并應(yīng)對(duì)其進(jìn)行調(diào)查。
主要參數(shù):
向PayPal提交粘貼代碼時(shí),應(yīng)包括以下 4 個(gè)隱藏變量及一張圖片,這就是說(shuō),您粘貼到PayPal的最短必需代碼應(yīng)如下:
<form action="https://www.paypal.com/row/cgi-bin/webscr" method="post">
<input type="hidden" name="cmd" value="_xclick"> // "_xclick" 立即購(gòu)買(mǎi)
<input type="hidden" name="business" value="you@youremail.com">
//PayPal賬戶(hù)上的電子郵件地址
<input type="hidden" name="item_name" value="Item Name">
//物品名稱(chēng)(或購(gòu)物車(chē)名稱(chēng))
<input type="hidden" name="currency_code" value="USD">
//定義幣種以標(biāo)示貨幣變量 值可以為 "USD"、"EUR"、"GBP"、"CAD"、"JPY"。
<input type="hidden" name="amount" value="0.00">
//物品的價(jià)格(購(gòu)物車(chē)中所有物品的總價(jià)格,因?yàn)槭莀Xclick模式)
<input type="image" src="http://www.paypal.com/zh_XC/i/btn/x-click-but01.
gif" name="submit" alt="請(qǐng)使用PayPal付款!">
</form>
可用變量
business 您的PayPal賬戶(hù)上的電子郵件地址
quantity 物品數(shù)量。大于 1 時(shí),會(huì)與金額相乘
item_name 物品名稱(chēng)(或購(gòu)物車(chē)名稱(chēng))。必須是字母數(shù)字字符,最多為 127 個(gè)字符
item_number 用于跟蹤付款的可選傳遞變量。必須是字母數(shù)字字符,最多為 127 個(gè)字符
amount 物品的價(jià)格(購(gòu)物車(chē)中所有物品的總價(jià)格)
shipping 該物品的運(yùn)送成本
shipping2 每增加一件物品所需的運(yùn)送成本
handling 手續(xù)費(fèi)
tax 基于交易的稅額。如果使用該變量,傳遞值將覆蓋所有用戶(hù)信息稅收設(shè)置(不管買(mǎi)家所在位置)。
no_shipping 送貨地址。如果設(shè)為 "1",則不會(huì)要求您的客戶(hù)提供送貨地址。該變量為可選項(xiàng);如果省略或設(shè)為 "0",將提示您的客戶(hù)輸入送貨地址
cn 可選標(biāo)簽,會(huì)在提示欄上顯示(最多 40 個(gè)字符)
no_note 為付款加入提示。如果設(shè)為 "1",則不會(huì)提示您的客戶(hù)輸入提示。該變量為可選項(xiàng);如果省略或設(shè)為 "0",將提示您的客戶(hù)輸入提示。
on0 第一選項(xiàng)欄名稱(chēng)。最多 64 個(gè)字符
os0 第一組選項(xiàng)值。最多 200 個(gè)字符。"on0" 必須定義,以便識(shí)別 "os0"。
on1 第二選項(xiàng)欄名稱(chēng)。最多 64 個(gè)字符
os1 第二組選項(xiàng)值。最多 200 個(gè)字符。"on1" 必須定義,以便識(shí)別 "os1"。
custom 決不會(huì)向您的客戶(hù)顯示的可選轉(zhuǎn)遞變量。可用于跟蹤存貨
invoice 決不會(huì)向您的客戶(hù)顯示的可選轉(zhuǎn)遞變量。可用于跟蹤賬單號(hào)
notify_url 僅與 IPN 一起使用。發(fā)送 IPN Form Post 的互聯(lián)網(wǎng) URL
return 您的客戶(hù)完成付款后將返回的互聯(lián)網(wǎng) URL
cancel_return 您的客戶(hù)取消付款后將返回的互聯(lián)網(wǎng) URL
image_url 您要用作圖標(biāo)的圖片的互聯(lián)網(wǎng) URL,圖片大小為 150 X 50 像素
cs 設(shè)置您的付款頁(yè)面的背景色。如果設(shè)為 "1",背景色將為黑色。該變量為可選項(xiàng);如果省略或設(shè)為 "0",背景色將為白色
擴(kuò)展變量
PayPal 允許您粘貼擴(kuò)展變量,條件是將改變以下 "cmd" 值:
到:
通過(guò)上述 “cmd” 值修改,您還可使用以下變量:
擴(kuò)展變量
email 客戶(hù)的電子郵件地址
first_name 客戶(hù)的名。必須是字母數(shù)字字符,最多為 32 個(gè)字符
last_name 客戶(hù)的姓。必須是字母數(shù)字字符,最多為 64 個(gè)字符
address1 客戶(hù)地址所在國(guó)家或地區(qū)。必須是字母數(shù)字字符,最多為 100 個(gè)字符
address2 客戶(hù)地址第二行。必須是字母數(shù)字字符,最多為 100 個(gè)字符
city 客戶(hù)地址所在城市。必須是字母數(shù)字字符,最多為 100 個(gè)字符
state 客戶(hù)地址所在州。必須是正式的 2 個(gè)字母縮寫(xiě)
zip 客戶(hù)地址的郵政編碼
night_phone_a 客戶(hù)夜間聯(lián)系電話(huà)號(hào)碼的區(qū)號(hào)
night_phone_b 客戶(hù)夜間聯(lián)系電話(huà)號(hào)碼前三位
day_phone_a 客戶(hù)白天聯(lián)系電話(huà)號(hào)碼的區(qū)號(hào)
day_phone_b 客戶(hù)白天聯(lián)系電話(huà)號(hào)碼前三位
提示:若要更改”用戶(hù)信息”中的默認(rèn)運(yùn)費(fèi)和手續(xù)費(fèi)設(shè)置,請(qǐng)轉(zhuǎn)至您的用戶(hù)信息,編輯您的運(yùn)費(fèi)計(jì)算,然后點(diǎn)擊”允許采用基于交易的運(yùn)費(fèi)”復(fù)選框。
將單個(gè)物品傳遞給PayPal
如果您的第三方購(gòu)物車(chē)可設(shè)置成向PayPal傳遞單個(gè)物品,有關(guān)物品的信息將加入買(mǎi)家和賣(mài)家的記錄日志和系統(tǒng)通知中。要加入該物品的信息,您需要將 HTML 格式元素粘貼至PayPal購(gòu)物車(chē)流程的新版本。該過(guò)程與 #1 節(jié)"將總購(gòu)物車(chē)數(shù)量傳遞給PayPal"描述的非常相似,不同之處在于:
將 "cmd" 變量設(shè)置到 "_cart"
更換必要的 HTML 行
與
添加稱(chēng)為 “upload” 的新變量
在 <表格> 和 標(biāo)簽之間新增以下行:
定義物品明細(xì)
對(duì)于以下各特定物品參數(shù),定義與通過(guò)您的合作商購(gòu)物車(chē)購(gòu)買(mǎi)的各物品對(duì)應(yīng)的一組新值。將 “_x” 附加到變量名稱(chēng),其中 x 是物品號(hào)碼,從 1 開(kāi)始,每加入一物品增加一。
item_name_x (物品 #x 需要)購(gòu)物車(chē)中物品 #x 的名稱(chēng)。必須是字母數(shù)字字符,最多為 127 個(gè)字符
item_number_x 與購(gòu)物車(chē)中物品 #x 關(guān)聯(lián)的可選傳遞變量。必須是字母數(shù)字字符,最多為 127 個(gè)字符
amount_x (物品 #x 需要)物品 #x 的價(jià)格
shipping_x 運(yùn)送物品 #x 的第一件(數(shù)量 1)的成本
shipping2_x 每增加一件運(yùn)送物品 #x(數(shù)量 2 或更多)所需的運(yùn)送成本
handling_x 物品 #x 的處理成本
on0_x 物品 #x 的第一選項(xiàng)欄名稱(chēng)。最多 64 個(gè)字符
os0_x 物品 #x 的第一組選項(xiàng)值。最多 200 個(gè)字符。”on0_x” 必須定義,以便識(shí)別 “os0_x”。
on1_x 物品 #x 的第二選項(xiàng)欄名稱(chēng)。最多 64 個(gè)字符
os1_x 物品 #x 的第二組選項(xiàng)值。最多 200 個(gè)字符。”on1_x” 必須定義,以便識(shí)別 “os1_x”。
為購(gòu)物車(chē)中每件物品重復(fù)此設(shè)定
為您的買(mǎi)家購(gòu)物車(chē)中的各物品加入以上表格中的一組必需的變量和任何選項(xiàng)變量。購(gòu)物車(chē)中的第一物品必須用以 “_1″ 結(jié)束的參數(shù)定義,如 “item_name_1″、”amount_1″ 等。同樣,第二物品應(yīng)用變量 “item_name_2″、”amount_2″ 等命名。提示:”_x” 值必須以一為單位按序遞增,以便識(shí)別。如果從 item #1 跳到 item #3 而不定義 item #2,則第三個(gè)物品會(huì)被忽略。
要指定幣種:所有貨幣變量(金額、運(yùn)費(fèi)、運(yùn)費(fèi) 2、手續(xù)費(fèi)、稅款)將以粘貼在付款上的 “currency_code” 變量指定的幣種顯示。因?yàn)槠洳皇请S物品不同的,無(wú)需向變量名稱(chēng)附加 “_x”。如果沒(méi)有粘貼 “currency_code” 變量,我們將假定所有貨幣變量值為美元。
以上就是本文所介紹的運(yùn)用php開(kāi)發(fā)PayPal支付接口的主要操作步驟。
php技術(shù):解析PayPal支付接口的PHP開(kāi)發(fā)方式,轉(zhuǎn)載需保留來(lái)源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。