微信现金红包的包装及应用

本人在上篇小说《C#付出微信门户及使用(32)–微信支付接入和API封装使用》介绍为微信支付的API封装及使用,其中介绍了什么样安插好开发环境,并对扫码支付的三种方法如何在C#支付中行使进行了介绍,本小说继续介绍微信支付的有关内容,介绍其中的微信现金红包和裂变红包的卷入和使用。

在上篇小说后,经过对全部微信框架的健全和重构,已经形成了对微信支付、集团付款、现金红包、代金券及种种卡劵举办了包装达成,并把其中微信支付及摇一摇红包部分等情节作为民众号和商社号通用的片段,这一个付出有关的接口在公众号和商家号内部,都得以展开调用的,在经过一多元的优化整治后,把这么些内容逐条举办介绍,希望大家喜爱帮助。

1、现金红包的概念及使用

1)使用情况

微信支付现金红包向微信支付经纪人开发,具体能力如下:

◆ 商户调用接口时,通过点名发送对象以及发送金额的法门发放红包,那样的章程,允许商户灵活的接纳于五花八门丰盛的运动现象

◆ 领取到红包后,用户的资本一贯进去微信零钱,防止繁复的领奖流程,带给用户微信支付原生的流利体验

 

2)微信红包发送规则

出殡频率规则

◆ 每分钟发(英文名:zhōng fā)送红包数量不足领先1800个;

◆ 同一个商贩号,每分钟最多给同一个用户发送一个红包;

红包规则

◆ 单个红包金额介于[1.00元,200.00元]之间;


同一个红包只可以发送给一个用户;(借使上述规则不满意你的必要,请发邮件至wxhongbao@tencent.com获取升级率领)

◆ 红包发给后72钟头未被领取将举行退款

 

3) 微信红包接口调用流程

◆ 后台API调用:待进入联调进度时与付出进展详尽互换;


告知服务器:告知服务器收到微信红包的用户openID,告知服务器该用户得到的金额;

◆ 从商务号扣款:服务器获取新闻后从对应的商务号扣取对应的金额;


调用败北:因不符合发送规则,商务号余额不足等原因促成调用失利,反馈至调用方;

◆ 发送成功:以微信红包青天众账号发送对应红包至对应用户;

必发bifa88手机客服端 1

2、 现金红包API接口的辨证及C#的封装

用以集团向微信用户个人发现金红包,如今援助向指定微信用户的openid发放指定金额红包。

纵然可以通过微信的商户后台进行现金红包的发给,但大家也能够动用微信提供的接口API进行现金红包的殡葬。

接口调用请求表达

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

伸手参数

字段名 字段 必填 示例值 类型 说明
随机字符串 nonce_str 5K8264ILTKCH16CQ2502SI8ZNMTM67VS String(32) 随机字符串,不长于32位
签名 sign C380BEC2BFD727A4B6845133519F3AD6 String(32) 详见签名生成算法
商户订单号 mch_billno 10000098201411111234567890 String(28)

商户订单号(每个订单号必须唯一)

组成:mch_id+yyyymmdd+10位一天内不能重复的数字。

接口根据商户订单号支持重入,如出现超时可再调用。

商户号 mch_id 10000098 String(32) 微信支付分配的商户号
公众账号appid wxappid wx8888888888888888 String(32) 微信分配的公众账号ID(企业号corpid即为此appId)。接口传入的所有appid应该为公众号的appid(在mp.weixin.qq.com申请的),不能为APP的appid(在open.weixin.qq.com申请的)。
商户名称 send_name 天虹百货 String(32) 红包发送者名称
用户openid re_openid oxTWIuGaIt6gTKsQRLau2M0yL16E String(32)

接受红包的用户

用户在wxappid下的openid

付款金额 total_amount 1000 int 付款金额,单位分
红包发放总人数 total_num 1 int

红包发放总人数

total_num=1

红包祝福语 wishing 感谢您参加猜灯谜活动,祝您元宵节快乐! String(128) 红包祝福语
Ip地址 client_ip 192.168.0.1 String(15) 调用接口的机器Ip地址
活动名称 act_name 猜灯谜抢红包活动 String(32) 活动名称
备注 remark 猜越多得越多,快来抢! String(256) 备注信息

数量示例:

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

地方是接口及输入参数的认证,一般意况下,大家要求依照那个来控制哪些促成C#代码的卷入,首先大家来定义大家需求的接口和类,如下所示。

必发bifa88手机客服端 2

因此分析下边的接口表达,大家可以发现,其中接口有局地是原则性的例行参数,也就是相似民众号如故商店号的身份新闻,有一对是业务参数,由此大家把它们分别分离出来,这样方便大家对接口的包裹和应用,那多少个健康的参数我们透过群众号身份得到就足以了,业务音讯,我们得以定义一个实体类来展开数量的蕴藏沟通即可。

必发bifa88手机客服端 3

对应上图的一定的例行参数,在接口表达中如下所示。

必发bifa88手机客服端 4

为此,那几个新闻大家从账号里面安装及获得即可,我们得以在治本后台对它们进行布置,然后在代码逻辑之中取出来使用即可。

