【转载】第三方支付业务如何测试
現(xiàn)在有不少測試朋友做的項(xiàng)目中,可能也會涉及到支付相關(guān)的功能。比如:做商城的,做游戲的以及其他在線交易的網(wǎng)站、APP等。如果支付出了問題,或者用戶拿少的錢通過篡改請求數(shù)據(jù)購買大金額的商品,如果是實(shí)物的話,發(fā)貨前還有可能被發(fā)現(xiàn)。如果是虛擬商品話費(fèi)、游戲幣等就有可能造成損失。
所以,不管是實(shí)物也好,虛擬商品也好,涉及到支付功能時,大家在測試的過程中一定要重視,否則,會造成很大損失。之前可能大家也都看到過或者聽過一個bug損失4.6億美金的慘痛教訓(xùn)或者身邊也有發(fā)生過其他因?yàn)橹Ц豆δ艿腷ug導(dǎo)致直接損失的案例。
給大家舉個真實(shí)的案例:比如使用支付寶購買虛擬商品,往支付寶跳轉(zhuǎn)時,篡改了小的金額,結(jié)果購買虛擬商品成功了。(原本10元的商品,0.01元就搞定了)。多么可怕的一個bug啊,當(dāng)然這個問題可能對于一個做過支付有過經(jīng)驗(yàn)的測試朋友來說,可能會想:哎呀,這個問題都發(fā)現(xiàn)不了,還做什么測試?是的,問題是很簡單,對于一個剛?cè)肼殘龅臏y試朋友或者沒有支付相關(guān)經(jīng)驗(yàn)的測試朋友來說,很有可能會忽略。
那么,問題來了,對于支付模塊的相關(guān)測試,我們應(yīng)該如何進(jìn)行呢?比如,針對游戲來說,使用第三方支付往游戲充值游戲幣功能,看起來是不是很簡單,大家主要思考下以下內(nèi)容:
1、支付都是與第三方支付(支付寶、微信、財(cái)付通、QQ錢包、短信支付等)進(jìn)行對接,那么,是否了解了第三方接口有哪些?是否都能清楚我們的產(chǎn)品與第三方是如何交互的?是否能畫出流程圖?
2、異常場景有哪些?
3、有哪些風(fēng)險,如何規(guī)避?
第三方支付的流程,與商戶的對接方式基本相似,大同小異。(題外推薦:如下流程圖使用的chrome插件:Gliffy,個人感覺比較好用。)
支付流程:
退款流程:
查詢流程:
先看下流程圖,是否對流程圖有些了解,不僅僅是做支付功能相關(guān)測試才去搞清楚其中的流程,做其他的測試一樣也要搞清楚流程,只有搞清楚流程,才能更好的評估其中的風(fēng)險,才能有利于測試用例的設(shè)計(jì)。當(dāng)然流程圖中只是提到了商戶與第三方是如何交互的,同樣商戶內(nèi)部處理的流程也要有所了解及數(shù)據(jù)怎么存儲的,涉及到哪些DB也要清楚。
流程清楚之后,我們再來看看其中會涉及到哪些接口?這個支付流程圖里面就涉及到了第三方支付接口:
· 下單接口:商戶提交下單請求到第三方支付接口,第三方支付收單成功后返回下單成功結(jié)果給到商戶系統(tǒng)。(下單接口的最終處理結(jié)果分為下單成功和下單失敗,若未收到明確結(jié)果可調(diào)用單筆訂單查詢接口查詢結(jié)果。)
·支付接口:調(diào)用該接口時指定支付參數(shù),完成買家賬戶向商戶賬戶的支付,采用頁面跳轉(zhuǎn)交互模式和后臺通知交互模式。(結(jié)果分為兩路返回:一路為前臺在return_url頁面跳轉(zhuǎn)顯示支付結(jié)果;一路為后臺在notify_url收到支付結(jié)果通知后進(jìn)行響應(yīng)。)
·退款接口:調(diào)用第三方支付的支付請求接口返回付款成功后,在需要做退款處理時調(diào)用退款請求接口發(fā)起退款處理。(退款接口的最終處理結(jié)果分為退款成功和退款失敗,若未收到明確結(jié)果可調(diào)用退款查詢接口查詢結(jié)果。)
·單筆訂單查詢接口:根據(jù)訂單號查詢單筆訂單信息和狀態(tài)。
·退款訂單查詢接口:調(diào)用第三方支付的退款接口返回后,在需要查詢退款請求狀態(tài)可調(diào)用退款訂單查詢接口查詢退款訂單的狀態(tài)和訂單信息。
那么針對第三方的接口,我們大致也有所了解了,接下來針對測試過程中涉及到主要的測試點(diǎn)整理如下:
測試過程中需要注意的主要測試點(diǎn)及異常場景:
·首先要保證接口都能正常調(diào)用;
·生成一筆訂單,支付完成后,同步或異步重復(fù)回調(diào),只有一次有效;
·生成一筆訂單,復(fù)制訂單號和金額,再次生成一筆訂單,用fiddler設(shè)置斷點(diǎn),用第一筆已完成的訂單號和訂單金額去替換現(xiàn)有的訂單號和金額,無法完成支付;
·生成一筆訂單,跳轉(zhuǎn)到第三方時修改金額,無法到賬,或者如果是游戲充值游戲幣的話,到賬為篡改后的金額對應(yīng)的游戲幣;
·異步通知屏蔽,同步有效,進(jìn)行支付,同步能夠正常到賬;
·同步設(shè)置無效,異步有效,進(jìn)行支付,異步能夠正常到賬;
·同步異步都設(shè)置無效,在第三方支付完成后,在重發(fā)機(jī)制時間范圍內(nèi),設(shè)置異步有效,到下次通知時間點(diǎn)時,能夠正常通知到賬(補(bǔ)單機(jī)制的驗(yàn)證,如果商戶收到第三方支付成功的通知后,要告知第三方支付收到了成功的通知,如果第三方支付收到商戶應(yīng)答不是ok或超時,第三方支付就會認(rèn)為通知失敗,會在規(guī)定的時間內(nèi)持續(xù)調(diào)用notify_url,一般有時間或次數(shù)的限制);
·針對支付訂單在數(shù)據(jù)庫中存儲是否完整和正確進(jìn)行校驗(yàn)(比如:第三方訂單號--方便與第三方對賬和問題排查、訂單金額、訂單狀態(tài)等);
·如果是用戶購買實(shí)物商品,用戶發(fā)起退貨,要保證退貨流程正常,資金能正常返還,要考慮下并發(fā)情況的驗(yàn)證以確保安全性;
·如果是用戶購買虛擬商品,比如話費(fèi)、油卡之類的商品,只有在發(fā)貨失敗的時候才能發(fā)起退貨,注意驗(yàn)證;
遇到過的坑:
·用戶購買100元游戲幣時,前往第三方支付跳轉(zhuǎn)進(jìn)行金額的篡改由100元改成0.01元,結(jié)果就拿了0.01元充值了100元的游戲幣。對訂單金額沒有做校驗(yàn)導(dǎo)致這樣的后果,損失比較大。大家在測試的過程中一定要注意對服務(wù)端進(jìn)行校驗(yàn),支付時數(shù)據(jù)的篡改一定要有校驗(yàn)。
·當(dāng)同步、異步通知都存在的情況的,異步通知(第三方支付成功后臺通知),沒有到賬,導(dǎo)致部分用戶充值不到賬,引起客訴。當(dāng)同步、異步并存的時候,一定要分別對同步和異步進(jìn)行檢驗(yàn),確保都能正常到賬。
我們所做的絕大多少的互聯(lián)網(wǎng)產(chǎn)品都會涉及到第三方支付,所以支付功能必然是重要的,作為測試互聯(lián)網(wǎng)產(chǎn)品的一員,我們必須要做好支付的安全性。
那么,如何規(guī)避支付風(fēng)險?
為了進(jìn)一步的加強(qiáng)支付功能的安全,也可以適當(dāng)?shù)脑黾右恍┍O(jiān)控機(jī)制,比如:訂單與第三方訂單進(jìn)行對比,可以使用跑批完成,當(dāng)我們完成支付的訂單從數(shù)據(jù)庫中查出來與通過第三方訂單查詢接口查詢出來的同一個訂單金額有異常時,進(jìn)行報(bào)警通知能夠及時發(fā)現(xiàn)處理,甚至當(dāng)有異常情況進(jìn)行創(chuàng)建訂單的終止,從而把損失降到最低。
當(dāng)一個支付請求被發(fā)送到支付渠道方,支付渠道會很快返回一個結(jié)果。但是這個結(jié)果,只是告訴你調(diào)用成功了,不是扣款成功,這叫同步調(diào)用。很多新手會拿這個結(jié)果當(dāng)作支付成功了,那就會被坑死,結(jié)果就是支付成功率特別高,伴隨著一堆無法解釋的壞賬率,測試人員尤其要注意測試數(shù)據(jù)的篡改:金額,同步返回結(jié)果,訂單號等。
同步請求參數(shù)里面會有一個回調(diào)地址,這個地址是支付渠道在扣款成功后調(diào)用的,這叫異步調(diào)用。一般同步接口僅檢查參數(shù)是否正確,簽名是否無誤等。異步接口才告訴你扣款結(jié)果。一般異步接口有5秒以內(nèi)的延遲。調(diào)用不成功會重試。有時候是這邊成功了,但支付渠道側(cè)沒收到返回,于是會繼續(xù)調(diào)。當(dāng)天的支付到第二天還在被異步調(diào)用也都是正常的。這也是開發(fā)人員需要特別注意的地方,不要當(dāng)做重復(fù)支付。測試人員也要對重復(fù)回調(diào)進(jìn)行測試,應(yīng)只有一次有效。這還不是最坑的,一般支付渠道側(cè),只有支付成功了才通知你。要是支付失敗了,壓根兒都不告訴你。 另一方面,如何老收不到異步結(jié)果呢?那就得查查了。同步結(jié)果不可靠,異步調(diào)用不可靠,那怎么確定支付結(jié)果?最終的殺招就是查單了,反查,一般支付渠道側(cè)都會提供反查接口,定時獲取DB中待支付的訂單調(diào)用支付渠道側(cè)的反查接口,最終把支付渠道側(cè)扣款成功的訂單完成掉。
微信大致流程為:APP端將訂單信息提交到后臺,后臺通過微信統(tǒng)一下單接口到微信去下單,微信端返回相關(guān)信息到PHP后臺,后臺先將訂單保存到數(shù)據(jù)庫成功后,返回簽名信息給APP端去實(shí)現(xiàn)真正的支付
支付寶大致流程為:APP端將訂單信息提交到后臺,后臺通過支付寶規(guī)定的簽名算法將簽名信息返回給APP端,APP端調(diào)用支付寶SDK去實(shí)現(xiàn)支付
總結(jié)
以上是生活随笔為你收集整理的【转载】第三方支付业务如何测试的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 网易UI自动化测试工具Airtest中导
- 下一篇: C# 批量重命名文件