微信卡券功能

闲扯

? ? 由于公司的业务,有幸接触到了微信平台的开发,不得不感慨下,微信的业务规划实在是宏大的很呢。看来微信是想涉及生活的各个方面啊,再加上最近微信封杀各路豪杰(网易音乐、支付宝钱包)等,不难看出微信在产品规划上的野心。

? ? 貌似闲话说的太多了,接下来我就我自己对于微信卡券功能的开发经验进行简单的介绍,在微信开发的交流群中也看到很多新手开发者遇到的问题,希望本文能够帮助刚接触微信卡券的同学尽快的入门卡券功能开发,由于鄙人是NODEJS码农,所以本文主要以NODEJS为开发语言,其他语言的开发者可以飘过~或者借鉴~~

? ? 又一段闲话...(年纪大了,话唠了),先简单的介绍下微信卡券功能,卡券,说白了就是各种各样的优惠券,会员卡,以及各种票据等等等等,涉及的方面很广,就目前接触到的开发者来看,大多数都是对于各类优惠券的开发,其他的种类比较少了。

? ? 首先使用卡券功能,需要现在微信公众号平台中开启卡券功能。具体的开启步骤就不详述了,文档里面介绍的很详细(对了,附下官方文档下载地址),下面开始聊一聊开发步骤。

准备

? ? 微信提供了对于卡券的操作和管理接口,实质上就是向各个接口发送请求,最简单的,你都可以在html种建立个表单,然后填写接口需要的数据,然后POST或者GET到微信的接口地址就可以了。但是,通常我们不会这样做,因为我们的业务中可能有很多需求是微信接口无法满足的,有些信息是需要我们自己管理的。

? ? 在开发中,我们借助到了一个NodeJS的module,当然,大家也可以直接使用nodejs的request发送请求,但是毕竟有好多需要注意的东西,module会帮我们考虑到,我在下文也会将需要注意的地方进行说明,以便其他语言开发能够注意到。

Access Token

? ? 首先我们先通过npm安装一个module。不想使用module的同学自行略过本步骤。

? ? Module为 wechat-card, 可以到github上查看其相关文档,遗憾的是,这个module目前仅支持大多数的优惠券和红包,对于会员卡还有其他的门票类卡券并不支持。相信之后的版本应该会完善的,好在这些类型已经可以满足基本使用了。

????npm?install?wechat-card?--save

? ? ok, 完整完成后要进行一个全局的设置。

????var?wxCard?=?require("wechat-card");

????({
????????appId:?"wxXXXXXXX",
????????appSecret:?"bulabulabulabula"
????});

? ? 这里有东西要进行说明:首先这里有两个量说明下,appId和appSecret,这两个量可以在微信MP平台的开发者中心中得到,他们两个虽然只是路人,但是,他们两个会创造出一个结晶,叫做access_token,这个可是一个非常重要的而且脾气古怪的小朋友了。说他重要,因为他贯穿整个接口,不仅仅是卡券会用到,所以微信平台的接口都可能会使用到他;说他脾气古怪,是因为他有个特别的属性,7200秒(2小时)会过期,而且每天只能请求2000次。那么,这就要求我们要去管理access_token的生成,定时去刷新他。如果使用上述的NODEJS MODULE的话,只需要在setConfig中配置appId和appSecret,Module就会自动为我们管理Token了。

ag游戏大厅注册|平台? ? 题外话,如果我们的产品中不仅仅用到了微信卡券功能,还使用到了其他的微信功能,而这些功能中也用到了access token,那么这时候就不可以将token交由某个功能区管理了,因为当一边刷新access ?token以后,另一边的就会失效,针对这种情况,我们应该有一个服务来为各个功能提供access token,那么这里不可以配置appId和appSecret了,Module提供了另外一个配置:

????({
????????accessTokenService:?""
????});

? ? 这里通过配置一个公开的服务来获取access token,需要注意的是,这里的2小时过期,以及请求次数都需要这个服务自行去管理了。

创建门店

? ? 我们在创建卡券之前,需要先创建门店。这里我们先解释下,门店,其实就是实际商户下的店面,举个栗子,肯德基就是一个商户,那么肯德基北京西站店就是一个门店,我们的卡券会有一个”适用门店“的选项需要对应各个门店。所以我们需要先创建各个门店以备适用。

? ? 查看官方文档我们可以了解到一个创建门店的接口:

    

? ? 前面我们介绍了获取access token的方法,这里我们可以看到token的用途,在请求每一个接口时都需要附带token。我们可以直接向接口发送请求来完成操作。这里我们使用Module来进行创建门店:

????//?Demo数据,具体的字段含义,可以参加Wechat-Card的GITHUB或者官方文档
????var?shops?=?[{
????????"business_name":"麦当劳",?
????????"branch_name":"赤岗店",
????????"province":"广东省",
????????"city":"广州市",
????????"district":"海珠区",?
????????"address":"中国广东省广州市海珠区艺苑路?11?号",?
????????"telephone":"020-89772059",?
????????"category":"房产小区",
????????"longitude":"",
????????"latitude":""?
????},?{
????????"business_name":"麦当劳",?
????????"branch_name":"珠江店",
????????"province":"广东省",
????????"city":"广州市",
????????"district":"海珠区",?
????????"address":"中国广东省广州市海珠区艺苑路?12?号",?
????????"telephone":"020-89772059",?
????????"category":"房产小区",
????????"longitude":"",
????????"latitude":""
????}];

????(shops,?function(err,?ids)?{
????????//?这里添加成功了,ids为添加的门店的ID
????});

? ? 这里需要说明的是:添加成功后,回到函数返回值ids为之前添加数据对应的id,如果其中有数据添加失败了,那么对应的ID为-1.

查询门店列表

? ? 和创建门店相同,我们可以获取到已经添加的门店列表。接口为:

    

? ? Module中的查询方法为:

????//?微信提供的查询方法为一种分页式的查询方法
????//?offset为起始记录的位置,count为返回数据的数量
????var?offset?=?0,?count?=?10;
????(offset,?count,?function(err,?shops)?{
????????//?查询成功,shops为返回的信息
????});

? ? 这里需要说明的是:微信限制了最大返回的数量为50,即count最大值为50,接口返回的字段可以参考Module文档或者官方文档。

小结

? ? 时间不早了,明天还得上班~~这一篇先写到这,其他的接口大家可以参照本文中介绍的方法进行尝试,方法都是大同小异的,也可以参考Module文档,作为一个入门的经验,希望可以帮助到大家。如果其中有什么错误或者不好的地方, 希望大家能够指明,万分感谢,明晚咱们继续~~




    延伸阅读