最初,小程序文檔中只有具體接口調用方法,并沒有給出小程序中調用指紋識別的最佳實踐。現在,官方文檔終于為開發(fā)者提供了指紋識別的正確方法,同時提供了一個接口,供開發(fā)者鑒別相應信息是否正確。 下面,知曉程序(微信號 zxcx0101)將根據官方文檔,教大家如何正確地在小程序中,調用指紋識別。 關注「知曉程序」微信公眾號,回復「開發(fā)」,獲取小程序全套開發(fā)經驗教程。 在小程序中,微信為指紋識別提供了兩個接口: 根據兩個接口的名字,我們可以知道:前者用于檢查當前設備是否支持生物識別,后者則是實際調用指紋識別的接口。那么,整個調用過程的邏輯就很簡單了:先檢測當前設備和微信版本是否支持指紋識別,如果支持,則調用指紋識別進行鑒權。利用 wx.checkIsSupportSoterAuthentication() 接口和 wx.canIUse() 接口,我們可以檢測小程序在當前設備上,是否可以使用指紋識別。具體代碼如下: 我們從調試臺中,可以看到調用結果含有 supportMode 參數,里面包裹一個數組。官方文檔的說法是,如果 supportMode 數組中包含有
'fingerPrint' ,那么就代表當前設備可以使用指紋識別功能。
需要注意的是,如果用戶的設備不支持指紋驗證,你應該為用戶提供替代驗證方式。
確認小程序可以使用指紋識別之后,我們就可以進入正式的接口調用環(huán)節(jié)了。示例的代碼如下: requestAuthModes :允許的生物鑒權方式,以數組的形式呈現。需要指紋識別,只需填入 'finerPrint' 。
challenge :官方稱為「挑戰(zhàn)因子」,可以將請求特征碼(訂單號、請求編號等)放入,確認用戶的是授權哪一個請求。
authContent :在指紋識別的對話框中,向用戶顯示的提示信息。
將兩個接口合并起來用,最終我們的代碼效果如下: 最后我們試著運行一下。看到這樣的提示,說明我們的調用成功了:如果你的小程序沒有非常嚴格的安全要求(例如,數據存儲在本地的日記本小程序等),到這一步已經可以結束了。但如果你的小程序需要更強的安全性(例如金融交易類的小程序),你還要確認指紋信息的真實性,以防有人以偽造數據的方式,破解指紋驗證。調用 wx.startSoterAuthentication() 接口后,微信會向小程序返回指紋識別數據。開發(fā)者需要根據這些數據,進行進一步的驗證。調用 wx.startSoterAuthentication() 接口所返回的數據示例如下:需要注意的是,返回值里的
resultJSON 這個參數,本身是被轉換成字符串的 JSON 對象。開發(fā)者如果需要獲取里面的內容,需要用 JSON.parse 來解析。微信官方已經放出了鑒定指紋信息的流程圖,我們可以大致了解到具體的鑒定方法。這里我們需要提到的是「異步調用微信官方后臺驗證接口」這一步驟。在文檔中,微信團隊已經提供一個供驗證指紋信息的接口。它的調用地址是 http://api.weixin.qq.com/cgi-bin/soter/verify_signature?access_token=%access_token (嗯,它甚至沒有使用 HTTPS……),需要使用 POST 方式傳入具體參數。對于具體參數,文檔出只給出了這樣一行: 官方并沒有給出參數具體意義。據知曉程序(微信號 zxcx0101)猜測,這些參數具體含義應該是:但據知曉程序測試,如果直接調用,會出現
48001 的錯誤,并提示 API 未授權,目前不知道哪些小程序可以使用這個接口驗證指紋信息。我們也希望微信官方可以繼續(xù)完善這個接口(和文檔),讓開發(fā)者更方便地利用指紋接口,開發(fā)出具有高安全性和體驗良好的小程序。
|