在上篇随笔《C#开发微信门户及应用(33)--微信现金红包的封装及使用》介绍了普通现金红包的封装和使用,这种红包只能单独一次发给一个人,用户获取了红包就完成了,如果我们让用户收到红包后,可以继续发送给多个用户,让他们获得固定或者随机金额的操作,这种称之为裂变红包。本篇随笔继续上面的主题,继续介绍其中裂变红包的C#代码封装和使用操作。

1、裂变红包介绍

领到企业裂变红包的用户,可以继续帮好友领红包,将企业红包以裂变形式散播给更多好友,赋予营销更多的趣味和愉悦!裂变红包不断强化企业品牌效应并形成裂变性传播,是品牌宣传的营销利器。企业只需要指定一组红包的个数和总金额,由微信支付计算出各红包金额,简单方便。

微信支付裂变红包向微信支付商户开发,具体能力如下:

1、商户调用接口时,通过指定发送金额以及指定一位发送对象的方式发放一组裂变红包

2、指定发送对象领取到红包后,资金直接进入微信零钱,带给用户微信支付原生的流畅体验

3、指定发送对象能够将组合中的剩余红包分享给好友,好友可继续领取,形成传播效应,放大企业品牌价值

裂变红包的总体处理过程及接口和普通的现金红包差别不太大,理解了现金红包,对裂变红包的封装和使用过程应该是很容易的事情。

裂变红包接口,用于企业向微信用户个人发裂变红包

目前支持向指定微信用户的openid发放指定金额裂变红包。(获取openid参见微信公众平台开发者文档: 网页授权获取用户基本信息)

接口参数与用户领用实际效果对应关系如下:

接口调用请求说明

请求Url https://api.mch.weixin.qq.com/mmpaymkttransfers/sendgroupredpack
是否需要证书 是(证书及使用说明详见商户证书)
请求方式 POST

和前面介绍的现金红包一样,我们也可以把裂变红包的参数分为两个部分,一个是常规参数,一个是业务参数,如下所示。

2、裂变红包的C#代码封装

从上面的传递参数我们可以把它分两部分,当我们传入下面的参数后

<xml> <sign><![CDATA[E1EE61A91C8E90F299DE6AE075D60A2D]]></sign><mch_billno><![CDATA[0010010404201411170000046545]]></mch_billno><mch_id><![CDATA[1000888888]]></mch_id><wxappid><![CDATA[wxcbda96de0b165486]]></wxappid> <send_name><![CDATA[send_name]]></send_name> <re_openid><![CDATA[onqOjjmM1tad-3ROpncN-yUfa6uI]]></re_openid> <total_amount><![CDATA[600]]></total_amount> <amt_type><![CDATA[ALL_RAND]]></amt_type> <total_num><![CDATA[3]]></total_num> <wishing><![CDATA[恭喜发财]]></wishing><act_name><![CDATA[新年红包]]></act_name> <remark><![CDATA[新年红包]]></remark> <nonce_str><![CDATA[50780e0cca98c8c8e814883e5caa672e]]></nonce_str>
</xml>

上面的传入参数提交给地址:https://api.mch.weixin.qq.com/mmpaymkttransfers/sendgroupredpack 后,成功后会返回下面的XML。

<xml> <return_code><![CDATA[SUCCESS]]></return_code> <return_msg><![CDATA[发放成功.]]></return_msg> <result_code><![CDATA[SUCCESS]]></result_code> <err_code><![CDATA[0]]></err_code> <err_code_des><![CDATA[发放成功.]]></err_code_des> <mch_billno><![CDATA[0010010404201411170000046545]]></mch_billno> <mch_id>10010404</mch_id> <wxappid><![CDATA[wx6fa7e3bab7e15415]]></wxappid> <re_openid><![CDATA[onqOjjmM1tad-3ROpncN-yUfa6uI]]></re_openid> <total_amount>3</total_amount> <send_time><![CDATA[20150227091010]]></send_time><send_listid><![CDATA[1000000000201502270093647546]]></send_listid>
</xml> 

