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