必发bifa88手机客服端 5

必发bifa88手机客服端 6

按照下边的介绍,大家得以定义红包接口代码如下所示。

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

内部的 SendRedPackJson
是大家转移的政工参数,大家定义了一个类来举办信息的承载,方便想接口传递音信。

    /// <summary>
    /// 现金红包和裂变红包的基础信息
    /// </summary>
    public class BaseRedPackJson
    {
        /// <summary>
        /// 接受红包的用户
        /// 用户openid    
        /// </summary>
        public string re_openid { get; set; }

        /// <summary>
        /// 付款金额,单位分
        /// </summary>
        public int total_amount { get; set; }

        /// <summary>
        /// 红包发放总人数
        /// </summary>
        public int total_num { get; set; }

        /// <summary>
        /// 红包祝福语
        /// </summary>
        public string wishing { get; set; }

        /// <summary>
        /// 活动名称
        /// </summary>
        public string act_name { get; set; }

        /// <summary>
        /// 备注信息
        /// </summary>
        public string remark { get; set; }
    }

    /// <summary>
    /// 发送红包的数据信息
    /// </summary>
    public class SendRedPackJson :BaseRedPackJson
    {
        /// <summary>
        /// 调用接口的机器Ip地址
        /// </summary>
        public string client_ip { get; set; }

        public SendRedPackJson()
        {
            this.total_num = 1;//红包发放总人数
        }
    }

据悉地点参数的定义,大家在现款红包的接口达成里面,具体代码如下所示,里面的逻辑内容,首要就是传播常规参数和事情参数两片段,然后调用接口的地方进行数据的提交(POST),获取再次来到结果并开展辨析即可。

        /// <summary>
        /// 用于企业向微信用户个人发现金红包。需要商户证书
        /// 目前支持向指定微信用户的openid发放指定金额红包。
        /// </summary>
        /// <returns></returns>
        public SendRedPackResult SendRedPack(SendRedPackJson 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("client_ip", json.client_ip);
            data.SetValue("act_name", json.act_name);
            data.SetValue("remark", json.remark);

            data.SetValue("sign", data.MakeSign(AccountInfo.PayAPIKey));//最后生成签名

            var url = "https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack";
            return Helper.GetPayResultWithCert<SendRedPackResult>(data, url, AccountInfo.CertPath, AccountInfo.CertPassword);
        }

中间发送红包操作是索要阐明的,因而须求添加对应的证书,证书是从微信的经纪人平台上展开下载的。

在商贩后台的【API安全】项目上下载证书供大家付出环境使用。

必发bifa88手机客服端 7

下载证书后,在Windows环境,大家一般必要双击安装,输入所需的商户号作为密码即可。

必发bifa88手机客服端 8

在代码里面,大家可以使用证书类进行添加

            HttpHelper helper = new HttpHelper();

            helper.ClientCertificates = new X509CertificateCollection();
            certPath = Path.Combine(System.Environment.CurrentDirectory, certPath);
            helper.ClientCertificates.Add(new X509Certificate2(certPath, certPassword));
            string response = helper.GetHtml(url, xml, true);

 

3、微信红包的选取结果

 例如,我们在测试例子里面调用代码如下所示。

                //现金红包
                SendRedPackJson packJson = new SendRedPackJson()
                {
                    act_name = "恭喜发财",
                    client_ip = NetworkUtil.GetIPAddress(),
                    remark = "企业红包",
                    wishing = "企业红包",
                    total_amount = 100,
                    total_num = 1,
                    re_openid = tosendOpenId //发送给用户的OpenID
                };
                var result = hbApi.SendRedPack(packJson);
                var message = string.Format("企业发送红包:{0} {1}", result.Success ? "成功" : "失败", result.Message);
                Console.WriteLine(message);
                Console.WriteLine(result.ToJson());

其间的hbApi是地点接口的结构,如下代码所示。

 AccountInfo  accountInfo = new AccountInfo()
    {
       Name = this.SendName,
        AppID = this.AppId,
        AppSecret = this.AppSecret,
        MchID = this.MchID,
        PayAPIKey = this.PayAPIKey,
        CertPath = this.CertPath,
        CertPassword = this.CertPassword,
         PayNotifyUrl = this.PayNotifyUrl
     };
 ILotteryApi hbApi = new LotteryApi(accountInfo);

得逞调用后,大家得以在本田(Honda)号的对话里面来看红包的新闻结果,如下是全部红包发送及拆迁的历程。

必发bifa88手机客服端 9     
 必发bifa88手机客服端 10   
 必发bifa88手机客服端 11

 

假使对那几个《C#付出微信门户及运用》连串感兴趣,可以关心我的任何作品,体系小说如下所示:

C#付出微信门户及运用(36)–微信卡劵管理的包裹操作

C#支出微信门户及使用(35)–微信支付之集团付款封装操作

C#支付微信门户及运用(34)–微信裂变红包

C#开发微信门户及应用(33)–微信现金红包的包裹及利用

必发bifa88手机客服端,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)–开首选用微信接口

 

相关文章