代碼寫(xiě)錯(cuò),差點(diǎn)虧了幾萬(wàn)!
活動(dòng)最重要,也是最麻煩的環(huán)節(jié)就是返現(xiàn)環(huán)節(jié),這次我們是通過(guò)一個(gè)鏈接收集大家支付寶賬號(hào),然后進(jìn)行支付寶批量轉(zhuǎn)賬。但是這個(gè)工作看起來(lái)很簡(jiǎn)單,其實(shí)有很多東西需要留意的,因?yàn)樯婕暗藉X(qián),最基本的要保證冪等性。什么是冪等性呢?用戶(hù)對(duì)于同一操作發(fā)起的一次請(qǐng)求或者多次請(qǐng)求的結(jié)果是一致的,不會(huì)因?yàn)槎啻吸c(diǎn)擊而產(chǎn)生了副作用。比如這次返現(xiàn)活動(dòng),在收集大家支付寶信息的時(shí)候,不管用戶(hù)提交了幾次信息,最終只轉(zhuǎn)賬一次。返現(xiàn)的程序是由小北實(shí)現(xiàn)的,他在實(shí)現(xiàn)的過(guò)程中,差點(diǎn)就因?yàn)檫@個(gè)事情差點(diǎn)虧了點(diǎn)錢(qián)。
以下是小北對(duì)這次返現(xiàn)的復(fù)盤(pán):不是組織了一場(chǎng)新用戶(hù)免費(fèi)領(lǐng)取一年阿里云服務(wù)器的活動(dòng)了,現(xiàn)在已經(jīng)超過(guò)1000人購(gòu)買(mǎi),750 人收到了返現(xiàn),不禁發(fā)出還得是北哥的感嘆!但是在短時(shí)間內(nèi)給近1000人返現(xiàn),并且還要保證它們都是符合返現(xiàn)條件的,就不太容易,今年 6.18 我們是寫(xiě)了一個(gè)檢測(cè)工具,自己檢測(cè)后截圖給我們,我們拉群,滿(mǎn)100人發(fā)紅包。這樣會(huì)浪費(fèi)整整周六一天的時(shí)間,最近了解到支付寶有批量轉(zhuǎn)賬能力,于是我就發(fā)了個(gè)問(wèn)卷向大家收集一波阿里云ID、支付寶賬號(hào)用于返現(xiàn)。這樣直接用阿里云每天導(dǎo)給我的訂單數(shù)據(jù)做校驗(yàn),看哪些用戶(hù)購(gòu)買(mǎi)了,有資格返現(xiàn)。本來(lái)非常簡(jiǎn)單,所以就讓小老弟去幫我寫(xiě)代碼,結(jié)果怎么著,小老弟的代碼一小時(shí)就寫(xiě)完了,而且用得很爽!于是前天晚上我就回去看了下小老弟的代碼,結(jié)果一看嚇一跳,差點(diǎn)讓我虧幾千上萬(wàn)都有可能??!簡(jiǎn)單來(lái)說(shuō)支付寶批量轉(zhuǎn)賬,需要生成一個(gè) csv,每一行是:支付寶賬號(hào),姓名,轉(zhuǎn)賬金額,備注 這樣的信息。小老弟的代碼是這樣寫(xiě)的:
users?=?get_user_info_from_file()?//??從騰訊問(wèn)卷下載的大家提交的返現(xiàn)信息?csv文件導(dǎo)入
order_map?=?get_order_map()?//?從阿里云導(dǎo)出的訂單數(shù)據(jù)生成一個(gè)?map,key是用戶(hù)的阿里云ID,value是訂單信息
for?user?in?users:
??if?user.aliyun_id?in?order_map:
?????csv_file.writeline(xxxxxxxx)??//??有購(gòu)買(mǎi)記錄的讀者信息寫(xiě)入csv文件,用于批量轉(zhuǎn)賬
然后這個(gè)產(chǎn)生的 csv 文件就可以傳到支付寶 PC 端的批量轉(zhuǎn)賬接口中進(jìn)行轉(zhuǎn)賬。這代碼完全能正常工作,也能完成返現(xiàn)!但是?。。?/p>小老弟沒(méi)有考慮到異常場(chǎng)景,以及應(yīng)對(duì)各種羊毛黨或者用戶(hù)的錯(cuò)誤操作比如說(shuō),假如一個(gè)用戶(hù)在填問(wèn)卷的時(shí)候填了多次信息,上面的代碼是不是就會(huì)導(dǎo)致多次轉(zhuǎn)賬?當(dāng)然,這樣的用戶(hù)不多,但是總有大意的讀者多點(diǎn)了一次提交之類(lèi),后來(lái)我就發(fā)現(xiàn)了: