淺談微信卡券功能開發(2)

回顧

    繼續介紹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,詳見文檔。這裏就不做演示了。

 

小結

    至此,一個從卡券創建到使用卡券的簡單流程就介紹完成了。之後的文章將會針對卡券的管理以及其他的功能進行介紹,希望大家關注。最後,提前祝大家新年快樂!!;)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章