?開發 | 讓小程序用上「指紋識別」,只需這 3 個接口 - 新聞資訊 - 科蟻網

開發 | 讓小程序用上「指紋識別」,只需這 3 個接口

在 8 月 18 日的小程序新能力更新中, 微信團隊為小程序增加了生物識別(包括指紋識別)的能力。 最初,小程序文檔中只有具體接口調用方法,并沒有給出小程序中調用指紋識別的最佳實踐。 現在, 官方文檔終于為開發者提供了指紋識別的正確方法,同時提供了一個接口,供開發者鑒別相應信息是否正確。

下面,知曉程序(微信號 zxcx0101)將根據官方文檔,教大家如何正確地在小程序中,調用指紋識別。

關注「知曉程序」微信公眾號,回復「開發」,獲取小程序全套開發經驗教程。

如何在小程序里,使用指紋識別能力?

在小程序中,微信為指紋識別提供了兩個接口:

  • wx.checkIsSupportSoterAuthentication()
  • wx.startSoterAuthentication()

根據兩個接口的名字,我們可以知道:前者用于檢查當前設備是否支持生物識別,后者則是實際調用指紋識別的接口。 那么,整個調用過程的邏輯就很簡單了: 先檢測當前設備和微信版本是否支持指紋識別,如果支持,則調用指紋識別進行鑒權。 1. 如何檢測是否可以調用指紋識別? 利用wx.checkIsSupportSoterAuthentication() 接口和 wx.canIUse() 接口, 我們可以檢測小程序在當前設備上,是否可以使用指紋識別。

具體代碼如下:

我們從調試臺中,可以看到調用結果含有 supportMode 參數,里面包裹一個數組。

官方文檔的說法是, 如果 supportMode  數組中包含有 'fingerPrint' ,那么就代表當前設備可以使用指紋識別功能。 根據以上信息,我們來改寫一下代碼。

需要注意的是,如果用戶的設備不支持指紋驗證,你應該為用戶提供替代驗證方式。

2. 如何調用指紋識別? 確認小程序可以使用指紋識別之后,我們就可以進入正式的接口調用環節了。

示例的代碼如下:

在這個接口中,有這些參數:

  • requestAuthModes:允許的生物鑒權方式,以數組的形式呈現。需要指紋識別,只需填入 'finerPrint'
  • challenge:官方稱為「挑戰因子」,可以將請求特征碼(訂單號、請求編號等)放入,確認用戶的是授權哪一個請求。
  • authContent:在指紋識別的對話框中,向用戶顯示的提示信息。

將兩個接口合并起來用,最終我們的代碼效果如下:

最后我們試著運行一下。 看到這樣的提示,說明我們的調用成功了:

如何鑒別指紋信息的真實性? 如果你的小程序沒有非常嚴格的安全要求(例如,數據存儲在本地的日記本小程序等),到這一步已經可以結束了。 但 如果你的小程序需要更強的安全性(例如金融交易類的小程序) ,你還要確認指紋信息的真實性,以防有人以偽造數據的方式,破解指紋驗證。 調用 wx.startSoterAuthentication() 接口后, 微信會向小程序返回指紋識別數據。開發者需要根據這些數據,進行進一步的驗證。 1. 接口會返回什么信息? 調用 wx.startSoterAuthentication() 接口所返回的數據示例如下:

小程序文檔中,已經給這些參數的具體含義做出解釋。

需要注意的是, 返回值里的  resultJSON 這個參數,本身是被轉換成字符串的 JSON 對象。開發者如果需要獲取里面的內容,需要用  JSON.parse 來解析。 resultJSON 具體參數如下:

2. 如何鑒定指紋識別信息真實性? 微信官方已經放出了鑒定指紋信息的流程圖,我們可以大致了解到具體的鑒定方法。

這里我們需要提到的是「異步調用微信官方后臺驗證接口」這一步驟。 在文檔中,微信團隊已經提供一個供驗證指紋信息的接口。 它的調用地址是 http://api.weixin.qq.com/cgi-bin/soter/verify_signature?access_token=%access_token(嗯,它甚至沒有使用 HTTPS……),需要使用 POST 方式傳入具體參數。

對于具體參數,文檔出只給出了這樣一行:

官方并沒有給出參數具體意義。據知曉程序(微信號 zxcx0101)猜測,這些參數具體含義應該是:

但據知曉程序測試, 如果直接調用,會出現 48001 的錯誤,并提示 API 未授權,目前不知道哪些小程序可以使用這個接口驗證指紋信息。 有興趣的同學可以自行嘗試,并將結果告訴我們。 我們也希望微信官方可以繼續完善這個接口(和文檔),讓開發者更方便地利用指紋接口,開發出具有高安全性和體驗良好的小程序。


鮮花

握手

雷人

路過

雞蛋
該文章已有0人參與評論

請發表評論

全部評論

老子是皇帝彩金