今年春節微信搶紅包,我想各位都還記得。最近很多商家也在使用公眾號給粉絲發紅包,做營銷活動、吸粉活動或者是反饋老用戶等。
我們作為第3方開發者,就義不容辭的來給這些商家服務了。首先我們得會使用程序來寫搶紅包。
紅包使用說明及規則,請仔細閱讀
- (1)必須是認證過的服務號,開通了微信支付功能;在商家后台充足夠多的錢來發紅包。
- (2)發送頻率規則
◆ 每分鍾發送紅包數量不得超過1800個;
◆ 北京時間0:00-8:00不觸發紅包贈送;(如果以上規則不滿足您的需求,請發郵件至wxhongbao@tencent.com獲取升級指引) - (3)紅包規則
◆ 單個紅包金額介於[1.00元,200.00元]之間;
◆ 同一個紅包只能發送給一個用戶;(如果以上規則不滿足您的需求,請發郵件至wxhongbao@tencent.com獲取升級指引) - (4)填寫正確的AppId,Appsecret,以及微信支付的配置參數
- (5)分享接口請注意不要有誘導分享等違規行為,對於誘導分享行為將永久回收公眾號接口權限,詳細規則請查看:朋友圈管理常見問題 。

2核心代碼分析
【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
【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
【3】紅包查詢
#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
紅包活動常見的玩法有:關注送紅包,簽到紅包(每日一次搶紅包);打開網頁送紅包(當然網頁得有其他的信息啦)。
