回顾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,详见文档。这里就不作演示了。
小结
至此,一个从卡券建立到使用卡券的简单流程就介绍完成了。以后的文章将会针对卡券的管理以及其余的功能进行介绍,但愿你们关注。最后,提早祝你们新年快乐!!;)