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);//公众账号appid data.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); } ...............
上面我们对裂变红包进行了接口的封装,如果我们需要发送裂变红包的时候,直接调用上面的接口即可实现红包发送的操作了。
//裂变红包 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块,那么如果我们发送的金额大一些,那么每个人拆到的红包金额是不等的,如下图所示。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。