公众号上运行商家投放会员卡给关注的用户,其中用户在激活会员卡之后其所填写的信息商家是要做保存的。

如果是小程序实现的会员系统或是公众号网页上,那没什么好说的,在页面上随激活按钮的触发你的系统服务器就可以立即操作了。我这里说的是前端页面几乎完全依赖于微信公众平台,微信提供的会员卡功能包括页面实现的会员系统,越简单越好的那种,不然我同事也不会找我,外面弄一个系统或是买一个也要花不少钱,too bad。

不过再怎么想省,服务器都是要有的,但是可以不用购买域名,也不需要备案。

假设你在公众号平台已经编辑好了会员卡的内容,通过了审核获取到了会员卡卡号,虽然这个过程可以在代码里调微信的API实现,但是我接手的时候没有包含前面这些倒也省事。当然了,本质上没什么区别。

因为要用到微信的API,开发者ID和APPSecret都是要的,另外还要在IP白名单加入服务器IP。

微信开发文档会员卡激活

文档里面有下面一段内容

步骤三:接收会员信息事件通知

用户填写、提交资料后,会有事件推送给商家,开发者可以在接收到事件通知后调用激活接口,传入会员卡号、初始积分等信息或者调用拉取会员信息接口获取会员信息,进行会员管理。

推送XML数据包示例

<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>

上面这个的处理可以看我前一篇《C#-微信公众号开发消息管理》

上面的XML数据包中的信息有卡号CardId和UserCardCode这两个可以给我们用,微信的API中有一个可以获取会员信息的微信开发文档-拉取会员信息

接口调用请求说明

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"
}

需要注意的是,微信提供的API POST数据是几乎都是json格式的!请求得到的结果也是json格式!而access_token则是类似get拼接在后面。

看上面就知道要用这个API我们还需要先获取到access_token并加以保存,这里就用到上面说的APPID和APPSecret了。我封装了一个方法专门用来调微信的接口。

/// <summary>/// 执行POST请求/// </summary>/// <param name="method">方法名</param>/// <param name="requestString">请求传参</param>/// <returns>json类型格式</returns>public string WXExcute(string method, string requestString){HttpWebRequest request = WebRequest.Create(method) as HttpWebRequest;if (method.StartsWith("https", StringComparison.OrdinalIgnoreCase)){ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(CheckValidationResult);request.ProtocolVersion = HttpVersion.Version10;}request.ServicePoint.Expect100Continue = false;request.ServicePoint.UseNagleAlgorithm = false;request.Host = "api.weixin.qq.com";request.Method = "POST";request.ContentType = "application/x-www-form-urlencoded";request.Accept = "text/plain;charset=utf-8";request.Timeout = timeOut;byte[] data = Encoding.GetEncoding("UTF-8").GetBytes(requestString);using (Stream tempStream = request.GetRequestStream()){tempStream.Write(data, 0, data.Length);}//响应HttpWebResponse response;StreamReader reader;string jsonStr;//XmlDataDocument dataDoc = new XmlDataDocument();try{response = request.GetResponse() as HttpWebResponse;reader = new StreamReader(response.GetResponseStream());//dataDoc.Load(reader);jsonStr= reader.ReadToEnd();}catch (System.Exception ex){return "{\"data\":[],\"result\":{\"resultCode\":\"500005\",\"resultDesc\":\"" + ex.ToString() + "\"}}";}return jsonStr;}

刷新access_token和检查access_token是否过期,微信开发文档里面建议保存access_token的值并且要检查是否失效,最好是在失效前就更新了,因为这样能保证系统正常运行,微信允许在一定时间内旧的access_token和新的可以同时有效。我这里就有点随意,只在需要access_token时才检查,而不是定时去检测。下面TokenTicketUtil是我自己封装的类,JsonParseBeanData()方法是把json字符串转成Model用的。