如果失败的时候,那么返回的XML就少了很多信息,如下所示。

<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[系统繁忙,请稍后再试.]]></return_msg><result_code><![CDATA[FAIL]]></result_code><err_code><![CDATA[268458547]]></err_code><err_code_des><![CDATA[系统繁忙,请稍后再试.]]></err_code_des><mch_billno><![CDATA[0010010404201411170000046542]]></mch_billno><mch_id>10010404</mch_id><wxappid><![CDATA[wx6fa7e3bab7e15415]]></wxappid><re_openid><![CDATA[onqOjjmM1tad-3ROpncN-yUfa6uI]]></re_openid><total_amount>3</total_amount>
</xml>

根据这些规则,我们对裂变红包的接口和实现代码进行了封装,以便更好的使用。

例如我们根据普通现金红包和裂变红包的实体类相似的特点,我们设计了几个类来存储信息,传入参数的对象关系如下图所示。

同样,对于返回的发送红包结果,由于需要考虑在错误的时候的信息返回和成功的信息返回,我们设计了返回结果类的关系如下所示。

根据上面的设计思路,我们设计的类代码如下所示。

    /// <summary>/// 发送裂变红包的数据信息/// </summary>public class SendGroupRedPackJson : BaseRedPackJson{     /// <summary>/// 红包金额设置方式/// ALL_RAND—全部随机,商户指定总金额和红包发放总人数,由微信支付随机计算出各红包金额/// </summary>public string amt_type { get; set; }public SendGroupRedPackJson(){this.amt_type = "ALL_RAND";}}

结果对象类的代码如下所示。

    /// <summary>/// 发送红包的返回结果/// </summary>public class SendRedPackResult : PayResult{/// <summary>/// 商户订单号/// </summary>public string mch_billno { get; set; }/// <summary>/// 商户appid,接口传入的所有appid应该为公众号的appid(在mp.weixin.qq.com申请的),不能为APP的appid(在open.weixin.qq.com申请的)。/// </summary>public string wxappid { get; set; }/// <summary>/// 接受收红包的用户 /// 用户在wxappid下的openid/// </summary>public string re_openid { get; set; }/// <summary>/// 付款金额,单位分/// </summary>public int total_amount { get; set; }/// <summary>/// 红包发送时间/// </summary>public string send_time { get; set; }/// <summary>/// 红包订单的微信单号/// </summary>public string send_listid { get; set; }}

这样,有了这些对象的代码,我们根据接口的说明,依旧遵循上篇随笔介绍的接口设计方式,实现裂变红包的代码处理。

    /// <summary>/// 微信红包、摇一摇红包的操作API接口/// </summary>public interface ILotteryApi{              /// <summary>/// 用于企业向微信用户个人发现金红包。需要商户证书/// 目前支持向指定微信用户的openid发放指定金额红包。/// </summary>/// <returns></returns>
        SendRedPackResult SendRedPack(SendRedPackJson json);/// <summary>/// 用于企业向微信用户个人发裂变红包。需要商户证书/// 目前支持向指定微信用户的openid发放指定金额裂变红包。/// </summary>/// <returns></returns>
        SendRedPackResult SendGroupRedPack(SendGroupRedPackJson json);.............

然后实现它们的接口代码如下所示。

    /// <summary>/// 微信红包管理类/// </summary>public class LotteryApi : ILotteryApi{#region 裂变红包说明//微信支付裂变红包向微信支付商户开发,具体能力如下: //1、商户调用接口时,通过指定发送金额以及指定一位发送对象的方式发放一组裂变红包//2、指定发送对象领取到红包后,资金直接进入微信零钱,带给用户微信支付原生的流畅体验//3、指定发送对象能够将组合中的剩余红包分享给好友,好友可继续领取,形成传播效应,放大企业品牌价值#endregion/// <summary>/// 用于企业向微信用户个人发裂变红包。需要商户证书/// 目前支持向指定微信用户的openid发放指定金额裂变红包。/// </summary>/// <returns></returns>public SendRedPackResult SendGroupRedPack(SendGroupRedPackJson json){CheckAccount();//检查AccountInfo的对象属性值
