需求:点击我们公司的微信公众号,从菜单栏中进入会员中心,如果是新会员则需绑定注册,注册完跳转到用户中心页面,然后给用户发会员卡,如果是老会员,如果以前没有的会员卡的,发一张会员卡给他,如果有,则不做任何处理。
实现:我的思路是这样的,进入会员中心,调用微信API接口,判断用户是否领过卡,若没有领取,则调用微信JS-JDK的addCard()接口。具体实现过程如下(用C#实现):
1创建会员卡
1) 先打开微信开发者文档,先调用创建会员卡接口,在文档的4.1 创建会员卡接口,直接用postman,详情见文档。
创建的时候要特别注意”use_custom_code”: false,”bind_openid“:false两个字段
第一个为是否自定义code,第二个是否绑定openid,这个很重要,很重要,很重要!!!因为后面调用JS-JDK的addCard接口所需要的签名会根据这两个的值决定是否加入openid和code进行签名的生成(被坑了很久)。后面会详细说明这个签名,先一步步来,记住这两个参数一定要注意。按照这个文档说明,创建会员卡应该没有什么问题,对了, “sku”: { “quantity”: 50000000 }这个是库存,要添加一点库存。
2调用微信JS-SDK
1)引入微信js
3.下面贴上面后台接口主要的代码
1)/User/ExitCard(post微信接口,然后根据返回消息判断是否已经领取卡,领取则为true,未领取则为false)
public bool ExitCard(string openId, string token,string code, string cardId)//token为access_token code为自定义code号 //code我这里是自定义的会员卡号 // cardId为创建会员卡时微信返回的cardId { var data = new Hashtable(); data.Add("openid", openId); data.Add("card_id", cardId); var res = HttpHelper.HttpComm( string.Format("https://api.weixin.qq.com/card/user/getcardlist?access_token={0}", token), "POST", JSONHelper.ToJson(data)); var resObj = JSONHelper.FromJsonToAnonymousType(res, new { error_code = 0, errmsg = "ok", has_share_card = false, card_list = Enumerable.Repeat(new { card_id = string.Empty, code = string.Empty }, 1).ToList() }); //var resObj = JSONHelper.FromJsonTo>(res); //object info = new object(); //var str = resObj.TryGetValue("card_list", out info); if (resObj.card_list.Count == 0 || resObj.card_list == null) return false; var temp = false; for (var i = 0; i < resObj.card_list.Count; i++) { if (resObj.card_list[i].code == code) { temp = true; break; } } return temp; } 2)/User/ActiveCard(激活会员卡)
//激活会员卡 public Boolean ActiveCard(string accessToken,string bonus,string cardNo,string cardId) //bonus为用户积分 cardNo 卡号 cardId卡ID { var data = new Hashtable(); data.Add("init_bonus", bonus); data.Add("membership_number", cardNo); data.Add("code", cardNo);//上面跟这个设置相同,自定义code放在微信会员卡卡上面 data.Add("card_id", cardId); var res = HttpHelper.HttpComm( string.Format("https://api.weixin.qq.com/card/membercard/activate?access_token={0}", accessToken), "POST", JSONHelper.ToJson(data)); var resObj = JSONHelper.FromJsonToAnonymousType(res,new { errcode = "0", errmsg = "ok" }); if (resObj.errcode == "0") return true;//激活成功 return false; }上面的HttpHelper.HttpComm只是一种自己封装定义的http请求的工具类,
自己去实现发送post请求即可,就不贴出来了。
4)总结与心得
总体流程大概就是如上,我觉得已经够详细了,写这篇博客的理由就是网上关于微信这一块的知识有,但是没有很详细的,让刚接触的人不知道如何下手,虽说看文档可以看懂,但是微信官方文档有很多坑,往往在文档中一个小小的细节就让人搞个大半天,而且报的错误都比较笼统,所以就打算自己写一份比较详细的,一个呢自己总结一下经验,有助于自身成长,另一个为后来人铺路,让他们少走点弯路,往后有机会接微信其他接口,会吧流程继续贴出来,以供参考。
获取api_ticket的微信接口:这里写链接内容
也就是在下图目录下的13.1,当然也可以在第二张图上找到,都是一样的
获取jsapi_ticket的微信接口在附录一,也就是目录下的16节
这里写链接内容
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。