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

在上篇隨筆《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

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前By尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。