WxPayData data = new WxPayData();data.SetValue("wxappid", AccountInfo.UniteAppId);//公众账号appiddata.SetValue("mch_id", AccountInfo.MchID);//商户号data.SetValue("nonce_str", data.GenerateNonceStr());//随机字符串data.SetValue("send_name", AccountInfo.Name);//    红包发送者名称//商户订单号(每个订单号必须唯一) 组成:mch_id+yyyymmdd+10位一天内不能重复的数字。//接口根据商户订单号支持重入,如出现超时可再调用。data.SetValue("mch_billno", data.GenerateOutTradeNo(AccountInfo.MchID));data.SetValue("re_openid", json.re_openid);//接收红包的种子用户(首个用户)data.SetValue("total_amount", json.total_amount);//红包发放总金额,即一组红包金额总和,包括分享者的红包和裂变的红包,单位分data.SetValue("total_num", json.total_num);//红包发放总人数,即总共有多少人可以领到该组红包(包括分享者)data.SetValue("wishing", json.wishing);//红包祝福语data.SetValue("act_name", json.act_name);data.SetValue("remark", json.remark);data.SetValue("amt_type", json.amt_type);data.SetValue("sign", data.MakeSign(AccountInfo.PayAPIKey));//最后生成签名var url = "https://api.mch.weixin.qq.com/mmpaymkttransfers/sendgroupredpack";return Helper.GetPayResultWithCert<SendRedPackResult>(data, url, AccountInfo.CertPath, AccountInfo.CertPassword);}...............

3、裂变红包接口的调用及效果展示

上面我们对裂变红包进行了接口的封装,如果我们需要发送裂变红包的时候,直接调用上面的接口即可实现红包发送的操作了。

例如调用接口的代码如下所示。

                //裂变红包SendGroupRedPackJson groupJson = new SendGroupRedPackJson(){  act_name = "恭喜发财",remark = "企业红包",wishing = "企业红包",total_amount = 600,total_num = 4,re_openid = tosendOpenId, //发送给用户的OpenID
                };var groupResult = hbApi.SendGroupRedPack(groupJson);message = string.Format("企业发送裂变红包:{0} {1}", groupResult.Success ? "成功" : "失败", groupResult.Message);Console.WriteLine(message);Console.WriteLine(groupResult.ToJson());

其中hbApi的对象初始化代码如下所示

ILotteryApi hbApi = new LotteryApi(accountInfo);

最后我们可以在微信上看到发过来的裂变红包。

     

由于发送红包的金额都需要大于1块,那么如果我们发送的金额大一些,那么每个人拆到的红包金额是不等的,如下图所示。

以上就是关于现金红包和裂变红包的接口封装和使用过程,希望对你使用微信开发有所帮助,感谢支持。

如果对这个《C#开发微信门户及应用》系列感兴趣,可以关注我的其他文章,系列随笔如下所示:

C#开发微信门户及应用(36)--微信卡劵管理的封装操作

C#开发微信门户及应用(35)--微信支付之企业付款封装操作

C#开发微信门户及应用(34)--微信裂变红包

C#开发微信门户及应用(33)--微信现金红包的封装及使用

C#开发微信门户及应用(32)--微信支付接入和API封装使用

C#开发微信门户及应用(31)--微信语义理解接口的实现和处理

C#开发微信门户及应用(30)--消息的群发处理和预览功能

C#开发微信门户及应用(28)--微信“摇一摇·周边”功能的使用和接口的实现

C#开发微信门户及应用(27)-公众号模板消息管理

