C#公众号开发之如何实现给用户发红包
发表于:2025-11-14 作者:千家信息网编辑
千家信息网最后更新 2025年11月14日,小编给大家分享一下C#公众号开发之如何实现给用户发红包,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!红包功能简单介绍:1、
千家信息网最后更新 2025年11月14日C#公众号开发之如何实现给用户发红包
小编给大家分享一下C#公众号开发之如何实现给用户发红包,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
红包功能简单介绍:
1、商户调用接口时,通过指定发送对象以及发送金额的方式发放红包,这样的方式,允许商户灵活的应用于各种各样丰富的活动场景
2、领取到红包后,用户的资金直接进入微信零钱,避免繁复的领奖流程,带给用户微信支付原生的流畅体验
现金红包官网文档地址
调用现金红包接口需要使用到证书,请前往商户平台下载证书
官网有关详细证书的介绍,点击查看
因为发送现金红包是从商户平台余额扣款,所以商户平台的账户余额必须有充足的余额
下面是调用红包接口详细代码:
1、签名的MD5加密类:
////// MD5UtilHelper 的摘要说明。/// public class MD5UtilHelper{ public MD5UtilHelper() { // // TODO: 在此处添加构造函数逻辑 // } ////// 获取大写的MD5签名结果 /// /// /// ///public static string GetMD5(string encypStr, string charset) { string retStr; MD5CryptoServiceProvider m5 = new MD5CryptoServiceProvider(); //创建md5对象 byte[] inputBye; byte[] outputBye; //使用GB2312编码方式把字符串转化为字节数组. try { inputBye = Encoding.GetEncoding(charset).GetBytes(encypStr); } catch (Exception ex) { inputBye = Encoding.GetEncoding("GB2312").GetBytes(encypStr); } outputBye = m5.ComputeHash(inputBye); retStr = System.BitConverter.ToString(outputBye); retStr = retStr.Replace("-", "").ToUpper(); return retStr; }}
2、处理参数的类:
public class RequestHandler { public RequestHandler(HttpContext httpContext) { Parameters = new Hashtable(); this.HttpContext = httpContext ?? HttpContext.Current; } /// /// 密钥 /// private string Key; protected HttpContext HttpContext; /// /// 请求的参数 /// protected Hashtable Parameters; /// /// debug信息 /// private string DebugInfo; /// /// 初始化函数 /// public virtual void Init() { } /// /// 获取debug信息 /// /// public String GetDebugInfo() { return DebugInfo; } /// /// 获取密钥 /// /// public string GetKey() { return Key; } /// /// 设置密钥 /// /// public void SetKey(string key) { this.Key = key; } /// /// 设置参数值 /// /// /// public void SetParameter(string parameter, string parameterValue) { if (parameter != null && parameter != "") { if (Parameters.Contains(parameter)) { Parameters.Remove(parameter); } Parameters.Add(parameter, parameterValue); } } /// /// 创建md5摘要,规则是:按参数名称a-z排序,遇到空值的参数不参加签名 /// /// 参数名 /// 参数值 /// key和value通常用于填充最后一组参数 /// public virtual string CreateMd5Sign(string key, string value) { StringBuilder sb = new StringBuilder(); ArrayList akeys = new ArrayList(Parameters.Keys); akeys.Sort(); foreach (string k in akeys) { string v = (string)Parameters[k]; if (null != v && "".CompareTo(v) != 0 && "sign".CompareTo(k) != 0 && "key".CompareTo(k) != 0) { sb.Append(k + "=" + v + "&"); } } sb.Append(key + "=" + value); string sign = MD5UtilHelper.GetMD5(sb.ToString(), GetCharset()).ToUpper(); return sign; } /// /// 输出XML /// /// public string ParseXML() { StringBuilder sb = new StringBuilder(); sb.Append(""); foreach (string k in Parameters.Keys) { string v = (string)Parameters[k]; if (Regex.IsMatch(v, @"^[0-9.]$")) { sb.Append("<" + k + ">" + v + "" + k + ">"); } else { sb.Append("<" + k + ">" + k + ">"); } } sb.Append(" "); return sb.ToString(); } /// /// 设置debug信息 /// /// public void SetDebugInfo(String debugInfo) { this.DebugInfo = debugInfo; } public Hashtable GetAllParameters() { return this.Parameters; } protected virtual string GetCharset() { return this.HttpContext.Request.ContentEncoding.BodyName; } }3、调用现金红包处理类:
////// 企业号微信支付接口 /// public static class TenPay { #region 企业向用户发红包 ////// 用于企业向微信用户个人发红包 /// 目前支持向指定微信用户的openid个人发红包 /// /// apiclient_cert.p12证书密码即商户号 /// 微信支付需要post的xml数据 /// apiclient_cert.p12的证书物理位置(例如:E:\projects\文档\微信商户平台证书\商户平台API证书 /// ///public static string Sendredpack(string data, string certPassword,string certPath, int timeOut = Config.TIME_OUT) { var urlFormat = "https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack"; string cert = certPath; ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult); X509Certificate2 cer = new X509Certificate2(cert, certPassword, X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.MachineKeySet); var formDataBytes = data == null ? new byte[0] : Encoding.UTF8.GetBytes(data); MemoryStream ms = new MemoryStream(); ms.Write(formDataBytes, 0, formDataBytes.Length); ms.Seek(0, SeekOrigin.Begin);//设置指针读取位置 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(urlFormat); request.ClientCertificates.Add(cer); request.Method = "POST"; request.Timeout = timeOut; request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.57 Safari/537.36"; #region 输入二进制流 if (ms != null) { ms.Position = 0; //直接写入流 Stream requestStream = request.GetRequestStream(); byte[] buffer = new byte[1024]; int bytesRead = 0; while ((bytesRead = ms.Read(buffer, 0, buffer.Length)) != 0) { requestStream.Write(buffer, 0, bytesRead); } ms.Close();//关闭文件访问 } #endregion HttpWebResponse response = (HttpWebResponse)request.GetResponse(); using (Stream responseStream = response.GetResponseStream()) { using (StreamReader myStreamReader = new StreamReader(responseStream, Encoding.GetEncoding("utf-8"))) { string retString = myStreamReader.ReadToEnd(); return retString; } } } private static bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors) { if (errors == SslPolicyErrors.None) return true; return false; } #endregion }
4、调用现金红包接口
#region 发送红包bool fals = false; //记录发送红包是否成功string xmlResult = null; //现金红包接口返回的xmlstring certPath = null; //证书在服务器的物理位置string data = null; //调用现金红包接口需要的数据try{ //创建支付应答对象 RequestHandler packageReqHandler = new RequestHandler(null); //初始化 packageReqHandler.Init(); string nonceStr = TenPayV3Util.GetNoncestr(); //时间戳 //设置package订单参数 packageReqHandler.SetParameter("nonce_str", nonceStr); //随机字符串,不长于32位 packageReqHandler.SetParameter("mch_billno", System.Configuration.ConfigurationManager.AppSettings["TenPayV3_MchId"] + model.JournalNumber);//商户订单号(每个订单号必须唯一)组成:mch_id+yyyymmdd+10位一天内不能重复的数字。接口根据商户订单号支持重入,如出现超时可再调用。 packageReqHandler.SetParameter("mch_id", System.Configuration.ConfigurationManager.AppSettings["TenPayV3_MchId"]); //微信支付分配的商户号 packageReqHandler.SetParameter("wxappid", System.Configuration.ConfigurationManager.AppSettings["TenPayV3_AppId"]);//微信分配的公众账号ID(企业号corpid即为此appId)。接口传入的所有appid应该为公众号的appid(在mp.weixin.qq.com申请的),不能为APP的appid(在open.weixin.qq.com申请的)。 packageReqHandler.SetParameter("send_name", "测试");//商户名称 packageReqHandler.SetParameter("re_openid", model.BankCard); //用户openid 接受红包的用户用户在wxappid下的openid packageReqHandler.SetParameter("total_amount", Convert.ToInt32((decimal)(model.Amount * 100M)).ToString(CultureInfo.InvariantCulture)); //付款金额 单位分 packageReqHandler.SetParameter("total_num", "1"); //红包发放总人数 packageReqHandler.SetParameter("wishing", "测试红包"); //红包祝福语 packageReqHandler.SetParameter("client_ip", HttpContext.Current.Request.UserHostAddress);//Ip地址 packageReqHandler.SetParameter("act_name", "测试红包");//活动名称 packageReqHandler.SetParameter("remark", "测试红包"); //备注 string sign = packageReqHandler.CreateMd5Sign("key", System.Configuration.ConfigurationManager.AppSettings["TenPayV3_Key"]); packageReqHandler.SetParameter("sign", sign); //签名 data = packageReqHandler.ParseXML(); certPath = Server.MapPath("~/") + System.Configuration.ConfigurationManager.AppSettings["certPath"]; xmlResult = Sendredpack(data, System.Configuration.ConfigurationManager.AppSettings["TenPayV3_MchId"],certPath); var res = XDocument.Parse(xmlResult); string return_code = res.Element("xml").Element("return_code").Value; if ("SUCCESS".Equals(return_code)) { string result_code = res.Element("xml").Element("result_code").Value; if ("SUCCESS".Equals(result_code)) { fals = true; } }}catch (Exception exception){}#endregion注意:证书所在文件夹权限,IIS必须有权限对该文件夹操作的权限。
以上是"C#公众号开发之如何实现给用户发红包"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!
红包
商户
用户
参数
接口
证书
现金
平台
支付
公众
企业
订单
测试
位置
余额
信息
名称
密钥
对象
文件
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
服务器防ping
四年级网络安全手抄报8k纸
网易uu服务器身份验证有风险吗
云服务器与物理服务器配置对比
网络安全培训讲座内容
法斯特网络技术
去中心化数据库什么意思
es数据库接入问题
松下plc opc服务器
数据库开发平台
濮阳产品追溯软件开发
自然资源局网络安全管理制度
连接别人数据库18456
sql数据库语句可视化执行
航天信息提示数据库更新失败
网络技术的科学家
网络安全宣传周的新闻稿
龙魂时刻最新的服务器
公用通信服务器
福州博思软件开发公司
1u服务器改塔式
sql数据库无法备份
数据库中如何保存图片
宽带服务器名称或地址
服务器云主机安全防盗
移动通信软件开发学什么
荆州环境好的计算机软件开发
可牛网络技术有限公司招聘
计算机网络技术应用出来可以干啥
克罗恩病基因数据库