
2020年騰訊數字文創節(以下簡稱TGC)在海南舉行,為了能讓玩家提前了解TGC的文化和線下活動,在活動開始前的一個月時間,我們就上線了「線上提前預約門票」的功能。為了提升門票預約的體驗,以及更好的在活動開始之前提前觸達到預約門票的使用者,團隊今年在小程式預約門票的基礎上增加了「添加門票到微信卡券」的功能。
微信開放平台賬号
微信小程式賬号
微信公衆号
在 mp.weixin.qq.com 中,登入微信公衆号背景,點選左側菜單欄 -> 功能 -> 卡券功能(如果沒有該功能,請點選添加功能插件進行添加)。
通路 open.weixin.qq.com,登入微信開放平台後,将小程式賬号和微信公衆号綁定在該開放平台賬号下。
在微信公衆号背景,可以對優惠券和會員卡類型進行手動建立,但是針對一些特殊的票券則需要使用 API(會議門票、電影票和景區門票等等)的方式進行生成,TGC的活動是在海南線下舉行,是以我們則使用了微信卡券的景區門票類型,無法直接在背景直接建立,是以這裡介紹下如果使用 API 的方式進行生成。
1、擷取access_token
建立卡券API需要用到微信的 access_token,而公衆号生成 access_token 的方式需要特别注意一下,需要在公衆号背景綁定生成 access_token 的伺服器IP白名單,由于生成卡券我們隻需要建立一次,是以這裡我們直接添加本地的IP作為白名單IP即可。
2、建立卡券
這一步就是利用建立卡券的API,傳入卡券的配置即可。相關的請求參數說明直接檢視文檔:
https://developers.weixin.qq.com/doc/offiaccount/Cards_and_Offer/Special_ticket.html
這裡特别需要注意的是,小程式添加微信卡券功能允許我們将卡券使用界面添加跳轉回小程式的入口,是以在建立卡券的時候,我們可以通過設定一些參數,讓卡券服務入口能跳轉回小程式内,具體參數說明,請前往相關文檔檢視,這裡簡單貼下使用效果,供大家參考。
文檔連結:
https://developers.weixin.qq.com/doc/offiaccount/Cards_and_Offer/Coupons-Mini_Program_Start_Up.html#21
建立完卡券之後,接下就是使用者在小程式内通過某些操作領取卡券了。小程式内領取卡券需要服務端提供卡券的校驗參數,是以這一步,我們介紹下如何在服務端生成卡券的校驗參數。
1、生成access_token
這步我們在生成卡券模闆中有提到過,隻不過因為這裡用戶端頻繁調用的,我們需要在代碼層面去實作 access_token 的擷取。這裡由于我們使用的是小程式雲,雲函數的運作機制,導緻其預設的是非固定IP,我們需要在騰訊雲的 cloudbase 控制台,将擷取 access_token 的雲函數設定成固定IP。
設定固定IP成功後,将得到的 IP 配置到 公衆号管理背景的 開發 -> 基本配置 -> IP白名單 中:
配置好IP白名單後,利用基本配置中的 AppID 和 AppSecret 請求access_token:
2、生成api_ticket
生成 api_ticket 和擷取 access_token 類似,直接利用 access_token請求微信的接口擷取即可,這裡需要注意的是,access_token和api_ticket 每天都有請求次數的限制以及都有過期時間,是以我們需要将這兩個值緩存起來使用(注:這個問題好像不少新人同學都犯過錯)。
3、生成卡券參數
卡券參數主要分為這幾部分:随機字元串 nonce_str、時間戳 timestamp、使用者 openid、卡券号碼 code、卡券簽名 signature。
卡券簽名 signature 的生成依賴其他的參數。
後端代碼實作:
小程式端添加卡券的就直接将服務端生成的卡券參數傳入小程式添加卡券 API 即可:
調用 wx.addCard 的效果:
調用 wx.openCard 的效果:
由于業務的特殊性(使用者可以多次通過門票卡券二維碼進入活動現場),我們并未對卡券做核銷的操作。但是卡券本身的核銷也是直接可以通過微信卡券核銷接口進行核銷,由于這部分比較簡單,這裡就不備援闡述了,直接可以通過檢視文檔完成:
https://developers.weixin.qq.com/doc/offiaccount/Cards_and_Offer/Redeeming_a_coupon_voucher_or_card.html
雲開發(Tencent CloudBase,TCB)是騰訊雲提供的雲原生一體化開發環境和工具平台,為開發者提供高可用、自動彈性擴縮的後端雲服務,包含計算、存儲、托管等serverless化能力,可用于雲端一體化開發多種端應用(小程式,公衆号,Web 應用,Flutter 用戶端等),幫助開發者統一建構和管理後端服務和雲資源,避免了應用開發過程中繁瑣的伺服器搭建及運維,開發者可以專注于業務邏輯的實作,開發門檻更低,效率更高。