首頁 >微信小程式 >微信開發 >C#開發微信入口網站及應用微信裂變紅包

C#開發微信入口網站及應用微信裂變紅包

高洛峰
高洛峰原創
2017-03-07 09:48:301964瀏覽

在上篇隨筆《C#開發微信門戶及應用(33)--微信現金紅包的封裝及使用》介紹了普通現金紅包的封裝和使用,這種紅包只能單獨一次發給一個人,用戶取得了紅包就完成了,如果我們讓用戶收到紅包後,可以繼續發送給多個用戶,讓他們獲得固定或隨機金額的操作,這種稱之為裂變紅包。本篇隨筆繼續上面的主題,繼續介紹其中裂變紅包的C#代碼封裝和使用操作。

1、裂變紅包介紹

領到企業裂變紅包的用戶,可以繼續幫好友領紅包,將企業紅包以裂變形式散播給更多好友,賦予行銷更多的趣味和愉悅!裂變紅包不斷強化企業品牌效應並形成裂變性傳播,是品牌宣傳的營銷利器。企業只需要指定一組紅包的個數和總金額,由微信支付計算出各紅包金額,簡單方便。

微信支付裂變紅包向微信支付商家開發,具體能力如下: 

1、商家呼叫介面時,透過指定發送金額以及指定一位發送物件的方式發放一組裂變紅包

2、指定發送對象領取到紅包後,資金直接進入微信零錢,帶給用戶微信支付原生的流暢體驗

3、指定發送對象能夠將組合中的剩餘紅包分享給好友,好友可繼續領取,形成傳播效應,放大企業品牌價值

裂變紅包的總體處理過程及接口和普通的現金紅包差別不太大,理解了現金紅包,對裂變紅包的封裝和使用過程應該是一件很容易的事。

 

裂變紅包接口,用於企業向微信用戶個人發裂變紅包

目前支援向指定微信用戶的openid發放指定金額裂變紅包。 (取得openid請參考微信公眾平台開發者文件: 網頁授權取得使用者基本資訊)

介面參數與使用者運用實際效果對應關係如下:

C#開發微信入口網站及應用微信裂變紅包


介面呼叫請求說明

請求Url https://api.mch.weixin.qq.com /mmpaymkttransfers/sendgroupredpack
是否需要憑證 是(憑證及使用說明詳見商家憑證)
請求方式 POST


和前面介紹的現金紅包一樣,我們也可以把裂變紅包的參數分成兩個部分,一個是常規參數,一個是業務參數,如下圖所示。

C#開發微信入口網站及應用微信裂變紅包

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>


根據這些規則,我們對裂變紅包的介面和實作程式碼進行了封裝,以便更好的使用。

例如我們根據普通現金紅包和裂變紅包的實體類別相似的特點,我們設計了幾個類別來儲存訊息,傳入參數的物件關係如下圖所示。

C#開發微信入口網站及應用微信裂變紅包

同樣,對於返回的發送紅包結果,由於需要考慮在錯誤的時候的信息返回和成功的信息返回,我們設計了返回結果類的關係如下所示。

C#開發微信入口網站及應用微信裂變紅包

根據上面的設計思路,​​我們設計的類別程式碼如下所示。

/// <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; }
    }


這樣,有了這些物件的程式碼,我們根據介面的說明,依舊遵循上篇隨筆介紹的介面設計方式,實現裂變紅包的程式碼處理。

C#開發微信入口網站及應用微信裂變紅包

/// <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);
        }

        ...............</sendredpackresult>

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#開發微信入口網站及應用微信裂變紅包   C#開發微信入口網站及應用微信裂變紅包  C#開發微信入口網站及應用微信裂變紅包   

由於送紅包的金額都需要大於1塊,那麼如果我們寄出的金額大一些,那麼每個人拆到的紅包金額是不等的,如下圖所示。

C#開發微信入口網站及應用微信裂變紅包

以上就是關於現金紅包和裂變紅包的介面封裝和使用過程,希望對你使用微信開發有所幫助,感謝支持。

 更多C#開發微信入口網站及應用微信裂變紅包相關文章請關注PHP中文網!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn