浅谈微信卡券功能开发(2)

回顾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_infoapi

    在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,详见文档。这里就不作演示了。

 

小结

    至此,一个从卡券建立到使用卡券的简单流程就介绍完成了。以后的文章将会针对卡券的管理以及其余的功能进行介绍,但愿你们关注。最后,提早祝你们新年快乐!!;)

 

转载请注明出处,原网页http://www.cnblogs.com/kenticny/p/4287244.html

相关文章
相关标签/搜索