Paypal支付不完全指北
啥都不說(shuō),先吐槽
Paypal 真心坑爹,跟國(guó)內(nèi)支付完全沒(méi)法比,能不接入就不接入吧!??!
準(zhǔn)備工作
重要事情
Paypal下單支付后,需要主動(dòng)跟paypal確認(rèn)收款(capture),否則該筆訂單并不是完成狀態(tài)?。?!
賬號(hào)
自己前往Paypal develop注冊(cè)一個(gè)吧,注意區(qū)分沙箱(sandbox)和正式(live)賬號(hào)即可。
用沙盒賬號(hào)開(kāi)發(fā),還可以創(chuàng)建多個(gè)沙盒的paypal賬號(hào),可以用于沙盒測(cè)試支付。
下單方式
跟國(guó)內(nèi)的支付寶和微信有區(qū)別,paypal可以直接在客戶端下單。
支持客服端、服務(wù)端下單。各有利弊,看具體需求來(lái)定咯
- 客服端下單,可以調(diào)起Paypal APP(ios 和 android), 缺點(diǎn)是服務(wù)端無(wú)法及時(shí)知曉下單過(guò)程,需要客戶端及時(shí)通知
- 服務(wù)端或者webhooks服務(wù)端下單,只能打開(kāi)paypal 網(wǎng)頁(yè)支付。
無(wú)論何種下單,paypal 都沒(méi)有采用加密機(jī)制,全部都是明文,所以在檢校訂單信息時(shí)需要格外注意
客戶端下單
- JavaScript
- ios sdk
- android sdk
客服端直接下單,需要保證客服端接收到的訂單信息時(shí)準(zhǔn)確的(最好后端加密訂單信息,客戶端解密并檢驗(yàn)數(shù)據(jù)完整性)
JavaScript
JavaScript直接接入,是通過(guò)paypal js直接生成一個(gè)iframe用于支付。
其中需要注意的是,paypal生成的按鈕只有幾個(gè)基本樣式可選,無(wú)法直接自定義樣式(我是沒(méi)有找到相關(guān)文檔,不排除可以自定義的可能。如果有麻煩也告訴下我)。
使用方式
// 如果默認(rèn)貨幣不是美元,需要在后面添加貨幣參數(shù) <script src="https://www.paypal.com/sdk/js?client-id=sb"></script>
paypal.Buttons({ createOrder: function(data, actions) { // This function sets up the details of the transaction, including the amount and line item details. return actions.order.create({ purchase_units: [{ amount: { value: '0.01' } }] }); }, onApprove: function(data, actions) {}, onCancel: function(){}, onError: function(){} }).render('#paypal-button-container');
雖然目前無(wú)法自定義按鈕,但是我們可以是paypal生成的按鈕隱藏,用自己的按鈕蓋住,然后是設(shè)置css屬性pointer-events:none;
來(lái)屏蔽事件即可。
Ios || android
Ios 和 andorid 的接入方式與JavaScript類(lèi)似,只要引入相應(yīng)的SDK,非常簡(jiǎn)單的就可以下單。SDK quickstart
服務(wù)端下單(推薦)
因?yàn)閜aypal沒(méi)有采用加密機(jī)制,同時(shí)在弱網(wǎng)情況下無(wú)法保證客戶端可以及時(shí)通知服務(wù)端訂單狀態(tài)的改變,選用服務(wù)端下單是相對(duì)安全的。
建議在下單時(shí),發(fā)送完整的訂單金額信息,paypal會(huì)對(duì)相關(guān)金額做檢校,如果更方面金額不一致(總價(jià) !== 運(yùn)費(fèi)+稅費(fèi)+商品數(shù)量 * 商品單價(jià)+…… ),是不能下單的。同時(shí)也可以讓買(mǎi)家確認(rèn)該筆訂單的明細(xì),用戶體驗(yàn)和安全性都有提高。
順便吐槽下paypal的沙盒環(huán)境,如果你請(qǐng)求超時(shí),請(qǐng)不要見(jiàn)怪,這不是你的問(wèn)題,是沙盒環(huán)境太爛。(PS:不知道是不是與服務(wù)端語(yǔ)言相關(guān),PHP和nodejs對(duì)接paypal,性能差別很大,同一時(shí)間,同一個(gè)沙盒賬號(hào),nodejs請(qǐng)求基本保持在5s以?xún)?nèi),php在15s左右)
基本下單參數(shù)
{ "intent": "CAPTURE", "purchase_units": [ { "reference_id": "order_id", // 總價(jià) "amount": { "value": "200", "currency_code": "RMB" }, // 價(jià)格明細(xì) "breakdown": { // 商品總價(jià) "item_total": { "value": "180", "currency_code": "RMB" }, // 運(yùn)費(fèi) "shipping": { "value": "20", "currency_code": "RMB" } // …… 還有稅費(fèi)之類(lèi)的 }, // 商品明細(xì) "items": [ { "name": "goods", "unit_amount": { "value": "90", "currency_code": "RMB" }, "quantity": 2,// 數(shù)量 "sku": "sku" } ] //...地址之類(lèi)的其他參數(shù) } ], "application_context": { "cancel_url": "", "return_url": "" } }
支付時(shí)序圖
再次強(qiáng)調(diào): Paypal下單支付后,需要主動(dòng)跟paypal確認(rèn)收款(capture),否則該筆訂單并不是完成狀態(tài)?。?/p>
notify
支付回調(diào)可以通過(guò)IPN或者webhooks,基本和國(guó)內(nèi)支付沒(méi)有什么區(qū)別,唯一區(qū)別是paypal通知沒(méi)有加密,收到回調(diào)需要服務(wù)端主動(dòng)跟paypal確認(rèn)信息是否正確
相關(guān)鏈接
PayPal Checkout
PayPal integrate doc
PayPal SDK quickstart
point-events
到此這篇關(guān)于Paypal支付不完全指北的文章就介紹到這了,更多相關(guān)Paypal支付內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Bootstrap 中下拉菜單修改成鼠標(biāo)懸停直接顯示
本文介紹將Bootstrap的二級(jí)菜單由點(diǎn)擊顯示改為鼠標(biāo)懸停顯示的具體實(shí)現(xiàn)方法,希望對(duì)大家有所幫助。2016-04-04JavaScript.The.Good.Parts閱讀筆記(二)作用域&閉包&減緩全局空間污染
塊級(jí)作用域: 大多數(shù)使用c語(yǔ)言語(yǔ)法的語(yǔ)言都有塊級(jí)作用域,而JavaScript沒(méi)有塊級(jí)作用域。2010-11-11嵌入式iframe子頁(yè)面與父頁(yè)面js通信的方法
這篇文章主要介紹了嵌入式iframe子頁(yè)面與父頁(yè)面js通信的方法,實(shí)例分析了嵌入式iframe子頁(yè)面與父頁(yè)面js通信的常用技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-01-01js ondocumentready onmouseover onclick onmouseout 樣式
下面都是一些上面的事件觸發(fā)的事先定義的代碼。2010-07-07javascript實(shí)現(xiàn)刪除前彈出確認(rèn)框
刪除確認(rèn)對(duì)話框的JS代碼,有好幾種寫(xiě)法,有簡(jiǎn)單的,有兼容好的,下面分別說(shuō)幾種方法,可根據(jù)自己需要選用2015-06-06Bootstrap每天必學(xué)之標(biāo)簽頁(yè)(Tab)插件
Bootstrap每天必學(xué)之標(biāo)簽頁(yè)(Tab)插件,通過(guò)這個(gè)插件您可以把內(nèi)容放置在標(biāo)簽頁(yè)或者是膠囊式標(biāo)簽頁(yè)甚至是下拉菜單標(biāo)簽頁(yè)中,感興趣的小伙伴們可以參考一下2016-04-04