微信支付接口調用之二維碼失效時間的設置

        今天解決了測試提交上來的一個bug,說是公司網站調用的二維碼接口沒有做超時失效處理,這種情況容易導致用戶賬號登出後,該二維碼還是有效的,當用戶掃描支付時還是能夠支付成功,但是微信支付成功後調用我們配置好的回調接口時卻會因爲被攔截而無法執行正常的回調操作,一些重要的資金流水和自己網站獨有的資金賬戶的信息都將無法保存,造成的影響是非常嚴重的。不多說,開始切入正題。

 

在微信官方給出的微信支付開發文檔,統一下單接口中有一個參數  time_expire  是用來設置二維碼的超時時間的,截圖如下:

 

 

更多參數詳情請訪問: https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1  查看。

 

於是我在自己的代碼中加入了 “time_expire ”這個參數,如下圖紅框部分:

 

時間的生成方法是自己寫的,很簡單,附上代碼如下:

    /**
     * 設置微信二維碼失效時間,並返回具體失效的時間點
     * @param expire 二維碼的有效時間,單位是毫秒
     * @return
     */
    public static String getOrderExpireTime(Long expire){
    	SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
		  Date now = new Date();
		  Date afterDate = new Date(now .getTime() + expire);
		  return sdf.format(afterDate );
    }

 

因爲沒有全面通讀過微信支付開發文檔,這套接口也是前面的老員工接入的,我算是半道子出門,所以以爲這樣就可以設置成功了,結果一試,發現二維碼都無法顯示了:

 

查看後臺打印的日誌,發現是簽名錯誤:

 

直接去百度,結果發現網上沒有解決的方案,正確的說,那些大神都不會犯這種小兒科的錯誤(汗顏),無奈我只能去讀源碼,結果讓我發現,之前放入map中的參數所有參數,最後都要封裝在<xml>中,於是我加上了:

 

再次測試,發現此時二維碼能正常顯示了,如下圖:

我設置的超時失效時間是兩分鐘,兩分鐘過後,我再掃這個二維碼時,發現二維碼已經失效了:

 

至此,問題算解決了。事實上,更完美的解決方案是,前端也要控制二維碼的顯示時間。

本來這個問題很簡單,如果是接觸過微信支付開發的人,應該能夠很快實現這個需求,但是作爲一個剛接觸的人來說,確實是有些困難的,本着一查就有的原則,寫下這篇博客,給以後和我一樣苦逼的程序小白一點小小幫助吧。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章