最近在做小程序卡卷,真是一個接一個的坑,不僅網上的資料不多,官方文檔更是混亂,搞了好幾天才搞定,這里說說過程中遇到的坑,基本上這些坑90%都出在簽名上。 卡卷簽名主要用到以下幾個參數:
因為我是在微信公眾平臺創建卡卷的,所以code和openid并不需要用到,所以實際參與簽名的是api_ticket、timestamp、card_id、nonce_str這4個,card_id在公眾平臺創建卡卷的時候就能看到,timestamp和nonce_str這兩個時間戳和隨機數生成就不用說了很簡單,這里重點說一下api_ticket 。 api_ticket的獲取比較麻煩,我們首先需要獲取到access_token,然后再用access_token換取api_ticket 獲取access_token的接口地址是下面這個: 這里重點來了,我就是在這里被坑了幾天,請求接口中需要我們添加appid和secret,而這里使用的是公眾號的appid和secret!!!公眾號的!公眾號的!重要的事情說三遍,記住是公眾號的appid而不是小程序的!!! 另外還有一點,就是獲取access_token的服務器地址還必須先加入公眾號的白名單,不然會提示獲取不了的,在微信公眾平臺里面點【安全中心】就能看到IP白名單的選項,在里面添加你服務器的ip地址,哦對了,ip白名單在啟用前要先啟用開發者密碼,這個在【基本配置】那里,將開發者密碼啟用后,Ip白名單才能添加地址。 好了,正常下來應該能獲取到access_token了,然后我們需要用它去換取api_ticket 獲取api_ticket的接口地址是下面這個: 這里值得注意的是,兩個接口在短時間內頻繁調用可能會受限,所以api_ticket獲取到后要進行緩存,避免重復調用接口,api_ticket的有效期為2個小時。 好了,到這里簽名所用到的參數都齊了,之后就是生成簽名,官方說明是這樣: 貼一下自己的代碼,PHP端: 最后返回的3個參數將返回給小程序,作為wx.addCard()--cardList--cardExt的值,當然,在賦值前我們還必須把這三個參數json序列化字符串,cardExt接收的是一個字符串而不是對象,那么到這里,卡卷的流程基本就是這樣了。 總結一下幾個要注意的地方:
基本上就是這些了,最后吐槽一下官方開發文檔真夠亂的,有些地方還說得不明不白!!!! |