您的位置:首页 > 移动开发 > 微信开发

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

2015-07-22 15:42 561 查看


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

回顾
继续介绍NODEJS开发微信卡券功能,昨天简单演示了微信接口的Access Token的原理和用法,还有门店的添加和查询,今天我们将介绍卡券的创建以及核销的最基本的流程。
本文将使用NodeJS作为开发语言,以wechat-card,和官方文档为主进行演示。

创建卡券
昨天我们已经添加完成门店,接下来我们将要创建卡券。微信的API接口为:

使用wechat-card module可以按照以下操作:

这里有需要特别说明的,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: 这个字段来设置卡券的背景颜色,我们要特别说明这个字段的原因是,这里的颜色不是我们可以随意设置的,微信提供了一组颜色代码,我们必须从中选择一个。我们可以通过接口来获取到微信提供的颜色列表:

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生成二维码,用户通过微信扫描二维码进入卡券领取界面领取卡券。涉及到的接口有:

使用 wechat-card 生成二维码的步骤很简单,只需要一个步骤:

在得到二维码后,商户可以通过各种方式来传播二维码,用户通过二维码扫描后,可以跳转到微信卡券领取界面。在wechat-card的生成二维码接口中,还有好多配置选项,比如二维码过期时间,二维码是否唯一有效等等的配置,大家可以参照wechat-card文档或者官方文档。
2. JSAPI
这里使用微信内置浏览器的JSAPI跳转到微信卡券的领取界面,由于JSAPI方式设计前端内容较多,所以本文不详述,只介绍几个需要注意的信息,在后续的文章中,会有单独介绍JSAPI各种操作。
在使用JSAPI发放卡券时,使用的时batchAddCard接口,在这个接口需要提交卡券ID和卡券信息,在卡券信息中有个配置项为Signature(签名),这个签名是需要计算的,具体的计算方式为:
将api_ticket、timestamp、card_id、code、openid、balance的value值进行字符串的字典序排序,然后将排序后的字符串连接为一个字符串,进行sha1加密。
用JS代码来介绍上面的概念:

wechat-card 中也提供了计算签名的方法:

这里有需要注意的几点:
1. api_ticket: 这个字段为微信卡券API V1.9时新增的内容,其原理和access_token类似:7200秒过期,请求次数有限制。不过不同的是:api_ticket微信会做刷新,也就是说我们在有效期内请求api_ticket,结果都是一样的。所以我们需要和微信接口进行时间对齐,即7200秒进行请求更新我们自己管理的ticket。(有问题?如果在好多不可控因素下导致时间误差怎么办?微信的结论是他们会在一定的时间范围内进行容错处理,所以这个问题应该就可以忽视了。)
2. timestamp: 这个字段是一个时间戳(单位为秒)。需要注意的是,在提交卡券信息时里面也有一个时间戳,要求卡券信息中的时间戳和Signature中的时间戳必须一致。
3. code, openid, balance都是可选字段,需要在某种场合下才是必填选项,详细请参见文档。

核销卡券
领取完卡券后,下一步是使用,对于商户来说就是核销。在微信卡券中,核销卡券的唯一途径就是消耗Code(Code概念请参照上文)。

wechat-card中,消耗Code的方法如下:

PS: Code从哪里来?
1. 领取卡券后,可以在微信卡包中找到卡券,在卡券上会有一个二维码,或者一串数字,或者两者都有,或者一维码等等的形式(详见卡券的code_type配置)。那么那串数字就是Code,或者扫描二维码的结果就是Code。
2. 如果使用JSAPI拉起卡券列表,在选取卡券后会得到一个加密的Code,使用decryptCode方法可以进行解码得到真实Code,详见文档。这里就不做演示了。

小结
至此,一个从卡券创建到使用卡券的简单流程就介绍完成了。之后的文章将会针对卡券的管理以及其他的功能进行介绍,希望大家关注。最后,提前祝大家新年快乐!!;)

转载请注明出处,原网页/article/5416091.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: