作者:love留着对她说吧 | 来源:互联网 | 2017-05-11 01:14
领到企业裂变红包的用户,可以继续帮好友领红包,将企业红包以裂变形式散播给更多好友,赋予营销更多的趣味和愉悦!裂变红包不断强化企业品牌效应并形成裂变性传播,是品牌宣传的营销利器。企业只需要指定一组红包的个数和总金额,由微信支付计算出各红包金额,简单方便。
在上篇随笔《C#开发微信门户及应用(33)--微信现金红包的封装及使用》介绍了普通现金红包的封装和使用,这种红包只能单独一次发给一个人,用户获取了红包就完成了,如果我们让用户收到红包后,可以继续发送给多个用户,让他们获得固定或者随机金额的操作,这种称之为裂变红包。本篇随笔继续上面的主题,继续介绍其中裂变红包的C#代码封装和使用操作。
1、裂变红包介绍
领到企业裂变红包的用户,可以继续帮好友领红包,将企业红包以裂变形式散播给更多好友,赋予营销更多的趣味和愉悦!裂变红包不断强化企业品牌效应并形成裂变性传播,是品牌宣传的营销利器。企业只需要指定一组红包的个数和总金额,由微信支付计算出各红包金额,简单方便。
微信支付裂变红包向微信支付商户开发,具体能力如下:
1、商户调用接口时,通过指定发送金额以及指定一位发送对象的方式发放一组裂变红包
2、指定发送对象领取到红包后,资金直接进入微信零钱,带给用户微信支付原生的流畅体验
3、指定发送对象能够将组合中的剩余红包分享给好友,好友可继续领取,形成传播效应,放大企业品牌价值
裂变红包的总体处理过程及接口和普通的现金红包差别不太大,理解了现金红包,对裂变红包的封装和使用过程应该是很容易的事情。
裂变红包接口,用于企业向微信用户个人发裂变红包
目前支持向指定微信用户的openid发放指定金额裂变红包。(获取openid参见微信公众平台开发者文档: 网页授权获取用户基本信息)
接口参数与用户领用实际效果对应关系如下:
2、裂变红包的C#代码封装
从上面的传递参数我们可以把它分两部分,当我们传入下面的参数后
上面的传入参数提交给地址:https://api.mch.weixin.qq.com/mmpaymkttransfers/sendgroupredpack后,成功后会返回下面的XML。
10010404
3
如果失败的时候,那么返回的XML就少了很多信息,如下所示。
10010404
3
根据这些规则,我们对裂变红包的接口和实现代码进行了封装,以便更好的使用。
例如我们根据普通现金红包和裂变红包的实体类相似的特点,我们设计了几个类来存储信息,传入参数的对象关系如下图所示。
根据上面的设计思路,我们设计的类代码如下所示。
///
/// 发送裂变红包的数据信息
///
public class SendGroupRedPackJson : BaseRedPackJson
{
///
/// 红包金额设置方式
/// ALL_RAND—全部随机,商户指定总金额和红包发放总人数,由微信支付随机计算出各红包金额
///
public string amt_type { get; set; }
public SendGroupRedPackJson()
{
this.amt_type = "ALL_RAND";
}
}
结果对象类的代码如下所示。
///
/// 发送红包的返回结果
///
public class SendRedPackResult : PayResult
{
///
/// 商户订单号
///
public string mch_billno { get; set; }
///
/// 商户appid,接口传入的所有appid应该为公众号的appid(在mp.weixin.qq.com申请的),不能为APP的appid(在open.weixin.qq.com申请的)。
///
public string wxappid { get; set; }
///
/// 接受收红包的用户
/// 用户在wxappid下的openid
///
public string re_openid { get; set; }
///
/// 付款金额,单位分
///
public int total_amount { get; set; }
///
/// 红包发送时间
///
public string send_time { get; set; }
///
/// 红包订单的微信单号
///
public string send_listid { get; set; }
}
这样,有了这些对象的代码,我们根据接口的说明,依旧遵循上篇随笔介绍的接口设计方式,实现裂变红包的代码处理。
///
/// 微信红包、摇一摇红包的操作API接口
///
public interface ILotteryApi
{
///
/// 用于企业向微信用户个人发现金红包。需要商户证书
/// 目前支持向指定微信用户的openid发放指定金额红包。
///
///
SendRedPackResult SendRedPack(SendRedPackJson json);
///
/// 用于企业向微信用户个人发裂变红包。需要商户证书
/// 目前支持向指定微信用户的openid发放指定金额裂变红包。
///
///
SendRedPackResult SendGroupRedPack(SendGroupRedPackJson json);
.............
然后实现它们的接口代码如下所示。
///
/// 微信红包管理类
///
public class LotteryApi : ILotteryApi
{
#region 裂变红包说明
//微信支付裂变红包向微信支付商户开发,具体能力如下:
//1、商户调用接口时,通过指定发送金额以及指定一位发送对象的方式发放一组裂变红包
//2、指定发送对象领取到红包后,资金直接进入微信零钱,带给用户微信支付原生的流畅体验
//3、指定发送对象能够将组合中的剩余红包分享给好友,好友可继续领取,形成传播效应,放大企业品牌价值
#endregion
///
/// 用于企业向微信用户个人发裂变红包。需要商户证书
/// 目前支持向指定微信用户的openid发放指定金额裂变红包。
///
///
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(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);
最后我们可以在微信上看到发过来的裂变红包。
以上就是关于现金红包和裂变红包的接口封装和使用过程,希望对你使用微信开发有所帮助,感谢支持。
更多C#开发微信门户及应用微信裂变红包相关文章请关注PHP中文网!