回顧javascript
繼續介紹NODEJS開發微信卡券功能,昨天簡單演示了微信接口的Access Token的原理和用法,還有門店的添加和查詢,今天咱們將介紹卡券的建立以及覈銷的最基本的流程。html
本文將使用NodeJS做爲開發語言,以wechat-card,和官方文檔爲主進行演示。前端
建立卡券java
昨天咱們已經添加完成門店,接下來咱們將要建立卡券。微信的API接口爲:git
https://api.weixin.qq.com/card/create?access_token=ACCESS_TOKEN
使用wechat-card module能夠按照如下操做:github
var card = { card_type: "DISCOUNT", base_info: { // ... }, special_info: { // ... } }; wxCard.card.createCard(card, function(err, cardId) { // 建立成功後,返回卡券的ID });
這裏有須要特別說明的,card_type爲卡券的類型,wechat-card module目前只支持DISCOUNT(折扣券), CASH(現金券), GENERAL_COUPON(普通優惠券), GIFT(禮品券), GROUPON(團購券), LUCK_MONEY(紅包),其餘類型的你們能夠按照官方文檔進行操做。算法
卡券的配置參數中,能夠分爲三個類型的參數,一是card_type,即卡券類型;二是base_info,即基本信息,全部類型的卡券都會包含這部分參數,具體的參數請參見wechat-card文檔或者官方文檔;三是每種類型的卡券特有的參數,wechat-card中將這類參數歸爲special_info。api
在base_info中,分爲必須參數和可選參數,具體參見文檔,這裏有幾個要特別說明的配置字段:瀏覽器
1. color: 這個字段來設置卡券的背景顏色,咱們要特別說明這個字段的緣由是,這裏的顏色不是咱們能夠隨意設置的,微信提供了一組顏色代碼,咱們必須從中選擇一個。咱們能夠經過接口來獲取到微信提供的顏色列表:微信
// 微信提供的接口爲:https://api.weixin.qq.com/card/getcolors?access_token=TOKEN
wxCard.basic.getColorList(function(err, colors) { // colors 的格式: [{name: 'Color010', value: '#55bd47' }, ...] });
2. use_custom_code: 這個字段用來標明該卡券是否使用自定義CODE。這裏咱們先提早介紹下Code,咱們建立一類卡券,好比咱們建立了折扣券,其中包含了100的庫存量,即有100個用戶能夠領取,那麼每一個人領取到的就是一個Code,而後使用卡券,實質上是使用Code。use_custom_code默認值爲false,即不使用自定義Code,當爲false時, 每次領取卡券,微信會自動生成一個12位的數字做爲Code。若是爲true,那麼咱們在發放卡券的時候就須要自定義Code,這個咱們在以後會詳述。
3. url_name_type: 這個字段不是必須的,他的做用是在卡券界面上添加一個自定義的CELL,和這個字段相配的是custom_url,這兩個字段必須同時出現或者不出現。實現的效果是點擊自定義Cell跳轉到custom_url的連接。
在添加卡券成功後,接口返回卡券的ID。
發放卡券
在建立完成卡券以後,商戶須要發放卡券讓用戶領取,微信目前提供的發放卡券形式有如下幾種:(本文只列舉微信公開接口,合做接口使用請自行參照文檔)
1. 二維碼
流程是商戶能夠經過微信提供的接口生成二維碼的Ticket,而後使用Ticket生成二維碼,用戶經過微信掃描二維碼進入卡券領取界面領取卡券。涉及到的接口有:
// 建立二維碼Ticket https://api.weixin.qq.com/card/qrcode/create?access_token=TOKEN // 使用Ticket生成二維碼 https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=TICKET
使用 wechat-card 生成二維碼的步驟很簡單,只須要一個步驟:
createCardQRCode("qz_aAidkesdkncsn_AedfZek", function(err, url) { // url爲二維碼的URL });
在獲得二維碼後,商戶能夠經過各類方式來傳播二維碼,用戶經過二維碼掃描後,能夠跳轉到微信卡券領取界面。在wechat-card的生成二維碼接口中,還有好多配置選項,好比二維碼過時時間,二維碼是否惟一有效等等的配置,你們能夠參照wechat-card文檔或者官方文檔。
2. JSAPI
這裏使用微信內置瀏覽器的JSAPI跳轉到微信卡券的領取界面,因爲JSAPI方式設計前端內容較多,因此本文不詳述,只介紹幾個須要注意的信息,在後續的文章中,會有單獨介紹JSAPI各類操做。
在使用JSAPI發放卡券時,使用的時batchAddCard接口,在這個接口須要提交卡券ID和卡券信息,在卡券信息中有個配置項爲Signature(簽名),這個簽名是須要計算的,具體的計算方式爲:
將api_ticket、timestamp、card_id、code、openid、balance的value值進行字符串的字典序排序,而後將排序後的字符串鏈接爲一個字符串,進行sha1加密。
用JS代碼來介紹上面的概念:
var arr = new Array(api_ticket, timestamp, card_id, code, openid, balance); // 轉爲字符串 arr = arr.map(function(n){ return n.toString(); }); // 字典序排序 arr = arr.sort(); // 拼接爲字符串 var str = arr.join(""); // 進行SHA1加密,sha1算法需自行實現 var signature = sha1(str);
在 wechat-card 中也提供了計算簽名的方法:
var data = ['ApiTicket', 'CardId', 'timestamp']; wxCard.basic.getSignature(data, function(err, signature) { // do something ... });
這裏有須要注意的幾點:
1. api_ticket: 這個字段爲微信卡券API V1.9時新增的內容,其原理和access_token相似:7200秒過時,請求次數有限制。不過不一樣的是:api_ticket微信會作刷新,也就是說咱們在有效期內請求api_ticket,結果都是同樣的。因此咱們須要和微信接口進行時間對齊,即7200秒進行請求更新咱們本身管理的ticket。(有問題?若是在好多不可控因素下致使時間偏差怎麼辦?微信的結論是他們會在必定的時間範圍內進行容錯處理,因此這個問題應該就能夠忽視了。)
2. timestamp: 這個字段是一個時間戳(單位爲秒)。須要注意的是,在提交卡券信息時裏面也有一個時間戳,要求卡券信息中的時間戳和Signature中的時間戳必須一致。
3. code, openid, balance都是可選字段,須要在某種場合下才是必填選項,詳細請參見文檔。
覈銷卡券
領取完卡券後,下一步是使用,對於商戶來講就是覈銷。在微信卡券中,覈銷卡券的惟一途徑就是消耗Code(Code概念請參照上文)。
https://api.weixin.qq.com/card/code/consume?access_token=TOKEN
在wechat-card中,消耗Code的方法以下:
// 下面的code僅用於demo,實際中不存在 var code = "882077290937"; wxCard.code.consumeCode(code, function(err, consumeInfo) { // do something ... });
PS: Code從哪裏來?
1. 領取卡券後,能夠在微信卡包中找到卡券,在卡券上會有一個二維碼,或者一串數字,或者二者都有,或者一維碼等等的形式(詳見卡券的code_type配置)。那麼那串數字就是Code,或者掃描二維碼的結果就是Code。
2. 若是使用JSAPI拉起卡券列表,在選取卡券後會獲得一個加密的Code,使用decryptCode方法能夠進行解碼獲得真實Code,詳見文檔。這裏就不作演示了。
小結
至此,一個從卡券建立到使用卡券的簡單流程就介紹完成了。以後的文章將會針對卡券的管理以及其餘的功能進行介紹,但願你們關注。最後,提早祝你們新年快樂!!;)