聊一聊卡卷簽名的那些坑

最近在作小程序卡卷,真是一個接一個的坑,不只網上的資料很少,官方文檔更是混亂,搞了好幾天才搞定,這裏說說過程當中遇到的坑,基本上這些坑90%都出在簽名上。php


卡卷簽名主要用到如下幾個參數:

  • api_ticket (調用卡券相關接口的臨時票據)
  • timestamp (時間戳,單位爲:秒)
  • card_id (卡卷建立後得到的卡卷ID)
  • code (卡券code碼,至關於用戶領取的那張卡卷的卡卷號)
  • openid (指定領取用戶的opeind)
  • nonce_str (32位隨機字符串)


由於我是在微信公衆平臺建立卡卷的,因此code和openid並不須要用到,因此實際參與簽名的是api_ticket、timestamp、card_id、nonce_str這4個,card_id在公衆平臺建立卡卷的時候就能看到,timestamp和nonce_str這兩個時間戳和隨機數生成就不用說了很簡單,這裏重點說一下api_ticket 。
json


api_ticket的獲取比較麻煩,咱們首先須要獲取到access_token,而後再用access_token換取api_ticket小程序

獲取access_token的接口地址是下面這個:微信小程序


這裏重點來了,我就是在這裏被坑了幾天,請求接口中須要咱們添加appid和secret,而這裏使用的是公衆號的appid和secret!!!公衆號的!公衆號的!重要的事情說三遍,記住是公衆號的appid而不是小程序的!!!api


另外還有一點,就是獲取access_token的服務器地址還必須先加入公衆號的白名單,否則會提示獲取不了的,在微信公衆平臺裏面點【安全中心】就能看到IP白名單的選項,在裏面添加你服務器的ip地址,哦對了,ip白名單在啓用前要先啓用開發者密碼,這個在【基本配置】那裏,將開發者密碼啓用後,Ip白名單才能添加地址。緩存


好了,正常下來應該能獲取到access_token了,而後咱們須要用它去換取api_ticket安全

獲取api_ticket的接口地址是下面這個:服務器

這裏值得注意的是,兩個接口在短期內頻繁調用可能會受限,因此api_ticket獲取到後要進行緩存,避免重複調用接口,api_ticket的有效期爲2個小時。
微信


好了,到這裏簽名所用到的參數都齊了,以後就是生成簽名,官方說明是這樣:app

貼一下本身的代碼,PHP端:

最後返回的3個參數將返回給小程序,做爲wx.addCard()--cardList--cardExt的值,固然,在賦值前咱們還必須把這三個參數json序列化字符串,cardExt接收的是一個字符串而不是對象,那麼到這裏,卡卷的流程基本就是這樣了。


總結一下幾個要注意的地方:

  • 獲取access_token時,使用的appid是公衆號的而非小程序的
  • 服務器ip地址須要在微信公衆平臺加入ip白名單
  • api_ticket在獲取到後要進行緩存,由於頻繁調用接口有可能會受限。
  • 小程序wx.addCard()中,cardExt參數是一個字符串而不是對象,因此要將簽名連同其餘參數轉爲字符串後再賦值。
  • cardExt字符串裏的字段參數必須和參與簽名的參數一致(card_id除外,這個是寫在wx.addCard()--cardList--cardId)


基本上就是這些了,最後吐槽一下官方開發文檔真夠亂的,有些地方還說得不明不白!!!!


本文做者:kauthy
原文地址:聊一聊卡卷簽名的那些坑-教程-小程序社區-微信小程序-微信小程序開發社區-小程序開發論壇-微信小程序聯盟
相關文章
相關標籤/搜索