C#开发微信门户及应用(26)-公众号微信素材管理

C#开发微信门户及应用(25)-微信企业号的客户端管理功能

C#开发微信门户及应用(24)-微信小店货架信息管理

C#开发微信门户及应用(23)-微信小店商品管理接口的封装和测试

C#开发微信门户及应用(22)-微信小店的开发和使用

C#开发微信门户及应用(21)-微信企业号的消息和事件的接收处理及解密

C#开发微信门户及应用(20)-微信企业号的菜单管理

C#开发微信门户及应用(19)-微信企业号的消息发送(文本、图片、文件、语音、视频、图文消息等)

C#开发微信门户及应用(18)-微信企业号的通讯录管理开发之成员管理

C#开发微信门户及应用(17)-微信企业号的通讯录管理开发之部门管理

C#开发微信门户及应用(16)-微信企业号的配置和使用

C#开发微信门户及应用(15)-微信菜单增加扫一扫、发图片、发地理位置功能

C#开发微信门户及应用(14)-在微信菜单中采用重定向获取用户数据

C#开发微信门户及应用(13)-使用地理位置扩展相关应用

C#开发微信门户及应用(12)-使用语音处理

C#开发微信门户及应用(11)--微信菜单的多种表现方式介绍

C#开发微信门户及应用(10)--在管理系统中同步微信用户分组信息

C#开发微信门户及应用(9)-微信门户菜单管理及提交到微信服务器

C#开发微信门户及应用(8)-微信门户应用管理系统功能介绍

C#开发微信门户及应用(7)-微信多客服功能及开发集成

C#开发微信门户及应用(6)--微信门户菜单的管理操作

C#开发微信门户及应用(5)--用户分组信息管理

C#开发微信门户及应用(4)--关注用户列表及详细信息管理

C#开发微信门户及应用(3)--文本消息和图文消息的应答

C#开发微信门户及应用(2)--微信消息的处理和应答

C#开发微信门户及应用(1)--开始使用微信接口

本文转自博客园伍华聪的博客,原文链接:C#开发微信门户及应用(34)--微信裂变红包,如需转载请自行联系原博主。

C#开发微信门户及应用(34)--微信裂变红包相关推荐

  1. C#开发微信门户及应用(24)-微信小店货架信息管理

    在前面微信小店系列篇<C#开发微信门户及应用(22)-微信小店的开发和使用>里面介绍了一些微信小店的基础知识,以及<C#开发微信门户及应用(23)-微信小店商品管理接口的封装和测试& ...

  2. C#开发微信门户及应用(7)-微信多客服功能及开发集成

    原文:C#开发微信门户及应用(7)-微信多客服功能及开发集成 最近一直在弄微信的集成功能开发,发现微信给认证账户开通了一个多客服的功能,对于客户的咨询,可以切换至客服处理的方式,而且可以添加多个客服进 ...

  3. C#开发微信门户及应用(9)-微信门户菜单管理及提交到微信服务器

    原文:C#开发微信门户及应用(9)-微信门户菜单管理及提交到微信服务器 微信公众号(包括服务号和订阅号)都可以对菜单进行自定义设置,我们为了方便管理,一般先把菜单数据在本地管理维护,需要更新的时候,把 ...

  4. C#开发微信门户及应用(25)-微信企业号的客户端管理功能

    C#开发微信门户及应用(25)-微信企业号的客户端管理功能 ref : http://www.cnblogs.com/wuhuacong/p/4442683.html 如果对这个<C#开发微信门 ...

  5. C#开发微信门户及应用(44)--微信H5页面开发的经验总结

    在我们开发微信页面的时候,需要大量用到了各种呈现的效果,一般可以使用Boostrap的效果来设计不同的页面,不过微信团队也提供很多这方面的资源,包括JSSDK的接口,以及Weui的页面样式和相关功能页 ...

  6. C#开发微信门户及应用(21)-微信企业号的消息和事件的接收处理及解密

    在上篇随笔<C#开发微信门户及应用(19)-微信企业号的消息发送(文本.图片.文件.语音.视频.图文消息等)>介绍了有关企业号的消息发送,官方特别声明消息是不用加密发送的.但是在回调的服务 ...

  7. C#开发微信门户及应用(8)-微信门户应用管理系统功能介绍

    原文:C#开发微信门户及应用(8)-微信门户应用管理系统功能介绍 最近对微信接口进行深入的研究,通过把底层接口一步步进行封装后,逐步升级到自动化配置.自动化应答,以及后台处理界面的优化和完善上,力求搭 ...

  8. C#开发微信门户及应用(18)-微信企业号的通讯录管理开发之成员管理

    在上篇随笔<C#开发微信门户及应用(17)-微信企业号的通讯录管理开发之部门管理>介绍了通讯录的部门的相关操作管理,通讯录管理包括部门管理.成员管理.标签管理三个部分,本篇主要介绍成员的管 ...

  9. C#开发微信门户及应用(28)--微信“摇一摇·周边”功能的使用和接口的实现

    C#开发微信门户及应用(28)--微信"摇一摇·周边"功能的使用和接口的实现 原文:C#开发微信门户及应用(28)--微信"摇一摇·周边"功能的使用和接口的实现 ...

  10. C#开发微信门户及应用(32)--微信支付接入和API封装使用

    C#开发微信门户及应用(32)--微信支付接入和API封装使用 在微信的应用上,微信支付是一个比较有用的部分,但也是比较复杂的技术要点,在微商大行其道的年代,自己的商店没有增加微信支付好像也说不过去, ...

