微信公衆號搶現金紅包活動的核心代碼分析(asp.net C#)

 今年春節微信搶紅包,我想各位都還記得。最近不少商家也在使用公衆號給粉絲髮紅包,作營銷活動、吸粉活動或者是反饋老用戶等。html

咱們做爲第3方開發者,就責無旁貸的來給這些商家服務了。首先咱們得會使用程序來寫搶紅包。web

紅包使用說明及規則,請仔細閱讀

    • (1)必須是認證過的服務號,開通了微信支付功能;在商家後臺充足夠多的錢來發紅包。
    • (2)發送頻率規則
      ◆ 每分鐘發送紅包數量不得超過1800個;
      ◆ 北京時間0:00-8:00不觸發紅包贈送;(若是以上規則不知足您的需求,請發郵件至wxhongbao@tencent.com獲取升級指引)
    • (3)紅包規則
      ◆ 單個紅包金額介於[1.00元,200.00元]之間;
      ◆ 同一個紅包只能發送給一個用戶;(若是以上規則不知足您的需求,請發郵件至wxhongbao@tencent.com獲取升級指引)
    • (4)填寫正確的AppId,Appsecret,以及微信支付的配置參數
    • (5)分享接口請注意不要有誘導分享等違規行爲,對於誘導分享行爲將永久回收公衆號接口權限,詳細規則請查看:朋友圈管理常見問題 。

 

2核心代碼分析api

【1】普通紅包:好比:用戶關注後,公衆號給粉絲派發紅包。裂變紅包是:用戶領取紅包後,還能夠吧紅包的連接分享到朋友圈,讓朋友也能領取。服務器

#region 紅包

        /// <summary>
        /// 目前支持向指定微信用戶的openid發放指定金額紅包
        /// 注意total_amount、min_value、max_value值相同
        /// total_num=1固定
        /// 單個紅包金額介於[1.00元,200.00元]之間
        /// </summary>
        /// <returns></returns>
        public ActionResult SendRedPack()
        {
            string mchbillno = DateTime.Now.ToString("HHmmss") + TenPayV3Util.BuildRandomStr(28);

            string nonceStr = TenPayV3Util.GetNoncestr();
            RequestHandler packageReqHandler = new RequestHandler(null);

            //設置package訂單參數
            packageReqHandler.SetParameter("nonce_str", nonceStr);              //隨機字符串
            packageReqHandler.SetParameter("wxappid", TenPayV3Info.AppId);          //公衆帳號ID
            packageReqHandler.SetParameter("mch_id", TenPayV3Info.MchId);          //商戶號
            packageReqHandler.SetParameter("mch_billno", mchbillno);                 //填入商家訂單號
            packageReqHandler.SetParameter("nick_name", "提供方名稱");                 //提供方名稱
            packageReqHandler.SetParameter("send_name", "紅包發送者名稱");                 //紅包發送者名稱
            packageReqHandler.SetParameter("re_openid", "接受收紅包的用戶的openId");                 //接受收紅包的用戶的openId
            packageReqHandler.SetParameter("total_amount", "100");                //付款金額,單位分
            packageReqHandler.SetParameter("min_value", "100");                //最小紅包金額,單位分
            packageReqHandler.SetParameter("max_value", "100");                //最大紅包金額,單位分
            packageReqHandler.SetParameter("total_num", "1");               //紅包發放總人數
            packageReqHandler.SetParameter("wishing", "紅包祝福語");               //紅包祝福語
            packageReqHandler.SetParameter("client_ip", Request.UserHostAddress);               //調用接口的機器Ip地址
            packageReqHandler.SetParameter("act_name", "活動名稱");   //活動名稱
            packageReqHandler.SetParameter("remark", "備註信息");   //備註信息
            string sign = packageReqHandler.CreateMd5Sign("key", TenPayV3Info.Key);
            packageReqHandler.SetParameter("sign", sign);                        //簽名
            //發紅包須要post的數據
            string data = packageReqHandler.ParseXML();

            //發紅包接口地址
            string url = "https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack";
            //本地或者服務器的證書位置(證書在微信支付申請成功發來的通知郵件中)
            string cert = @"F:\apiclient_cert.p12";
            //私鑰(在安裝證書時設置)
            string password = "";
            ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
            //調用證書
            X509Certificate2 cer = new X509Certificate2(cert, password, X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.MachineKeySet);

            #region 發起post請求
            HttpWebRequest webrequest = (HttpWebRequest)HttpWebRequest.Create(url);
            webrequest.ClientCertificates.Add(cer);
            webrequest.Method = "post";

            byte[] postdatabyte = Encoding.UTF8.GetBytes(data);
            webrequest.ContentLength = postdatabyte.Length;
            Stream stream;
            stream = webrequest.GetRequestStream();
            stream.Write(postdatabyte, 0, postdatabyte.Length);
            stream.Close();

            HttpWebResponse httpWebResponse = (HttpWebResponse)webrequest.GetResponse();
            StreamReader streamReader = new StreamReader(httpWebResponse.GetResponseStream());
            string responseContent = streamReader.ReadToEnd();
            #endregion

            return Content(responseContent);
        }
        #endregion
View Code

【2】裂變紅包微信

#region 裂變紅包

        /// <summary>
        /// 目前支持向指定微信用戶的openid發放指定金額紅包
        /// 注意total_amount、min_value、max_value值相同
        /// total_num=1固定
        /// 單個紅包金額介於[1.00元,200.00元]之間
        /// </summary>
        /// <returns></returns>
        public ActionResult SendGroupRedPack()
        {
            string mchbillno = DateTime.Now.ToString("HHmmss") + TenPayV3Util.BuildRandomStr(28);

            string nonceStr = TenPayV3Util.GetNoncestr();
            RequestHandler packageReqHandler = new RequestHandler(null);

            packageReqHandler.SetParameter("nonce_str", nonceStr);              //隨機字符串
            packageReqHandler.SetParameter("wxappid", TenPayV3Info.AppId);          //公衆帳號ID
            packageReqHandler.SetParameter("mch_id", TenPayV3Info.MchId);          //商戶號
            packageReqHandler.SetParameter("mch_billno", mchbillno);                 //填入商家訂單號
            packageReqHandler.SetParameter("send_name", "商戶名稱");                 //紅包發送者名稱
            packageReqHandler.SetParameter("re_openid", "接受收紅包的用戶的openId");                 //接受收紅包的用戶的openId
            packageReqHandler.SetParameter("total_amount", "300");                //付款金額,單位分
            packageReqHandler.SetParameter("total_num", "3");               //紅包發放總人數  必須介於(包括)3到20之間
            packageReqHandler.SetParameter("wishing", "紅包祝福語");               //紅包祝福語
            packageReqHandler.SetParameter("amt_type", "ALL_RAND");               //紅包金額設置方式ALL_RAND—所有隨機,商戶指定總金額和紅包發放總人數,由微信支付隨機計算出各紅包金額
            //packageReqHandler.SetParameter("amt_list", "各紅包具體金額");               //各紅包具體金額,自定義金額時必須設置,單位分  示例值"200|100|100"
            packageReqHandler.SetParameter("act_name", "活動名稱");   //活動名稱
            packageReqHandler.SetParameter("remark", "備註信息");   //備註信息
            string sign = packageReqHandler.CreateMd5Sign("key", TenPayV3Info.Key);
            packageReqHandler.SetParameter("sign", sign);                        //簽名
            //發紅包須要post的數據
            string data = packageReqHandler.ParseXML();

            //發紅包接口地址
            string url = "https://api.mch.weixin.qq.com/mmpaymkttransfers/sendgroupredpack";
            //本地或者服務器的證書位置(證書在微信支付申請成功發來的通知郵件中)
            string cert = @"F:\apiclient_cert.p12";
            //私鑰(在安裝證書時設置)
            string password = "";
            ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
            //調用證書
            X509Certificate2 cer = new X509Certificate2(cert, password, X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.MachineKeySet);

            #region 發起post請求
            HttpWebRequest webrequest = (HttpWebRequest)HttpWebRequest.Create(url);
            webrequest.ClientCertificates.Add(cer);
            webrequest.Method = "post";

            byte[] postdatabyte = Encoding.UTF8.GetBytes(data);
            webrequest.ContentLength = postdatabyte.Length;
            Stream stream;
            stream = webrequest.GetRequestStream();
            stream.Write(postdatabyte, 0, postdatabyte.Length);
            stream.Close();

            HttpWebResponse httpWebResponse = (HttpWebResponse)webrequest.GetResponse();
            StreamReader streamReader = new StreamReader(httpWebResponse.GetResponseStream());
            string responseContent = streamReader.ReadToEnd();
            #endregion

            return Content(responseContent);
        }
        #endregion
View Code

【3】紅包查詢app

#region 紅包查詢接口

        public ActionResult GetHBInfo(string mchbillno)
        {
            string nonceStr = TenPayV3Util.GetNoncestr();
            RequestHandler packageReqHandler = new RequestHandler(null);

            packageReqHandler.SetParameter("nonce_str", nonceStr);              //隨機字符串
            packageReqHandler.SetParameter("appid", TenPayV3Info.AppId);          //公衆帳號ID
            packageReqHandler.SetParameter("mch_id", TenPayV3Info.MchId);          //商戶號
            packageReqHandler.SetParameter("mch_billno", mchbillno);                 //填入商家訂單號
            packageReqHandler.SetParameter("bill_type", "MCHT");                 //紅包發送者名稱
            string sign = packageReqHandler.CreateMd5Sign("key", TenPayV3Info.Key);
            packageReqHandler.SetParameter("sign", sign);                        //簽名
            //發紅包須要post的數據
            string data = packageReqHandler.ParseXML();

            //發紅包接口地址
            string url = "https://api.mch.weixin.qq.com/mmpaymkttransfers/gethbinfo";
            //本地或者服務器的證書位置(證書在微信支付申請成功發來的通知郵件中)
            string cert = @"F:\apiclient_cert.p12";
            //私鑰(在安裝證書時設置)
            string password = "";
            ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
            //調用證書
            X509Certificate2 cer = new X509Certificate2(cert, password, X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.MachineKeySet);

            #region 發起post請求
            HttpWebRequest webrequest = (HttpWebRequest)HttpWebRequest.Create(url);
            webrequest.ClientCertificates.Add(cer);
            webrequest.Method = "post";

            byte[] postdatabyte = Encoding.UTF8.GetBytes(data);
            webrequest.ContentLength = postdatabyte.Length;
            Stream stream;
            stream = webrequest.GetRequestStream();
            stream.Write(postdatabyte, 0, postdatabyte.Length);
            stream.Close();

            HttpWebResponse httpWebResponse = (HttpWebResponse)webrequest.GetResponse();
            StreamReader streamReader = new StreamReader(httpWebResponse.GetResponseStream());
            string responseContent = streamReader.ReadToEnd();
            #endregion

            return Content(responseContent);
        }

        #endregion
View Code

紅包活動常見的玩法有:關注送紅包,簽到紅包(每日一次搶紅包);打開網頁送紅包(固然網頁得有其餘的信息啦)。dom

相關文章
相關標籤/搜索