• 会员卡系统接入微信卡券那些事儿


    前言

    在中国日常生活中,微信使用的频率以及占用的时长最多。东家有自己的会员卡系统,在移动互联网时代,线下门店使用还需客户拿着物理会员卡太不方便了,于是接入微信卡券提上了计划的日程。在接入的过程中,碰到了一些坑,无论是使用姿势不对还是其它,网上搜索了没找到解决问题的答案又无法寻求其他人的帮助,这个时候是最崩溃的,还是先记下来,也许可以帮助别人减少这些不必要花的时间。

    会员卡与卡券

    什么是卡券?从我接触到的微信文档上理解,卡券是微信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

    作者:WadeYu
    出处:http://www.cnblogs.com/wadeyu/
    本文版权归本人和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    投资银行的IT部门——不同之处与常见误解
    C++ error C2440: “类型转换” : 无法从“std::vector::iterator”转换为“
    查看端口占用
    Sc config http start= disabled
    DDL、DML和DCL的区别与理解
    不同网段,在路由器上如何设置网关
    服务器调优
    查看SQL Server版本信息
    基于32位Windows2003的数据库服务器优化,启用AWE,优化SQL Server
    在WIN7操作系统下,如何显示文件夹里文件的数目
  • 原文地址:https://www.cnblogs.com/wadeyu/p/5641463.html
Copyright © 2020-2023  润新知