价值200元的小程序卡劵开发免费送
为啥我把标题取这个名称呢,在业务上突然需要卡券这块功能的时候,当时除了官网的文档外,几乎没有任何资料、度娘了好久、在csdn上才找到个相关的视频、而且呢?要花200大洋才能看,身为不太上进的老程序猿、没有那个学习的动力去花这个钱(而且不知道花了这200块,也不一定能有所我想要的),后面花了几天的时候才慢慢摸索出来。
那我们就直接开门见山,为大家写了个c#版的小程序卡券
卡券对于营销来说,是个必备不可少的手段,今天我们来看下具有营销力的小程序中的卡券怎么做,主要掌握流程、理解代码才能为已所用,现我为大家介绍我的理解,希望能帮助到大家。
准备工作:
公众号appID appSecret,这里需要开通这个功用的帐号才行
第一步:先获取token(这相当个令牌,后面很多接口都需要用到)
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&
后面要加拼appid, appSecret这两个的值,get请求
第二步:获取卡卷列表(我们先要在小程序里展示优惠卷列表,这样才方便访客领取)
https://api.weixin.qq.com/card/batchget?access_token=
这里的参数就是要加 第一步中取到的Token值
上面是接口的链接,但是我们还需要post一些数据过去如下:
string postStr = "{\"offset\": 0,\"count\": 20, \"status_list\": [\"CARD_STATUS_VERIFY_OK\", \"CARD_STATUS_DISPATCH\"]}";
这里的参数的意思,大家可以参考下官网的解释,比如count是获取最多20个卡券信息、后面就是获取卡券的一些其它条件了。
如果我们第二步请求成功,就会返回一个xml的数据,这里我们可以用个xml转json的方法,然后再去获取我们想要的一些字段数据
例:
string card_list_json = CardTools.get_cardList(get_token()); //获取卡券列表
JsonData cardList = JsonMapper.ToObject(card_list_json);
if (cardList["errcode"].ToString() == "0")
{
//Log.Info("卡券ID:" + cardList["card_id_list"].ToString() + ",总数:" + cardList["total_num"].ToString());
try
{
return card_list_json;
}
catch (KeyNotFoundException ex)
{
Log.Info(ex.Message);
throw;
}
}
那么卡券的列表我们取到了,这个应该要展示在小程序上去(建议大家这里是保存在自己的服务器,后可以自己弄个接口提供给小程序 不然我们小程序一请求都得到微信那边去请求,速度可能不是太理想或者有一定的请求次数限制)
第三步:用户领取(小程序既然已经有优惠卷列表了,这个时候应该由我们用户去领取了)
小程序领取的方法:wx.addCard接口、把卡卷添加到用户卡卷包里
其中cardList作为参数包含(见官网)
1、cardId:卡卷ID
2、cardExt:卡卷必填参数
code:投放码,最简单的就是用系统默认的,填空(其它需求不同)
openid:指定领取用户的Openid,不填则不指定
timestamp:时间戳
nonce_str:随机字符串
signature:签名★(和支付有点类似)
以上几个参数code我们就用系统默认的,openid一般情况我们不会指定用户就填空 timestamp我们直接用后台生成一个就好了,nonce_str也是后台自定义一个,唯有难一点的就是签名signature了
我们分别把以上数据 nonce_str 、timestamp 、cardId 、以及官网上写的签名要用到的api_ticket
(api_ticket没有,我们就需要获取api_ticket),获取接口如下:
https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=wx_card&access_token=
接口参数:token(第一步就取到了)
通过这个接口我们就能获取api_ticket
然后我们就得按官网上所说的https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115 最后面签名说明有写,把这几个参数按字典排序(就是asc码排序吧),然后拼成的一个总字符串再用sha1加密,得到的最终字符串就是我们要的signature了
参考代码:
string noncestr = CardTools.get_noncestr(); //随机字符串
string timestamp = CardTools.GenerateTimeStamp();//时间戳
string token = get_token();
JsonData tick_json = JsonMapper.ToObject(CardTools.get_ticket(model.MobilePage,token));
string api_ticket = tick_json["ticket"].ToString();//tick签名
string card_id = CardId;
Dictionary<string, string> dic1 = new Dictionary<string,string>();
dic1.Add("nonceStr", noncestr);
dic1.Add("api_ticket", api_ticket);
dic1.Add("timestamp", timestamp);
dic1.Add("card_id", card_id);
List<KeyValuePair<string, string>> lst = new List<KeyValuePair<string, string>>(dic1);
lst.Sort(delegate(KeyValuePair<string, string> s1, KeyValuePair<string, string> s2)
{
return s1.Value.CompareTo(s2.Value);
});
dic1.Clear();
StringBuilder sign = new StringBuilder();
foreach (KeyValuePair<string, string> kvp in lst)
{
sign.Append(kvp.Value);
}
Log.Info("签名排序后的串为:"+sign.ToString());
获取最终的字符串之后,我们再通过sha1加密,就得到我们想要的signature签名了。
到了这里,我们wx.addCard的要传的参数就算是完成了,这样用户就能成功领取到卡券了。
那么后面还有卡券的使用、内容非常多、这个就要慢慢去探索了
看到这里,希望以上内容对你有所帮助,我初来炸到、注册了csdn还是第一次用,希望大家多多支持鼓励、微信扫一扫,5块、10块随便意思一下,更重要的是能使我更有激情和动力、身为码农的大家都不易、且看且珍惜,哈哈。
最后总结一下:新东西摸索是需要花很多时间,但是一但明白了,内容就非常简单,如果有人指引那是不是将事半功倍。
前面提到的内容,作为常用的我们应该把他存在服务器缓存起来,这样不需要每次去请求,提升速度效率,而且微信端一般都是有个缓存时间7200s,比如token很多地方都需要用,这个我们就可以缓存起来,到期再请求的这种,可以减少我们很多不必要的请求。