回顧
繼續介紹NODEJS開發微信卡券功能,昨天簡單演示了微信接口的Access Token的原理和用法,還有門店的添加和查詢,今天我們將介紹卡券的創建以及覈銷的最基本的流程。
本文將使用NodeJS作爲開發語言,以wechat-card,和官方文檔爲主進行演示。
創建卡券
昨天我們已經添加完成門店,接下來我們將要創建卡券。微信的API接口爲:
1
|
https: //api.weixin.qq.com/card/create?access_token=ACCESS_TOKEN |
使用wechat-card module可以按照以下操作:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
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。
在base_info中,分爲必須參數和可選參數,具體參見文檔,這裏有幾個要特別說明的配置字段:
1. color: 這個字段來設置卡券的背景顏色,我們要特別說明這個字段的原因是,這裏的顏色不是我們可以隨意設置的,微信提供了一組顏色代碼,我們必須從中選擇一個。我們可以通過接口來獲取到微信提供的顏色列表:
1
2
3
4
|
//
微信提供的接口爲:https://api.weixin.qq.com/card/getcolors?access_token=TOKEN<br> 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生成二維碼,用戶通過微信掃描二維碼進入卡券領取界面領取卡券。涉及到的接口有:
1
2
3
4
5
|
//
創建二維碼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 生成二維碼的步驟很簡單,只需要一個步驟:
1
2
3
|
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代碼來介紹上面的概念:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
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 中也提供了計算簽名的方法:
1
2
3
4
|
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概念請參照上文)。
1
|
https: //api.weixin.qq.com/card/code/consume?access_token=TOKEN |
在wechat-card中,消耗Code的方法如下:
1
2
3
4
5
6
|
//
下面的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,詳見文檔。這裏就不做演示了。
小結
至此,一個從卡券創建到使用卡券的簡單流程就介紹完成了。之後的文章將會針對卡券的管理以及其他的功能進行介紹,希望大家關注。最後,提前祝大家新年快樂!!;)