/// <summary>/// 刷新access_token/// </summary>/// <returns></returns>private bool refreshAccessToken(){string json= new MyHttpRequest().WXExcute(string.Format("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}", appId, secret));AccessToken access = TokenTicketUtil.JsonParseBeanData<AccessToken>(json);if (access != null && !string.IsNullOrEmpty(access.access_token)){firstGetTokenTime = DateTime.Now;accessData = access;return true;  //刷新token成功}else if(access != null){string error = access.errcode + "," + access.errmsg;ViewData["ERROR"] = xml;}return false;}/// <summary>/// 检查access_token是否到了可刷新的时候了/// </summary>/// <returns></returns>private bool isTimeToRefreshToken(){if (firstGetTokenTime != null){DateTime now = DateTime.Now;TimeSpan ts = now - firstGetTokenTime;if (accessData != null && !string.IsNullOrEmpty(accessData.access_token)){if (ts.Seconds - accessData.expires_in < 300)  //小于5分钟刷新{return true;}}else {return true;}}return false;}

好了,通过上面的方法我们取到了有效的access_token,然后如法炮制,使用WXExcute()方法,把获取会员信息的API链接和必要的参数写进去就可以获取到用户在激活会员卡时填写的信息了。

/// <summary>/// 获取会员信息。需要会员卡号/// </summary>/// <returns></returns>public JsonResult GetMemberInfo(){string memCode = Request["code"];string memCardId = Request["cardId"];JsonResult jsonResult = new JsonResult();jsonResult.JsonRequestBehavior = JsonRequestBehavior.AllowGet;if (isTimeToRefreshToken()){if(!refreshAccessToken()){jsonResult.Data = OutPutErrorJson(500);return jsonResult;}}if (accessData != null){//JavaScriptSerializer serializer = new JavaScriptSerializer();JObject memCard = new JObject();memCard["card_id"] = memCardId;memCard["code"] = memCode ;string POSTstr = memCard.ToString(); ;//StringBuilder builder = new StringBuilder();//builder.AppendFormat("{0}={1}", "POST", POSTstr);string chgMC = new MyHttpRequest().WXExcute("https://api.weixin.qq.com/card/membercard/userinfo/get?access_token=" + accessData.access_token, POSTstr);jsonResult.Data = chgMC;}else {jsonResult.Data = OutPutErrorJson(400);}return jsonResult;}

要POST json格式的数据用JObject实现就可以了,简单易读。返回回来的json数据如下:

返回数据

{"errcode": 0,"errmsg": "ok","openid": "obLatjjwDolFjRRd3doGIdwNqRXw","nickname": "Fourier","membership_number": "316510891298","bonus": 460,"sex": "MALE","user_info": {"common_field_list": [{"name": "USER_FORM_INFO_FLAG_MOBILE","value": "15521328888"},{"name": "USER_FORM_INFO_FLAG_NAME","value": "微信"}],"custom_field_list": []},"user_card_status": "NORMAL"
}

构建相应的Model,然后将上面的数据内容转换为Model方便操作,将需要的信息保存到你的数据库即可。

这一整个过程不需要自己设计前端页面,前端的东西都在微信公众平台上设置就好了。不过有影响的是要启动服务器配置势必会导致自定义菜单和消息自动回复不能使用,也要调接口实现才行,二者不可兼得。

