微信公众号抢现金红包活动的核心代码分析

红包使用说明及规则,请仔细阅读

    • (1)必须是认证过的服务号,开通了微信支付功能;在商家后台充足够多的钱来发红包。
    • (2)发送频率规则
      ◆ 每分钟发送红包数量不得超过1800个;
      ◆ 北京时间0:00-8:00不触发红包赠送;(如果以上规则不满足您的需求,请发邮件至[email protected]获取升级指引)
    • (3)红包规则
      ◆ 单个红包金额介于[1.00元,200.00元]之间;
      ◆ 同一个红包只能发送给一个用户;(如果以上规则不满足您的需求,请发邮件至[email protected]获取升级指引)
    • (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

红包活动常见的玩法有:关注送红包,签到红包(每日一次抢红包);打开网页送红包(当然网页得有其他的信息啦)。

时间: 2024-10-12 12:59:04

微信公众号抢现金红包活动的核心代码分析的相关文章

想不到QQ推出公众号要跟微信公众号抢饭碗!!

公众号是什么?公众号要跟微信公众号抢扳手腕看谁赢,其实公众号和微信公众号是有区别的!!公众号是QQ在今年的7月4号开放注册的,随即腾讯叫停.QQ公众号什么时候再推出这个是未知数,其实早在2014年QQ已经推出这块业务,虽然是封闭市,但加入圆通快递等企业.小编猜测之所以推出这个项目是因为微信日益壮大有关,QQ和微信不都是腾讯公司的产品吗?怎么会这样? 据微营天下了解:产品虽然都来自腾讯,却是两个不同类型的团队,QQ的辉煌我们有目共睹,目前手机端的使用软件仍然是微信遥遥领先,甚至很多用户放弃了QQ加

微信公众号(一)

   前言:         微信公众号有三个系列: 第一篇不涉及代码,讲述通过微信平台的后台管理系统管理微信公众号. 第二篇讲述涉及代码的微信公众号代码环境的搭建. 第三篇讲述模板代码. 基本概念: 订阅号:旨在为用户提供信息和资讯. 服务号:旨在为用户服务. 企业号:旨在为企业与员工服务. 微信认证:具备更多功能和权限,认证后的公众号在资料页面,会有微信的官方认证标志,对其他人是否关注您的公众号,也会有积极影响.不过微信认证是收费的,300元/次,每年需要年审(重新认证). 基本操作: *以

微信公众号可通过现金红包接口发放微信支付现金红包(附开发教程)

农历新年将至,支付宝红包打了一仗,微信在朋友圈屏蔽了它的分享,但单防守还不行,进攻才是最好的防守.昨日,微信支付现金红包接口正式开放,只需开通微信支付,即可接入现金红包.微信公众号也可以发放现金红包了! 通过现金红包接口,公众号开发者可以策划相关运营活动,向用户发放微信支付现金红包,更好的达到品牌推广及回馈用户的效果. 1.商户调用接口时,通过指定发送对象以及发送金额的方式发放红包,这样的方式,允许商户灵活的应用于各种各样丰富的活动场景 2.领取到红包后,用户的资金直接进入微信零钱,避免繁复的领

微信公众号推广

1,利用软文推广宣传微信公众号  大家是做什么行业的,就可以写这方面的一些文章,最好是图文并茂的.大家可以写一些经验,知识,技巧类的文章吸引用户观看.然后就可以在文章中引导用户关注公众号的信息.写好文章后,发布在各大和自己行业相关的网站,论坛都可以,也可以到一些平台去投稿. 优质内容对于运营公众号来说真的有点难度.不过,还是有方法的.如果大家想找优质的内容,就要多关注同行业的公众号,看他们有好的内容如果允许就可以转载过来,最好留下别人的版权信息.大家也可以利用搜狗微信搜索,寻找和自己内容相关的优

&ldquo;互联网+&rdquo;背景下使用微信公众号增强班主任工作与整合教学资源(泰微课)

前记:此文是我爱人一项作业.因为我本人对于微信这一块比较熟悉,就参与这项作业中.此文已经参加移动和教育相关活动.作者是我爱人,如有转载请署名作者. 一.什么是"互联网+"? 早在1969年互联网诞生之初,人们的初衷仅仅是对计算机之间的互相通信.就像电话.传真那样简单.而四十多年间互联网的发展用"日新月异"都嫌慢.互联网也从原先的固定线路的延展到基于移动通信的移动网络,互联的设备也从刚开始的以计算机为主发展到"connect to anything"

干货丨微信公众号平台运营的实战经验技巧

我们运营微信公众平台的目的是为了:广告推广,通过粉丝来获取收益和商业价值.然而广告的途径有消息图文推送,模块链接(即微信菜单)        实现价值的核心:图文消息的点击量(阅读图文消息的人数),一条消息的价值是通过粉丝阅读点击人数体现出来的,如果消息没有人阅读或阅读的人很少.就算 我们设计得再精美.再有价值也等于百搭.消息点击量通常用图文转换率来衡量:点击阅读人数与消息送达人数(即微信关注人数)比值,而影响点击量的重要因数是 : 1.图文消息的吸引力 2.微信粉丝的属性.看他们喜欢那方面的知

兴趣部落打通微信公众号,两大平台联手优化兴趣社交体验

手Q兴趣部落推出有一段时间了,这项被视为手Q提升用户粘度,强化移动社交属性的策略被证明是明智之举,如今,在手Q 5.42亿月活跃用户的支持下,兴趣部落的人气也扶摇直上,上线短短一年时间来便涌现出许多百万.千万级部落,不仅为手Q的用户提供了海量的优质内容,更重要的是,它标志着基于手Q平台推进泛社交战略的成功. 兴趣部落的成功也让业界开始将其与微信公众号进行对比,因为兴趣部落中的兴趣号与微信公众号有异曲同工之妙,最初业界认为这是手Q和微信在进行暗战.不过,最近手Q兴趣部落已经开始和微信公众号打通,说

错过微信公众号红利,现在还要错过小程序的红利|极限工坊淘小咖

小程序在经过跌宕起伏之后,也正式成为了整个互联网行业认同的风口. 在这期间,我们都猜想小程序是否将进一步优化使用场景,构建生态:而借助微信巨大的流量继续发挥小程序的价值: 种种迹象也代表着小程序的红利将至! 在之前有个匿名聊聊小程序的突然出现刷屏了朋友圈.这种匿名聊天的形式再次引爆,很大程度还是要归功于小程序的上线,这种传播方式的创新大大满足了用户的猎奇心. 最近小程序入口流量开放也越来越多,最近首家融资小程序的企业也将面世,更预示着小程序的红利期即将到来! 想想当初错过公众号了这波红利,难道还

【网络爬虫】微信公众号采集

# WeixinCrawler 根据搜狗搜索 关键词采集 微信公众号和相应推文 采集策略:深度搜索采集 核心代码: package main; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.net.MalformedURLException; import java.text.Si