Paypal支付不完全指北
啥都不說,先吐槽
Paypal 真心坑爹,跟國內(nèi)支付完全沒法比,能不接入就不接入吧!?。?/p>
準備工作
重要事情
Paypal下單支付后,需要主動跟paypal確認收款(capture),否則該筆訂單并不是完成狀態(tài)?。。?/p>
賬號
自己前往Paypal develop注冊一個吧,注意區(qū)分沙箱(sandbox)和正式(live)賬號即可。
用沙盒賬號開發(fā),還可以創(chuàng)建多個沙盒的paypal賬號,可以用于沙盒測試支付。
下單方式
跟國內(nèi)的支付寶和微信有區(qū)別,paypal可以直接在客戶端下單。
支持客服端、服務端下單。各有利弊,看具體需求來定咯
- 客服端下單,可以調(diào)起Paypal APP(ios 和 android), 缺點是服務端無法及時知曉下單過程,需要客戶端及時通知
- 服務端或者webhooks服務端下單,只能打開paypal 網(wǎng)頁支付。
無論何種下單,paypal 都沒有采用加密機制,全部都是明文,所以在檢校訂單信息時需要格外注意
客戶端下單
- JavaScript
- ios sdk
- android sdk
客服端直接下單,需要保證客服端接收到的訂單信息時準確的(最好后端加密訂單信息,客戶端解密并檢驗數(shù)據(jù)完整性)
JavaScript
JavaScript直接接入,是通過paypal js直接生成一個iframe用于支付。
其中需要注意的是,paypal生成的按鈕只有幾個基本樣式可選,無法直接自定義樣式(我是沒有找到相關(guā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生成的按鈕隱藏,用自己的按鈕蓋住,然后是設置css屬性pointer-events:none;來屏蔽事件即可。
Ios || android
Ios 和 andorid 的接入方式與JavaScript類似,只要引入相應的SDK,非常簡單的就可以下單。SDK quickstart
服務端下單(推薦)
因為paypal沒有采用加密機制,同時在弱網(wǎng)情況下無法保證客戶端可以及時通知服務端訂單狀態(tài)的改變,選用服務端下單是相對安全的。
建議在下單時,發(fā)送完整的訂單金額信息,paypal會對相關(guān)金額做檢校,如果更方面金額不一致(總價 !== 運費+稅費+商品數(shù)量 * 商品單價+…… ),是不能下單的。同時也可以讓買家確認該筆訂單的明細,用戶體驗和安全性都有提高。
順便吐槽下paypal的沙盒環(huán)境,如果你請求超時,請不要見怪,這不是你的問題,是沙盒環(huán)境太爛。(PS:不知道是不是與服務端語言相關(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"
},
// 價格明細
"breakdown": {
// 商品總價
"item_total": {
"value": "180",
"currency_code": "RMB"
},
// 運費
"shipping": {
"value": "20",
"currency_code": "RMB"
}
// …… 還有稅費之類的
},
// 商品明細
"items": [
{
"name": "goods",
"unit_amount": {
"value": "90",
"currency_code": "RMB"
},
"quantity": 2,// 數(shù)量
"sku": "sku"
}
]
//...地址之類的其他參數(shù)
}
],
"application_context": {
"cancel_url": "",
"return_url": ""
}
}
支付時序圖
再次強調(diào): Paypal下單支付后,需要主動跟paypal確認收款(capture),否則該筆訂單并不是完成狀態(tài)??!
notify
支付回調(diào)可以通過IPN或者webhooks,基本和國內(nèi)支付沒有什么區(qū)別,唯一區(qū)別是paypal通知沒有加密,收到回調(diào)需要服務端主動跟paypal確認信息是否正確
相關(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)文章
JavaScript.The.Good.Parts閱讀筆記(二)作用域&閉包&減緩全局空間污染
塊級作用域: 大多數(shù)使用c語言語法的語言都有塊級作用域,而JavaScript沒有塊級作用域。2010-11-11
js ondocumentready onmouseover onclick onmouseout 樣式
下面都是一些上面的事件觸發(fā)的事先定義的代碼。2010-07-07


