会员卡系统接入微信卡券那些事儿
前言
在中国日常生活中,微信使用的频率以及占用的时长最多。东家有自己的会员卡系统,在移动互联网时代,线下门店使用还需客户拿着物理会员卡太不方便了,于是接入微信卡券提上了计划的日程。在接入的过程中,碰到了一些坑,无论是使用姿势不对还是其它,网上搜索了没找到解决问题的答案又无法寻求其他人的帮助,这个时候是最崩溃的,还是先记下来,也许可以帮助别人减少这些不必要花的时间。
会员卡与卡券
什么是卡券?从我接触到的微信文档上理解,卡券是微信APP里面的一个功能模块,这里面包含了各种卡和各种券,卡和券拥有共性也有差异,微信设计时把它当做同一个数据模型,根据卡券类型字段来区分,根据卡券类型字段来处理不同卡券扩展字段,它的API文档创建卡券接口都是同一个,也是这样要求传参数的。微信卡券现在支持哪些类型呢?从公开的文档上看,现在支持会员卡,礼品卡,购物卡,优惠券,折扣券,代金券等。东家的会员卡系统对应微信卡券里面的基础会员卡,按照基础会员卡相关文档要求实现即可。什么是会员卡?我的理解:它是证明用户是商业实体会员的一个凭证,拥有这个凭证会员就可以享受商家提供的针对会员的特权。会员卡与卡券是什么关系呢?经过上面的解释已经很清楚了,会员卡只是卡券里面的一个类型,跟优惠券都是一等公民。一开始接触这个我糊涂了,会员卡,优惠券,卡券,到底是神马关系?后来进一步详读微信文档发现,微信的设计哲学跟自己根据常识理解的不一样):):
基本玩法
创建会员卡-》投放会员卡-》用户领取会员卡-》激活用户会员卡-》使用会员卡
微信官方文档流程图如下:
用户领取会员卡时还没有用户会员个性化的数据,比如卡号,积分之类的,激活用户会员卡的目的就是为了设置这些个性化的数据。如果不用考虑到兼容第三方的会员卡系统,这两步其实是可以合并的。
存储设计
创建的会员卡数据基本上按照微信的卡券设计哲学设计存储模型,这样方便扩展添加其它的卡券类型。定义一个卡券基础表,用于存储通用数据,每种卡券类型分别创建扩展表,用于存储各自专有的数据。表相关的设计字段基本上跟微信接口定义的一致,当然可以根据喜好使用不同的名称也可以。
JS签名
如果是使用JSSDK的方式引导用户添加会员卡到微信卡券,服务器端需要根据规则生成好参数以及参数签名。生成参数的签名大家使用的套路基本上是一致的:参数排序,拼接字符串,拼接好的字符串加上签名密钥,然后使用哈稀算法生成哈稀字符串即签名字符串。微信签名官方文档已经说的很清楚了,了解详情参考官方文档。
激活方式
目前为止有如下几种激活方式:
1 自动激活
字段auto_activate设置为true
2 一键激活
字段wx_activate设置为true
3 跳转型一键激活
设置好如下字段:
"wx_activate": true,
"wx_activate_after_submit" : true, //是否设置跳转型一键激活
"wx_activate_after_submit_url" : "http://qq.com" //用户提交信息后跳转的网页
4 接口激活
设置好激活回调地址activate_url
5 备注
自动激活和非跳转型激活微信会生成自己的卡号,对于只能使用公司会员卡系统的卡号体系来说,只能选择接口激活和跳转型一键激活的方式。同时只能选择一种激活方式。填入了自动激活auto_activate字段,激活链接activate_url和一键开卡接口设置都会失效。若同时传入了activate_url,则一键开卡接口设置会失效。
激活处理流程
非官方流程
官方流程
微信卡券详情点击激活链接
用户会员卡信息变更处理
1 用户会员数据变化,比如积分,等级等,调用会员卡更新接口
2 用户卡号变化,只能调用激活接口重新激活
碰到的问题
1.编辑卡模版时由接口激活切换到一键激活没有生效
接口激活的URL字段需要设置为空即activate_url=‘‘
2.已激活的会员卡微信卡券详情页面没有显示会员卡号
使用非自定义code时,微信卡券详情页不会显示卡号,需要use_custom_code字段设置为true
3.使用JSSDK加入卡券接口报参数错误
使用自定义code码时,加入卡券时需要设置code码字段
4.使用JSSDK加入卡券接口报签名错误
检查微信会员卡模版ID是否正确
5.查看会员卡详情页没有推送查看会员卡事件通知
会员卡可能没有添加成功,删除重新领取
6.会员卡详情页没有显示快速支付按钮
需要设置好相关字段
{
"card": {
"card_type": "MEMBER_CARD",
"member_card": {
"base_info": {
"pay_info":
{
"swipe_card":
{
"is_swipe_card":true
}
}
},
}
}
}
7.用户会员卡号变化时如何处理
查阅公开的文档,到目前为止,更新会员卡信息的接口还没有更新卡号字段的参数,只能调用激活接口重新激活一次
8.微信自动下发的积分变动通知消息,点击详情按钮提示卡券信息不完整,无法查看
微信版本太低了,新版本会默认跳转到卡券详情页
9.领取了会员卡,然后从卡券中删除,再次添加到卡券时,立即领取按钮无法点击
超过了限制领取的数量,可以设置大点,保证用户领取时比较好的用户体验,一般用户不会删除会员卡
意外的衍生品
设计了一套通用的跟微信接口交互的简单的PHP库,各个项目都可以使用,遵循PSR规范。定义了一个接口文件,一个基础类,子类按微信功能模块划分,目前为止只加了卡券模块子类,其它微信功能模块以后项目中需要时再慢慢完善。代码github地址:https://github.com/wadeyu/wxapi
后记
1 接入第三方系统是非常痛苦的,尤其是碰到问题搜索不到解决方案的时候
2 接口激活有个问题,点击激活跳转回来时,没有传创建的会员卡编号,当创建了多个时,没有办法区分哪个是哪个
参考资料
【1】微信会员卡接口文档
http://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1451025283&token=&lang=zh_CN
【2】卡券JS-SDK调试工具以及常见接入错误说明
http://mp.weixin.qq.com/s?__biz=MzI1ODE0OTM0NQ==&mid=2649017217&idx=1&sn=be19cf54794706bd972ff53e64b64da7&scene=1&srcid=0628XbOdWU4VxMg3SBxFy4AG#wechat_redirect
【3】微信JSSDK文档
http://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115&token=&lang=zh_CN