今年春節微信搶紅包,我想各位都還記得。最近不少商家也在使用公衆號給粉絲髮紅包,作營銷活動、吸粉活動或者是反饋老用戶等。html
咱們做爲第3方開發者,就責無旁貸的來給這些商家服務了。首先咱們得會使用程序來寫搶紅包。web
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
【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】紅包查詢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
紅包活動常見的玩法有:關注送紅包,簽到紅包(每日一次搶紅包);打開網頁送紅包(固然網頁得有其餘的信息啦)。dom