C#实现微信公众号会员卡管理的示例代码
为了更好地理解微信公众号--会员卡管理,作者特意花了不少的时间对其研究,并用c#开发出会员卡demo,主要包含会员卡创建、设置开卡字段、通过创建二维码来投放会员卡、同步会员卡数据/激活会员卡、拉取会员信息、更新会员信息、设置会员卡失效、删除会员卡,从这些可以清晰地看出是围绕会员卡的生命周期来研究的。结合文章中DEMO有助于大家快速理解会员卡接口。
1、会员卡创建
1)、会员卡创建接口文档
支持开发者调用该接口创建会员卡,并获取card_id,用于投放。调用该接口前,请开发者详读创建卡券接口部分上传图片接口、首页 部分,快速录入会员卡卡面必要信息。
接口调用请求说明
HTTP请求方式: POSTURL:https://api.weixin.qq.com/card/create?access_token=ACCESS_TOKEN
参数说明
参数 | 是否必须 | 说明 |
---|---|---|
access_token | 是 | 调用接口凭证 |
POST数据 | 是 | JSON结构 |
POST数据示例:
{ "card": { "card_type": "MEMBER_CARD", "member_card": { "background_pic_url": "https://mmbiz.qlogo.cn/mmbiz/", "base_info": { "logo_url": "http://mmbiz.qpic.cn/mmbiz/iaL1LJM1mF9aRKPZ/0", "brand_name": "海底捞", "code_type": "CODE_TYPE_TEXT", "title": "海底捞会员卡", "color": "Color010", "notice": "使用时向服务员出示此券", "service_phone": "020-88888888", "description": "不可与其他优惠同享", "date_info": { "type": "DATE_TYPE_PERMANENT" }, "sku": { "quantity": 50000000 }, "get_limit": 3, "use_custom_code": false, "can_give_friend": true, "location_id_list": [ 123, 12321 ], "custom_url_name": "立即使用", "custom_url": "http://weixin.qq.com", "custom_url_sub_title": "6个汉字tips", "promotion_url_name": "营销入口1", "promotion_url": "http://www.qq.com", "need_push_on_view": true }, "advanced_info": { "use_condition": { "accept_category": "鞋类", "reject_category": "阿迪达斯", "can_use_with_other_discount": true }, "abstract": { "abstract": "微信餐厅推出多种新季菜品,期待您的光临", "icon_url_list": [ "http://mmbiz.qpic.cn/mmbiz/p98FjXy8LacgHxp3sJ3vn97bGLz0ib0Sfz1bjiaoOYA027iasqSG0sj piby4vce3AtaPu6cIhBHkt6IjlkY9YnDsfw/0" ] }, "text_image_list": [ { "image_url": "http://mmbiz.qpic.cn/mmbiz/p98FjXy8LacgHxp3sJ3vn97bGLz0ib0Sfz1bjiaoOYA027iasqSG0sjpiby4vce3AtaPu6cIhBHkt6IjlkY9YnDsfw/0", "text": "此菜品精选食材,以独特的烹饪方法,最大程度地刺激食 客的味蕾" }, { "image_url": "http://mmbiz.qpic.cn/mmbiz/p98FjXy8LacgHxp3sJ3vn97bGLz0ib0Sfz1bjiaoOYA027iasqSG0sj piby4vce3AtaPu6cIhBHkt6IjlkY9YnDsfw/0", "text": "此菜品迎合大众口味,老少皆宜,营养均衡" } ], "time_limit": [ { "type": "MONDAY", "begin_hour":0, "end_hour":10, "begin_minute":10, "end_minute":59 }, { "type": "HOLIDAY" } ], "business_service": [ "BIZ_SERVICE_FREE_WIFI", "BIZ_SERVICE_WITH_PET", "BIZ_SERVICE_FREE_PARK", "BIZ_SERVICE_DELIVER" ] }, "supply_bonus": true, "supply_balance": false, "prerogative": "test_prerogative", "auto_activate": true, "custom_field1": { "name_type": "FIELD_NAME_TYPE_LEVEL", "url": "http://www.qq.com" }, "activate_url": "http://www.qq.com", "custom_cell1": { "name": "使用入口2", "tips": "激活后显示", "url": "http://www.qq.com" }, "bonus_rule": { "cost_money_unit": 100, "increase_bonus": 1, "max_increase_bonus": 200, "init_increase_bonus": 10, "cost_bonus_unit": 5, "reduce_money": 100, "least_money_to_use_bonus": 1000, "max_reduce_bonus": 50 }, "discount": 10 } } }
2)、创建会员卡DEMO
A、在创建会员卡之前,我们可以调用素材管理,上传logo,backgroup图片
如下为调用接口的DEMO
DEMO中关键代码:
if (string.IsNullOrEmpty(textBoxTmpMedia.Text)) { MessageUtil.ShowTips("请选择上传的素材!"); return; } ImageReJson imageReJson = AddMaterialInterface.Image(richTextBox1.Text, "image", textBoxTmpMedia.Text, "image/jpeg"); if (string.IsNullOrEmpty(imageReJson.errmsg)) { textBox7.Text = imageReJson.url; textBox26.Text = imageReJson.url; } richTextBox6.Text = "执行结果:" + JsonConvert.SerializeObject(imageReJson);
B、在logo与 backgroup图片上传后,我们调用创建会员卡接口来创建会员卡,如下为DEMO
在创建成功后,在微信公众平台中有刚创建的会员卡套
具体会员卡信息如下:
其中关键代码:
Base_Info base_info = new Base_Info(); base_info.logo_url = textBox26.Text; base_info.code_type = "CODE_TYPE_BARCODE"; base_info.brand_name = textBox27.Text; base_info.title = textBox28.Text; Date_Info date_info = new Date_Info(); date_info.type = "DATE_TYPE_PERMANENT"; base_info.date_info = date_info; base_info.color = "Color100"; base_info.notice = "到店出示会员卡,由店员完成核销"; base_info.description = "每人限领取1张\r\n会员权益不可与其它优惠同享\r\n仅限中国(本会员卡不包括港澳台地区)指定的爱玛蒂专卖店使用\r\n当年消费获取的积分仅可当年年底(既12月31日24点)前使用,如未全部使用,则当年的积分会于当年年底清零,不累计到次年\r\n具体使用方式请咨询专卖店工作人员。"; base_info.get_limit = 1; base_info.can_share = false; base_info.can_give_friend = false; Sku sku = new Sku(); sku.quantity = 1000000000; sku.total_quantity = 1000000000; base_info.sku = sku; base_info.use_all_locations = true; member_Card.base_info = base_info; member_Card.supply_bonus = true; member_Card.supply_balance = false; member_Card.prerogative = "所有专卖店消费1元即可获得1积分\r\n可参与丰富的会员专享活动,详情参看相关门店活动页面"; member_Card.auto_activate = false; member_Card.wx_activate = true; //积分规则 Bonus_Rule bonus_rule = new Bonus_Rule(); bonus_rule.cost_money_unit = 100; bonus_rule.increase_bonus = 1; bonus_rule.cost_bonus_unit = 2000; bonus_rule.reduce_money = 100; member_Card.bonus_rule = bonus_rule; member_Card.background_pic_url = ""; card.member_card = member_Card; memberCardJson.card = card; //创建会员卡json显示在界面上 richTextBox2.Text = JsonConvert.SerializeObject(memberCardJson); //通过接口写入 CardReJson createrejson = MemberCardInterface.Create(richTextBox1.Text, memberCardJson); richTextBox3.Text = JsonConvert.SerializeObject(createrejson);
C、设置测试白名单接口
若会员卡暂时未审核通,开发者可以将测试人员的微信号设置成白名单,领取未审核通过的卡券。白名单状态领取的卡信息不随卡券实时更新,请开发者注意。
2、设置开卡字段
1)、设置开卡字段接口文档
开发者在创建时填入"wx_activate": true字段后,需要调用该接口设置用户激活时需要填写的选项,否则一键开卡设置不生效。
接口调用请求说明
HTTP请求方式: POST URL:https://api.weixin.qq.com/card/membercard/activateuserform/set?access_token=TOKEN
参数说明
参数 | 是否必须 | 说明 |
---|---|---|
access_token | 是 | 调用接口凭证 |
POST数据 | 是 | JSON结构 |
2)、设置开卡字段DEMO
在设置开卡字段之前,我们查看了微信公众平台中会员卡的激活信息,只有必填信息,手机号
如下为调用接口程序,设置开卡字段接口 设置姓名,手机号是必填,性别、生日、兴趣选填
在调用 接口成功后,必填信息与激活信息调整见下
3、投放会员卡--创建二维码
1)、接口文档
创建会员卡二维码,打印后置于店内,顾客扫码领取会员卡,扫描下方二维码体验领取,若已领取可扫码快速打开会员卡。
开发者可调用该接口生成一张卡券二维码供用户扫码后添加卡券到卡包。
自定义Code码的卡券调用接口时,POST数据中需指定code,非自定义code不需指定,指定openid同理。指定后的二维码只能被用户扫描领取一次。
获取二维码ticket后,开发者可用换取二维码图片详情。
接口调用请求说明
HTTP请求方式: POSTURL:https://api.weixin.qq.com/card/qrcode/create?access_token=TOKEN
参数说明
参数 | 是否必须 | 说明 |
---|---|---|
POST数据 | 是 | JSON数据 |
access_token | 是 | 调用接口凭证 |
POST数据
开发者可以设置扫描二维码领取单张卡券,此时POST数据为:
{ "action_name": "QR_CARD", "expire_seconds": 1800, "action_info": { "card": { "card_id": "pFS7Fjg8kV1IdDz01r4SQwMkuCKc", "code": "198374613512", "openid": "oFS7Fjl0WsZ9AMZqrI80nbIq8xrA", "is_unique_code": false , "outer_str":"12b" } } }
当开发者设置扫描二维码领取多张卡券,此时POST数据为:
{ "action_name": "QR_MULTIPLE_CARD", "action_info": { "multiple_card": { "card_list": [ { "card_id": "p1Pj9jgj3BcomSgtuW8B1wl-wo88", "code":"2392583481", "outer_str":"12b" }, { "card_id": "p1Pj9jgj3BcomSgtuW8B1wl-wo98", "code":"2392583482", "outer_str":"12b" } ] } } }
2)、创建二维码DEMO
用户可以扫描这个二维码,扫码后,先领取会员卡,然后激活会员卡
在领取与激活会员卡时,会向开发者接入推送事件,
<xml> <ToUserName> < ![CDATA[gh_3fcea188bf78] ]></ToUserName> <FromUserName>< ![CDATA[obLatjlaNQKb8FqOvt1M1x1lIBFE] ]></FromUserName> <CreateTime>1432668700</CreateTime> <MsgType>< ![CDATA[event] ]></MsgType> <Event>< ![CDATA[submit_membercard_user_info] ]></Event> <CardId>< ![CDATA[pbLatjtZ7v1BG_ZnTjbW85GYc_E8] ]></CardId> <UserCardCode>< ![CDATA[018255396048] ]></UserCardCode> </xml>
开发者在收到这些xml后,可以解析处理,比如可以同步会员的初始积分,读取会员的基础信息同步到自己的业务系统,包括CRM或ERP等。
如下是我们接收后,做的系统日志:
4、同步会员卡数据/激活会员卡
1)、开发文档介绍
开发者可以在接收到事件通知后调用激活接口,传入会员卡号、初始积分等信息或者调用拉取会员信息接口获取会员信息,详情请见:激活会员卡接口
激活方式说明
接口激活通常需要开发者开发用户填写资料的网页。通常有两种激活流程:
用户必须在填写资料后才能领卡,领卡后开发者调用激活接口为用户激活会员卡;
是用户可以先领取会员卡,点击激活会员卡跳转至开发者设置的资料填写页面,填写完成后开发者调用激活接口为用户激活会员卡。
接口详情
接口调用请求说明
HTTP请求方式: POSTURL:https://api.weixin.qq.com/card/membercard/activate?access_token=TOKEN
参数说明
参数 | 是否必须 | 说明 |
---|---|---|
access_token | 是 | 调用接口凭证 |
POST数据 | 是 | JSON结构 |
{ "init_bonus": 100, "init_bonus_record":"旧积分同步", "init_balance": 200, "membership_number": "AAA00000001", "code": "12312313", "card_id": "xxxx_card_id", "background_pic_url": "https://mmbiz.qlogo.cn/mmbiz/0?wx_fmt=jpeg", "init_custom_field_value1": "xxxxx" }
2)、同步/激活会员卡DEMO
本DEMO中演示了修改membership_number及 初始积分,第一张图片为原图,第二张为同步后的图
5、拉取会员信息
1)、开发文档介绍
接口说明
支持开发者根据CardID和Code查询会员信息。
接口调用请求说明
HTTP请求方式: POSTURL:https://api.weixin.qq.com/card/membercard/userinfo/get?access_token=TOKEN
参数说明
参数 | 是否必须 | 说明 |
---|---|---|
POST数据 | 是 | JSON结构 |
access_token | 是 | 调用接口凭证 |
POST数据
{ "card_id": "pbLatjtZ7v1BG_ZnTjbW85GYc_E8", "code": "916679873278" }
返回数据
{ "errcode": 0, "errmsg": "ok", "openid": "obLatjjwDolFj******wNqRXw", "nickname": "*******", "membership_number": "658*****445", "bonus": 995, "sex": "MALE", "user_info": { "common_field_list": [ { "name": "USER_FORM_INFO_FLAG_MOBILE", "value": "15*****518" }, { "name": "USER_FORM_INFO_FLAG_NAME", "value": "HK" }, { "name": "USER_FORM_INFO_FLAG_EDUCATION_BACKGROUND", "value": "研究生" } ], "custom_field_list": [ { "name": "兴趣", "value": "钢琴", "value_list": [] }, { "name": "喜好", "value": "郭敬明", "value_list": [] }, { "name": "职业", "value": "", "value_list": [ "赛车手", "旅行家" ] } ] }, "user_card_status": "NORMAL", "has_active": false }
2)、拉取会员信息DEMO
可以读取到会员的姓名与手机号等信息,其中可以用手机号作为关键值与公司的CRM、ERP等对接。
6、更新会员信息
当前会员的积分或储值在公司的CRM、ERP等系统中变化,这时可以通过这个接口来实现同步。
如下DEMO为同步会员积分:
7、设置会员失效
如下为开发文档中的注意事项:
1.设置卡券失效的操作不可逆,即无法将设置为失效的卡券调回有效状态,商家须慎重调用该接口。
*2.商户调用失效接口前须与顾客事先告知并取得同意,否则因此带来的顾客投诉,微信将会按照《微信运营处罚规则》
如下是通过接口实现将会员失效的DEMO
8、删除会员卡
开发文档中说明是同删除卡券接口,删除卡券接口允许商户删除任意一类卡券。删除卡券后,该卡券对应已生成的领取用二维码、添加到卡包JS API均会失效。 注意:如用户在商家删除卡券前已领取一张或多张该卡券依旧有效。即删除卡券不能删除已被用户领取,保存在微信客户端中的卡券。
如下是通过接口实现删除会员卡功能的DEMO
到此这篇关于C#实现微信公众号会员卡管理的示例代码的文章就介绍到这了,更多相关C# 公众号会员卡管理内容请搜索猪先飞以前的文章或继续浏览下面的相关文章希望大家以后多多支持猪先飞!
相关文章
- 我们在使用C#做项目的时候,基本上都需要制作登录界面,那么今天我们就来一步步看看,如果简单的实现登录界面呢,本文给出2个例子,由简入难,希望大家能够喜欢。...2020-06-25
- 这篇文章主要介绍了C# 字段和属性的的相关资料,文中示例代码非常详细,供大家参考和学习,感兴趣的朋友可以了解下...2020-11-03
- 这篇文章主要介绍了C#中截取字符串的的基本方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-11-03
- 这篇文章主要介绍了C#实现简单的Http请求的方法,以实例形式较为详细的分析了C#实现Http请求的具体方法,需要的朋友可以参考下...2020-06-25
- 本文给大家分享C#连接SQL数据库和查询数据功能的操作技巧,本文通过图文并茂的形式给大家介绍的非常详细,需要的朋友参考下吧...2021-05-17
- 本文主要介绍了C#中new的几种用法,具有很好的参考价值,下面跟着小编一起来看下吧...2020-06-25
使用Visual Studio2019创建C#项目(窗体应用程序、控制台应用程序、Web应用程序)
这篇文章主要介绍了使用Visual Studio2019创建C#项目(窗体应用程序、控制台应用程序、Web应用程序),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25- 这篇文章主要介绍了C#开发Windows窗体应用程序的简单操作步骤,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-04-12
- 这篇文章主要介绍了C#从数据库读取图片并保存的方法,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下...2021-01-16
- 最近做一个小项目不可避免的需要前端脚本与后台进行交互。由于是在asp.net中实现,故问题演化成asp.net中jiavascript与后台c#如何进行交互。...2020-06-25
- 本文通过例子,讲述了C++调用C#的DLL程序的方法,作出了以下总结,下面就让我们一起来学习吧。...2020-06-25
- 轻松学习C#的基础入门,了解C#最基本的知识点,C#是一种简洁的,类型安全的一种完全面向对象的开发语言,是Microsoft专门基于.NET Framework平台开发的而量身定做的高级程序设计语言,需要的朋友可以参考下...2020-06-25
- 本文主要介绍了C#变量命名规则小结,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-09-09
- 这篇文章主要介绍了C#绘制曲线图的方法,以完整实例形式较为详细的分析了C#进行曲线绘制的具体步骤与相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
- 本文主要介绍了C# 中取绝对值的函数。具有很好的参考价值。下面跟着小编一起来看下吧...2020-06-25
- 这篇文章主要介绍了c#自带缓存使用方法,包括获取数据缓存、设置数据缓存、移除指定数据缓存等方法,需要的朋友可以参考下...2020-06-25
- 这篇文章主要介绍了c#中(&&,||)与(&,|)的区别详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-25
- 这篇文章主要用实例讲解C#递归算法的概念以及用法,文中代码非常详细,帮助大家更好的参考和学习,感兴趣的朋友可以了解下...2020-06-25
- 下面小编就为大家带来一篇C#学习笔记- 随机函数Random()的用法详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
- 这篇文章主要介绍了C#中list用法,结合实例形式分析了C#中list排序、运算、转换等常见操作技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25