之前由于項目需要胜嗓,我所負責的產(chǎn)品有接入支付寶,今天抽出時間整理了出了與支付寶對接的流程或粮。文章大部分內(nèi)容都是直接引用的螞蟻金服開放平臺上的開發(fā)文檔幽歼,我只是做了一些整理朵锣。如果有興趣,可以點擊下面的網(wǎng)址閱讀詳細的開發(fā)文檔甸私。
(內(nèi)容來源:https://openhome.alipay.com/developmentDocument.htm)
1诚些、想要接入支付寶,首先你必須滿足以下準入條件:
1.1皇型、必需是實名認證用戶诬烹;
1.2、企業(yè)或個體商戶申請弃鸦;
1.3绞吁、需提供真實有效的營業(yè)執(zhí)照,且支付寶賬戶名稱需與營業(yè)執(zhí)照主體一致寡键;
1.4掀泳、網(wǎng)站必須通過ICP備案;
2西轩、計費模式:
2.1员舵、費率按單筆計算;一般行業(yè)費率:0.6%藕畔;
2.2马僻、特殊行業(yè)費率:1.2%,特殊行業(yè)范圍包括:手機注服、通訊設(shè)備銷售韭邓;家用電器;數(shù)碼產(chǎn)品及配件溶弟;休閑游戲女淑;網(wǎng)絡(luò)游戲點卡、渠道代理辜御;游戲系統(tǒng)商鸭你;網(wǎng)游周邊服務(wù)、交易平臺擒权;網(wǎng)游運營商(含網(wǎng)頁游戲)袱巨。
3、使用螞蟻金服開放平臺服務(wù)端SDK快速接入手機網(wǎng)站支付產(chǎn)品碳抄,完成與支付寶對接:
3.1愉老、創(chuàng)建應(yīng)用并獲取APPID
登錄螞蟻金服開放平臺(open.alipay.com),登記個人應(yīng)用后剖效,審核通過將會得到應(yīng)用的唯一標識(APPID)嫉入。
3.2、配置密鑰
開發(fā)者調(diào)用接口前需要先生成RSA密鑰贱鄙,RSA密鑰包含應(yīng)用私鑰(APP_PRIVATE_KEY)劝贸、應(yīng)用公鑰(APP_PUBLIC_KEY)。
詳情見:https://doc.open.alipay.com/docs/doc.htm逗宁?treeId=291&articleId=105971&docType=1
3.3映九、搭建和配置開發(fā)環(huán)境
3.3.1、下載服務(wù)器端SDK
下載地址:https://doc.open.alipay.com/doc2/detail?treeId=54&articleId=103419&docType=1
3.3.2瞎颗、接口調(diào)用配置
在使用SDK調(diào)用具體API前件甥,進行初始化,代碼如下:
3.4哼拔、調(diào)用接口
3.4.1引有、手機網(wǎng)站支付產(chǎn)品包含兩類API:
頁面跳轉(zhuǎn)類:需要從前端頁面以Form表單的形式發(fā)起請求,瀏覽器會自動跳轉(zhuǎn)至支付寶的相關(guān)頁面(一般是收銀臺或簽約頁面)倦逐,用戶在該頁面完成相關(guān)業(yè)務(wù)操作后再回跳到商戶指定頁面譬正。例如本產(chǎn)品中的手機網(wǎng)站支付接口alipay.trade.wap.pay。
系統(tǒng)調(diào)用類:直接從服務(wù)端發(fā)起HTTP請求,支付寶會同步返回請求結(jié)果曾我。例如本產(chǎn)品中的交易查詢等配套API粉怕。
3.4.2、接口調(diào)用流程:
如上圖所示:
第一步:用戶在商戶的H5網(wǎng)站下單支付后抒巢,商戶系統(tǒng)按照手機網(wǎng)站支付接口alipay.trade.wap.payAPI的參數(shù)規(guī)范生成訂單數(shù)據(jù)贫贝。
第二步:然后在前端頁面通過Form表單的形式請求到支付寶。此時支付寶會自動將頁面跳轉(zhuǎn)至支付寶H5收銀臺頁面蛉谜,如果用戶手機上安裝了支付寶APP稚晚,則自動喚起支付寶APP。
第三步:
用戶在支付寶APP或H5收銀臺完成支付后型诚,會根據(jù)商戶在手機網(wǎng)站支付API中傳入的前臺回跳地址return_url自動跳轉(zhuǎn)回商戶頁面客燕,同時在URL請求中以Query String的形式附帶上支付結(jié)果參數(shù),詳細回跳參數(shù)見“手機網(wǎng)站支付接口alipay.trade.wap.pay”前臺回跳參數(shù)狰贯。
支付寶還會根據(jù)原始支付API中傳入的異步通知地址notify_url幸逆,通過POST請求的形式將支付結(jié)果作為參數(shù)通知到商戶系統(tǒng),詳情見支付結(jié)果異步通知暮现。
除了正向支付流程外还绘,支付寶也提供交易查詢、關(guān)閉栖袋、退款拍顷、退款查詢以及對賬等配套API。
特別注意:
由于前臺回跳的不可靠性塘幅,前臺回跳只能作為商戶支付結(jié)果頁的入口昔案,最終支付結(jié)果必須以異步通知或查詢接口返回為準,不能依賴前臺回跳电媳。商戶系統(tǒng)接收到異步通知以后踏揣,必須通過驗簽(驗證通知中的sign參數(shù))來確保支付通知是由支付寶發(fā)送的。
4匾乓、請求支付接口說明:
詳情請看:《手機網(wǎng)站支付API列表》
5捞稿、手機網(wǎng)站支付結(jié)果異步通知:
5.1、服務(wù)器異步通知頁面特性
必須保證服務(wù)器異步通知頁面(notify_url)上無任何字符拼缝,如空格娱局、HTML標簽、開發(fā)系統(tǒng)自帶拋出的異常提示信息等咧七;
支付寶是用POST方式發(fā)送通知信息衰齐,因此該頁面中獲取參數(shù)的方式,如:request.Form(“out_trade_no”)继阻、$_POST[‘out_trade_no’]耻涛;
支付寶主動發(fā)起通知废酷,該方式才會被啟用;
只有在支付寶的交易管理中存在該筆交易抹缕,且發(fā)生了交易狀態(tài)的改變锦积,支付寶才會通過該方式發(fā)起服務(wù)器通知(即時到賬交易狀態(tài)為“等待買家付款”的狀態(tài)默認是不會發(fā)送通知的);
服務(wù)器間的交互歉嗓,不像頁面跳轉(zhuǎn)同步通知可以在頁面上顯示出來,這種交互方式是不可見的背蟆;
第一次交易狀態(tài)改變(即時到賬中此時交易狀態(tài)是交易完成)時鉴分,不僅會返回同步處理結(jié)果,而且服務(wù)器異步通知頁面也會收到支付寶發(fā)來的處理結(jié)果通知带膀;
程序執(zhí)行完后必須打印輸出“success”(不包含引號)志珍。如果商戶反饋給支付寶的字符不是success這7個字符,支付寶服務(wù)器會不斷重發(fā)通知垛叨,直到超過24小時22分鐘伦糯。一般情況下,25小時以內(nèi)完成8次通知(通知的間隔頻率一般是:4m,10m,10m,1h,2h,6h,15h)嗽元;
程序執(zhí)行完成后敛纲,該頁面不能執(zhí)行頁面跳轉(zhuǎn)。如果執(zhí)行頁面跳轉(zhuǎn)剂癌,支付寶會收不到success字符淤翔,會被支付寶服務(wù)器判定為該頁面程序運行出現(xiàn)異常,而重發(fā)處理結(jié)果通知佩谷;cookies旁壮、session等在此頁面會失效,即無法獲取這些數(shù)據(jù)谐檀;
該方式的調(diào)試與運行必須在服務(wù)器上抡谐,即互聯(lián)網(wǎng)上能訪問;
該方式的作用主要防止訂單丟失桐猬,即頁面跳轉(zhuǎn)同步通知沒有處理訂單更新麦撵,它則去處理;
當商戶收到服務(wù)器異步通知并打印出success時溃肪,服務(wù)器異步通知參數(shù)notify_id才會失效厦坛。也就是說在支付寶發(fā)送同一條異步通知時(包含商戶并未成功打印出success導致支付寶重發(fā)數(shù)次通知),服務(wù)器異步通知參數(shù)notify_id是不變的乍惊。
5.2杜秸、服務(wù)器異步通知頁面特性
某商戶設(shè)置的通知地址為https://api.xx.com/receive_notify.htm,對應(yīng)接收到通知的示例如下:
https://api.xx.com/receive_notify.htm?total_amount=2.00&buyer_id=2088102116773037&body=大樂透2.1&trade_no=2016071921001003030200089909&refund_fee=0.00?ify_time=2016-07-1914:10:49&subject=大樂透2.1&sign_type=RSA2&charset=utf-8?ify_type=trade_status_sync&out_trade_no=0719141034-6418&gmt_close=2016-07-19 14:10:46&gmt_payment=2016-07-19 14:10:47&trade_status=TRADE_SUCCESS&version=1.0&sign=kPbQIjX+xQc8F0/A6/AocELIjhhZnGbcBN6G4MM/HmfWL4ZiHM6fWl5NQhzXJusaklZ1LFuMo+lHQUELAYeugH8LYFvxnNajOvZhuxNFbN2LhF0l/KL8ANtj8oyPM4NN7Qft2kWJTDJUpQOzCzNnV9hDxh5AaT9FPqRS6ZKxnzM=&gmt_create=2016-07-19 14:10:44&app_id=2015102700040153&seller_id=2088102119685838?ify_id=4a91b7a78a503640467525113fb7d8bg8e
第一步:在通知返回參數(shù)列表中润绎,除去sign撬碟、sign_type兩個參數(shù)外诞挨,凡是通知返回回來的參數(shù)皆是待驗簽的參數(shù)。
第二步:將剩下參數(shù)進行url_decode, 然后進行字典排序呢蛤,組成字符串惶傻,得到待簽名字符串:
body=大樂透2.1&buyer_id=2088102116773037&charset=utf-8&gmt_close=2016-07-1914:10:46&gmt_payment=2016-07-1914:10:47?ify_time=2016-07-1914:10:49?ify_type=trade_status_sync&out_trade_no=0719141034-6418&refund_fee=0.00&subject=大樂透2.1&total_amount=2.00&trade_no=2016071921001003030200089909&trade_status=TRADE_SUCCESS&version=1.0
第三步:將簽名參數(shù)(sign)使用base64解碼為字節(jié)碼串。
第四步:使用RSA的驗簽方法其障,通過簽名字符串银室、簽名參數(shù)(經(jīng)過base64解碼)及支付寶公鑰驗證簽名。
第五步:需要嚴格按照如下描述校驗通知數(shù)據(jù)的正確性励翼。
1蜈敢、商戶需要驗證該通知數(shù)據(jù)中的out_trade_no是否為商戶系統(tǒng)中創(chuàng)建的訂單號,2汽抚、判斷total_amount是否確實為該訂單的實際金額(即商戶訂單創(chuàng)建時的金額)抓狭,3、校驗通知中的seller_id(或者seller_email) 是否為out_trade_no這筆單據(jù)的對應(yīng)的操作方(有的時候造烁,一個商戶可能有多個seller_id/seller_email)否过,4、驗證app_id是否為該商戶本身惭蟋。上述1苗桂、2、3告组、4有任何一個驗證不通過誉察,則表明本次通知是異常通知,務(wù)必忽略惹谐。在上述驗證通過后商戶必須根據(jù)支付寶不同類型的業(yè)務(wù)通知持偏,正確的進行不同的業(yè)務(wù)處理,并且過濾重復的通知結(jié)果數(shù)據(jù)氨肌。在支付寶的業(yè)務(wù)通知中鸿秆,只有交易通知狀態(tài)為TRADE_SUCCESS或TRADE_FINISHED時,支付寶才會認定為買家付款成功怎囚。
以上就是關(guān)于手機頁面接入支付寶的流程總結(jié)卿叽。