C#-实现微信激活会员卡后响应激活动作并获取会员信息相关推荐

  1. 企业微信接收消息服务器配置php,微信企业号配置及在公众号里获取用户信息

    微信企业号配置及在公众号里获取用户信息 1.1.企业公众号里新建应用,回掉模式里自定义回调URL及密钥拿到,创建应答数据 配置成功后显示: 已成功配置企业服务器 URL http://75271.co ...

  2. 微信小程序如何进行登录授权和获取用户信息

    微信小程序如何进行登录授权和获取用户信息

  3. PHP 实现微信关注公众号或扫码实现获取用户信息

    php微信关注公众号或扫码实现获取用户信息(内含简易框架搭建,可复用) 概述 用户可通过扫描二维码进行关注或单纯进行扫码操作,实现获取用户微信信息,提高公众号关注率 详细 流程 准备工作 准备公众号及 ...

  4. 根据微信公众号关注/取消关注事件,获取用户信息

    第一步:微信公众平台->基本配置->服务器配置->配置接收地址 第二步:接收微信服务器推送过来的事件 微信文档地址: 关注/取消关注事件 用户在关注与取消关注公众号时,微信会把这个事 ...

  5. 公众号h5获取手机号权限_微信公众号开发之网页授权(获取用户信息)

    这次暑假留在学校参与工作室的项目,对微信公众号比较感兴趣,所以参与这方面的学习研究. 昨天完成了关于网页授权,获取用户信息方面的功能,所以乘热打铁,写上一篇.实现本篇涉及的 功能,还需要完成一些基础. ...

  6. Java微信公众号开发微信网页授权之前端传递code方式获取用户信息

    本片博客讲解的网页授权分为两步,前端先传递backUrl(回调地址)到后台网页授权接口,该接口拿到回调地址后组装授权连接,重定向到前端页面,前端页面截取Code,传入后端获取用户信息方法,获取用户信息 ...

  7. c#实现微信公众号开发--服务号通过oauth2获取用户信息

    2018年春节策划了一个"带现金红包的贺年卡"微信号推广活动,先说下效果:2个小时实现新增关注用户4万多户,活动页面PV达到16.8万,后因红包预算费用原因结束活动. 实现原理:每 ...

  8. MATLAB 2008a 激活成功后还要激活(许可证过期)

    1.进入MATLAB的licenses文件夹,里面会有一个后缀为.lic的许可证文件 2.在桌面新建一个和该许可证文件同名的.txt文件,复制.lic中开头的以#开头的几行(通常为4行),继续在下方添 ...

  9. 为什么matlab激活完后还要激活(Matlab2012b license失效解决办法)

    第一步:打开matlab安装路径中的license文件夹,删除其中的lic文件 第二步:更换新的license.lic文件 第三步:重新打开matlab 搞定! license.lic文件的内容是: ...

  10. 关注微信公众号后根据不同用户推送不同信息,怎么做到的?

    关注公众号后,维信自动给我推送消息.如果我买了电话提醒服务,它会给我推送,如下图所示: 但如果我买了其他服务,它将给我推送我所买的服务,这个是怎么做到的?是属于自动回复吗?是如何区分用户的,麻烦有心人 ...

最新文章

  1. dom4j读写xml文件
  2. 【怎样写代码】工厂三兄弟之抽象工厂模式(五):扩展案例I
  3. 值得推荐的Idea十二大优秀插件
  4. 如果算力足够根本不需要标注太多数据
  5. html5视频播放器脚本怎么用,HTML5 video标签(播放器)学习笔记(一):使用入门...
  6. java properties 路径问题_Java 读取Properties文件时应注意的路径问题
  7. C#通过工厂模式,我把一大堆if干掉了
  8. mysql as join_mysql as 别名与 join 多表连接语法
  9. python怎么安装myqr_python二维码操作:对QRCode和MyQR入门详解
  10. 抱团股大跌,亏了谁的钱?
  11. Linux基础(2)-基础命令和bash的基础特性(1)
  12. 移动短信回执怎么开通_微信短视频直播怎么做?
  13. java模拟面试题目_JAVA模拟面试题库
  14. Java实现zip文件压缩与解压缩--附完整代码
  15. 从零打造的机械(智能)键盘,超级喜欢,IT人最爱
  16. 使用echars制作家谱图
  17. iOS系统安全学习小结(一)
  18. android 实时同步短信,备份Android短信的4种方法你最好知道
  19. 如何在excel多条件筛选
  20. 宝讯网捷:拼多多团长佣金怎么领?

热门文章

  1. 移动电源快充QC3.0方案芯片IP5318快充方案
  2. IPD——从战略到执行的全面研发管理体系
  3. WMI服务是什么?Windows 7系统如何禁用WMI服务?
  4. stm32无感无刷电机驱动
  5. 魅魔php影视系统,魅魔Maccms电影程序PHP
  6. 配置gitLab的邮件服务,并开启邮箱的验证通知功能
  7. 机器学习基础:吴恩达vs贪心科技AI哪个更值得你选择?
  8. 申论公文题-评论类-1
  9. liunx机器开放8080端口
  10. 修改gitlab 去掉双重认证 Two-Factor Authentication