亚洲精品亚洲人成在线观看麻豆,在线欧美视频一区,亚洲国产精品一区二区动图,色综合久久丁香婷婷

              當(dāng)前位置:首頁 > IT技術(shù) > 微信平臺(tái) > 正文

              C#開發(fā)微信門戶及應(yīng)用(34)--微信裂變紅包
              2021-07-26 10:34:59

              C#開發(fā)微信門戶及應(yīng)用(34)--微信裂變紅包

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

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

              1、裂變紅包介紹

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

              微信支付裂變紅包向微信支付商戶開發(fā),具體能力如下:?

              1、商戶調(diào)用接口時(shí),通過指定發(fā)送金額以及指定一位發(fā)送對(duì)象的方式發(fā)放一組裂變紅包

              2、指定發(fā)送對(duì)象領(lǐng)取到紅包后,資金直接進(jìn)入微信零錢,帶給用戶微信支付原生的流暢體驗(yàn)

              3、指定發(fā)送對(duì)象能夠?qū)⒔M合中的剩余紅包分享給好友,好友可繼續(xù)領(lǐng)取,形成傳播效應(yīng),放大企業(yè)品牌價(jià)值

              裂變紅包的總體處理過程及接口和普通的現(xiàn)金紅包差別不太大,理解了現(xiàn)金紅包,對(duì)裂變紅包的封裝和使用過程應(yīng)該是很容易的事情。

              ?

              裂變紅包接口,用于企業(yè)向微信用戶個(gè)人發(fā)裂變紅包

              目前支持向指定微信用戶的openid發(fā)放指定金額裂變紅包。(獲取openid參見微信公眾平臺(tái)開發(fā)者文檔:?網(wǎng)頁授權(quán)獲取用戶基本信息)

              接口參數(shù)與用戶領(lǐng)用實(shí)際效果對(duì)應(yīng)關(guān)系如下:

              C#開發(fā)微信門戶及應(yīng)用(34)--微信裂變紅包_微信公眾平臺(tái)及門戶應(yīng)用

              接口調(diào)用請求說明

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

              和前面介紹的現(xiàn)金紅包一樣,我們也可以把裂變紅包的參數(shù)分為兩個(gè)部分,一個(gè)是常規(guī)參數(shù),一個(gè)是業(yè)務(wù)參數(shù),如下所示。

              C#開發(fā)微信門戶及應(yīng)用(34)--微信裂變紅包_微信公眾平臺(tái)及門戶應(yīng)用_02

              2、裂變紅包的C#代碼封裝

              從上面的傳遞參數(shù)我們可以把它分兩部分,當(dāng)我們傳入下面的參數(shù)后

              <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[恭喜發(fā)財(cái)]]></wishing>
                 <act_name><![CDATA[新年紅包]]></act_name> 
                 <remark><![CDATA[新年紅包]]></remark> 
                 <nonce_str><![CDATA[50780e0cca98c8c8e814883e5caa672e]]></nonce_str> 
              </xml>

              上面的傳入?yún)?shù)提交給地址:https://api.mch.weixin.qq.com/mmpaymkttransfers/sendgroupredpack?后,成功后會(huì)返回下面的XML。

              <xml> 
                 <return_code><![CDATA[SUCCESS]]></return_code> 
                 <return_msg><![CDATA[發(fā)放成功.]]></return_msg> 
                 <result_code><![CDATA[SUCCESS]]></result_code> 
                 <err_code><![CDATA[0]]></err_code> 
                 <err_code_des><![CDATA[發(fā)放成功.]]></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> 

              如果失敗的時(shí)候,那么返回的XML就少了很多信息,如下所示。

              <xml>
                 <return_code><![CDATA[FAIL]]></return_code>
                 <return_msg><![CDATA[系統(tǒng)繁忙,請稍后再試.]]></return_msg>
                 <result_code><![CDATA[FAIL]]></result_code>
                 <err_code><![CDATA[268458547]]></err_code>
                 <err_code_des><![CDATA[系統(tǒng)繁忙,請稍后再試.]]></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>

              根據(jù)這些規(guī)則,我們對(duì)裂變紅包的接口和實(shí)現(xiàn)代碼進(jìn)行了封裝,以便更好的使用。

              例如我們根據(jù)普通現(xiàn)金紅包和裂變紅包的實(shí)體類相似的特點(diǎn),我們設(shè)計(jì)了幾個(gè)類來存儲(chǔ)信息,傳入?yún)?shù)的對(duì)象關(guān)系如下圖所示。

              C#開發(fā)微信門戶及應(yīng)用(34)--微信裂變紅包_編程_03

              同樣,對(duì)于返回的發(fā)送紅包結(jié)果,由于需要考慮在錯(cuò)誤的時(shí)候的信息返回和成功的信息返回,我們設(shè)計(jì)了返回結(jié)果類的關(guān)系如下所示。

              C#開發(fā)微信門戶及應(yīng)用(34)--微信裂變紅包_編程_04

              根據(jù)上面的設(shè)計(jì)思路,我們設(shè)計(jì)的類代碼如下所示。

                  /// <summary>
                  /// 發(fā)送裂變紅包的數(shù)據(jù)信息
                  /// </summary>
                  public class SendGroupRedPackJson : BaseRedPackJson
                  {     
                      /// <summary>
                      /// 紅包金額設(shè)置方式
                      /// ALL_RAND—全部隨機(jī),商戶指定總金額和紅包發(fā)放總?cè)藬?shù),由微信支付隨機(jī)計(jì)算出各紅包金額
                      /// </summary>
                      public string amt_type { get; set; }
              
                      public SendGroupRedPackJson()
                      {
                          this.amt_type = "ALL_RAND";
                      }
                  }

              結(jié)果對(duì)象類的代碼如下所示。

                  /// <summary>
                  /// 發(fā)送紅包的返回結(jié)果
                  /// </summary>
                  public class SendRedPackResult : PayResult
                  {
                      /// <summary>
                      /// 商戶訂單號(hào)
                      /// </summary>
                      public string mch_billno { get; set; }
              
                      /// <summary>
                      /// 商戶appid,接口傳入的所有appid應(yīng)該為公眾號(hào)的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>
                      /// 紅包發(fā)送時(shí)間
                      /// </summary>
                      public string send_time { get; set; }
                      /// <summary>
                      /// 紅包訂單的微信單號(hào)
                      /// </summary>
                      public string send_listid { get; set; }
                  }

              這樣,有了這些對(duì)象的代碼,我們根據(jù)接口的說明,依舊遵循上篇隨筆介紹的接口設(shè)計(jì)方式,實(shí)現(xiàn)裂變紅包的代碼處理。

              C#開發(fā)微信門戶及應(yīng)用(34)--微信裂變紅包_編程_05

                  /// <summary>
                  /// 微信紅包、搖一搖紅包的操作API接口
                  /// </summary>
                  public interface ILotteryApi
                  {              
                      /// <summary>
                      /// 用于企業(yè)向微信用戶個(gè)人發(fā)現(xiàn)金紅包。需要商戶證書
                      /// 目前支持向指定微信用戶的openid發(fā)放指定金額紅包。
                      /// </summary>
                      /// <returns></returns>
                      SendRedPackResult SendRedPack(SendRedPackJson json);
              
                      /// <summary>
                      /// 用于企業(yè)向微信用戶個(gè)人發(fā)裂變紅包。需要商戶證書
                      /// 目前支持向指定微信用戶的openid發(fā)放指定金額裂變紅包。
                      /// </summary>
                      /// <returns></returns>
                      SendRedPackResult SendGroupRedPack(SendGroupRedPackJson json);
              
                      .............

              然后實(shí)現(xiàn)它們的接口代碼如下所示。

                  /// <summary>
                  /// 微信紅包管理類
                  /// </summary>
                  public class LotteryApi : ILotteryApi
                  {
                      #region 裂變紅包說明
                      //微信支付裂變紅包向微信支付商戶開發(fā),具體能力如下: 
                      //1、商戶調(diào)用接口時(shí),通過指定發(fā)送金額以及指定一位發(fā)送對(duì)象的方式發(fā)放一組裂變紅包
                      //2、指定發(fā)送對(duì)象領(lǐng)取到紅包后,資金直接進(jìn)入微信零錢,帶給用戶微信支付原生的流暢體驗(yàn)
                      //3、指定發(fā)送對(duì)象能夠?qū)⒔M合中的剩余紅包分享給好友,好友可繼續(xù)領(lǐng)取,形成傳播效應(yīng),放大企業(yè)品牌價(jià)值
                      #endregion
              
                      /// <summary>
                      /// 用于企業(yè)向微信用戶個(gè)人發(fā)裂變紅包。需要商戶證書
                      /// 目前支持向指定微信用戶的openid發(fā)放指定金額裂變紅包。
                      /// </summary>
                      /// <returns></returns>
                      public SendRedPackResult SendGroupRedPack(SendGroupRedPackJson json)
                      {
                          CheckAccount();//檢查AccountInfo的對(duì)象屬性值
              
                          WxPayData data = new WxPayData();
                          data.SetValue("wxappid", AccountInfo.UniteAppId);//公眾賬號(hào)appid
                          data.SetValue("mch_id", AccountInfo.MchID);//商戶號(hào)
                          data.SetValue("nonce_str", data.GenerateNonceStr());//隨機(jī)字符串
                          data.SetValue("send_name", AccountInfo.Name);//    紅包發(fā)送者名稱
                          
                          //商戶訂單號(hào)(每個(gè)訂單號(hào)必須唯一) 組成:mch_id+yyyymmdd+10位一天內(nèi)不能重復(fù)的數(shù)字。
                          //接口根據(jù)商戶訂單號(hào)支持重入,如出現(xiàn)超時(shí)可再調(diào)用。
                          data.SetValue("mch_billno", data.GenerateOutTradeNo(AccountInfo.MchID));
              
                          data.SetValue("re_openid", json.re_openid);//接收紅包的種子用戶(首個(gè)用戶)
                          data.SetValue("total_amount", json.total_amount);//紅包發(fā)放總金額,即一組紅包金額總和,包括分享者的紅包和裂變的紅包,單位分
                          data.SetValue("total_num", json.total_num);//紅包發(fā)放總?cè)藬?shù),即總共有多少人可以領(lǐng)到該組紅包(包括分享者)
                          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);
                      }
              
                      ...............

              ?

              3、裂變紅包接口的調(diào)用及效果展示

              上面我們對(duì)裂變紅包進(jìn)行了接口的封裝,如果我們需要發(fā)送裂變紅包的時(shí)候,直接調(diào)用上面的接口即可實(shí)現(xiàn)紅包發(fā)送的操作了。

              例如調(diào)用接口的代碼如下所示。

                              //裂變紅包
                              SendGroupRedPackJson groupJson = new SendGroupRedPackJson()
                              {  
                                  act_name = "恭喜發(fā)財(cái)",
                                  remark = "企業(yè)紅包",
                                  wishing = "企業(yè)紅包",
                                  total_amount = 600,
                                  total_num = 4,
                                  re_openid = tosendOpenId, //發(fā)送給用戶的OpenID
                              };
              
                              var groupResult = hbApi.SendGroupRedPack(groupJson);
                              message = string.Format("企業(yè)發(fā)送裂變紅包:{0} {1}", groupResult.Success ? "成功" : "失敗", groupResult.Message);
                              Console.WriteLine(message);
                              Console.WriteLine(groupResult.ToJson());

              其中hbApi的對(duì)象初始化代碼如下所示

              ILotteryApi hbApi = new LotteryApi(accountInfo);

              最后我們可以在微信上看到發(fā)過來的裂變紅包。

              C#開發(fā)微信門戶及應(yīng)用(34)--微信裂變紅包_微信公眾平臺(tái)及門戶應(yīng)用_06? ?C#開發(fā)微信門戶及應(yīng)用(34)--微信裂變紅包_編程_07??C#開發(fā)微信門戶及應(yīng)用(34)--微信裂變紅包_微信公眾平臺(tái)及門戶應(yīng)用_08? ?

              由于發(fā)送紅包的金額都需要大于1塊,那么如果我們發(fā)送的金額大一些,那么每個(gè)人拆到的紅包金額是不等的,如下圖所示。

              C#開發(fā)微信門戶及應(yīng)用(34)--微信裂變紅包_編程_09

              以上就是關(guān)于現(xiàn)金紅包和裂變紅包的接口封裝和使用過程,希望對(duì)你使用微信開發(fā)有所幫助,感謝支持。

              ?

              ?

              C#開發(fā)微信門戶及應(yīng)用(34)--微信裂變紅包_編程_10主要研究技術(shù):代碼生成工具、會(huì)員管理系統(tǒng)、客戶關(guān)系管理軟件、病人資料管理軟件、Visio二次開發(fā)、酒店管理系統(tǒng)、倉庫管理系統(tǒng)等共享軟件開發(fā)
              專注于Winform開發(fā)框架/混合式開發(fā)框架、Web開發(fā)框架、Bootstrap開發(fā)框架、微信門戶開發(fā)框架的研究及應(yīng)用。
              ??轉(zhuǎn)載請注明出處:
              C#開發(fā)微信門戶及應(yīng)用(34)--微信裂變紅包_編程_10撰寫人:伍華聰? ?

              本文摘自 :https://blog.51cto.com/w

              開通會(huì)員,享受整站包年服務(wù)立即開通 >