色尼玛亚洲综合影院,亚洲3atv精品一区二区三区,麻豆freexxxx性91精品,欧美在线91

解析PayPal支付接口的PHP開(kāi)發(fā)方式

申請(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)系我們修改或刪除,多謝。

主站蜘蛛池模板: 黎城县| 彭泽县| 乌什县| 固安县| 图片| 湖口县| 清远市| 南皮县| 濮阳市| 新干县| 奉化市| 汉阴县| 肇东市| 浏阳市| 镇赉县| 繁峙县| 英超| 迁西县| 尼勒克县| 永靖县| 中江县| 青阳县| 冕宁县| 铁岭县| 颍上县| 康乐县| 深泽县| 浙江省| 嵊泗县| 怀仁县| 抚宁县| 临沧市| 沽源县| 永济市| 沙湾县| 腾冲县| 邻水| 若羌县| 墨竹工卡县| 高雄县| 苏尼特左旗|