C#开发微信门户及运用(33)–微信现灰绿包的包装及选用

自身在上篇随笔《C#支付微信门户及选拔(32)–微信支付接入和API封装使用》介绍为微信支付的API封装及运用,在那之中介绍了怎么布置好开发环境,并对扫码支付的两种方式怎么着在C#付出中动用进行了介绍,本小说继续介绍微信支付的相关内容,介绍个中的微信现深湖蓝包和裂变红包的包装和应用。

在上篇小说后,经过对全部微信框架的宏观和重构,已经到位了对微信支付、集团付款、现威尼斯红包、代金券及各个卡劵进行了打包达成,并把内部微信支付及摇一摇红包部分等内容作为群众号和商号号通用的一部分,那几个付出有关的接口在万众号和集团号内部,都能够拓展调用的,在经过一多重的优化整治后,把这个内容逐条开始展览介绍,希望大家欢愉援救。

① 、现原野绿包的概念及应用

1)使用情状

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

◆ 卖家调用接口时,通过点名发送对象以及发送金额的点子发给红包,那样的主意,允许商家灵活的使用于五花八门丰硕的活动现象

◆ 领取到红包后,用户的费用直接进入微信零钱,防止繁复的领奖流程,带给用户微信支付原生的流利体验

 

2)微信红包发送规则

出殡频率规则

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

◆ 同一个经纪人号,每分钟最多给同一个用户发送三个红包;

红包规则

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


同叁个红包只好发送给3个用户;(如若上述规则不知足你的须要,请发邮件至wxhongbao@tencent.com获取升级辅导)

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

 

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

◆ 后台API调用:待进入联调进程时与付出展开详尽沟通;


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

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


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

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

C# 1

二 、 现月光蓝包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#代码的包裹,首先大家来定义我们供给的接口和类,如下所示。

C# 2

通过分析上边的接口表达,我们得以窥见,个中接口有一些是一定的正常参数,也正是相似民众号依旧集团号的身份新闻,有局地是事情参数,因而大家把它们各自分离出来,那样方便大家对接口的包裹和动用,那么些健康的参数大家透过群众号身份获取就足以了,业务新闻,大家能够定义3个实体类来实行数量的积存调换即可。

C# 3

对应上海体育场面的一向的例行参数,在接口表达中如下所示。

C# 4

因而,这个信息大家从账号里面安装及获得即可,我们能够在管制后台对它们实行安顿,然后在代码逻辑之中取出来使用即可。

C# 5

C# 6

基于上边包车型地铁介绍,大家得以定义红包接口代码如下所示。

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

内部的 SendRedPackJson
是我们转移的政工参数,我们定义了3个类来进行消息的承接,方便想接口传递新闻。

    /// <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安全】项目上下载证书供大家付出环境使用。

C# 7

下载证书后,在Windows环境,我们一般须求双击安装,输入所需的商户号作为密码即可。

C# 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);

 

三 、微信红包的应用结果

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

                //现金红包
                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);

马到成功调用后,我们可以在民众号的对话里面看到红包的新闻结果,如下是漫天红包发送及拆除与搬迁的进程。

C# 9     
 C# 10   
 C# 11

 

即使对那个《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#,C#支付微信门户及应用(8)-微信门户应用管理种类机能介绍

C#开发微信门户及选择(7)-微信多客服功效及支付集成

C#付出微信门户及利用(6)–微信门户菜单的管住操作

C#支出微信门户及使用(5)–用户分组音信保管

C#支付微信门户及运用(4)–关怀用户列表及详细音信管理

C#付出微信门户及应用(3)–文本新闻和图像和文字音讯的对答

C#付出微信门户及选用(2)–微信消息的处理和回答

C#支出微信门户及利用(1)–起初接纳微信接口

 

相关文章