最新文章

  1. 视频动作识别--Two-Stream Convolutional Networks for Action Recognition in Videos
  2. win7硬盘安装工具_如何重装电脑安装Win7 系统?最简单,最便捷的办法,值得收藏...
  3. 大数据相加_推动媒体融合与大数据相加发展
  4. 【华为云技术分享】《跟唐老师学习云网络》 - Kubernetes网络实现
  5. 什么是线程池?(带你初步入门理解线程池)
  6. UVA763 LA5339 Fibinary Numbers【大数】
  7. 前端开发 AMD 和 CMD 的规范区别
  8. 转 Java多线程中Sleep与Wait的区别
  9. Linux about MySQL
  10. 赶个项目,博客稍后更新
  11. thought works培训总结
  12. Sketch for mac|矢量绘图设计
  13. 图像处理算法工程师必备技能总结
  14. 拼多多api接口应用示例
  15. windows系统信息修改
  16. 中国超级计算机gpu,英伟达(NVIDIA)Tesla GPU为全球最快的超级计算机提供动力支持...
  17. 黄章出山的730天:牢牢掌控魅族,绝不放权!
  18. php 开头结尾,php 字符串 以什么开头 开头开始 以什么结尾 结束 包含 startWith endWith 字符串包含 有大用...
  19. win10计算机恢复,win10 重置电脑 选择哪个?要恢復到新电脑的那样
  20. 文旅夜游产业未来如何发展?

热门文章

  1. 数字信号处理中均值、均方值、均方差、均方根值、均方误差、均方根误差、方差、协方差、标准差对比分析及统计学意义
  2. 大秦帝国------令人神往的时代
  3. MATLAB 显示和保存傅里叶变化频谱图
  4. iOS小知识:nib本地化、图片本地化字符串本地化(APP 内的本地化切换)
  5. 关于CSDN书写的博客内容中图片不显示的问题
  6. python读取文件并替换字段_python 读取文件并替换字段的实例
  7. word 的图片如何设置随意拖动或者说关闭任意拖动?
  8. JAVA设计模式——享元模式
  9. 微信图片怎么添加竖排文字_微信图文排版怎么在图片上加文字?
  10. jQuery获取兄弟元素