黔优媒体网-软文媒体自助发稿平台!
  1. 行业资讯
  2. 正文

微信公众号开发:商户如何给用户发红包实例讲解

来源:黔优媒体网   时间:2024-09-19

红包功能简单介绍:

1、商户调用接口时,通过指定发送对象以及发送金额的方式发放红包,这样的方式,允许商户灵活的应用于各种各样丰富的活动场景

2、领取到红包后,用户的资金直接进入微信零钱,避免繁复的领奖流程,带给用户微信支付原生的流畅体验

现金红包官网文档地址:https://pay.weixin.qq.com/wiki/doc/api/tools/cash_coupon.php?chapter=13_1

调用现金红包接口需要使用到证书,请前往商户平台下载证书

官网有关详细证书的介绍:https://pay.weixin.qq.com/wiki/doc/api/tools/cash_coupon.php?chapter=4_3

因为发送现金红包是从商户平台余额扣款,所以商户平台的账户余额必须有充足的余额

下面是调用红包接口详细代码:1、签名的MD5加密类:

/// summary /// MD5UtilHelper 的摘要说明。/// /summary public class MD5UtilHelper
{ public MD5UtilHelper()
 { //
 // TODO: 在此处添加构造函数逻辑
 } /// summary 
 /// 获取大写的MD5签名结果
 /// /summary 
 /// param name= encypStr /param 
 /// param name= charset /param 
 /// returns /returns 
 public static string GetMD5(string encypStr, string charset)
 { string retStr;
 MD5CryptoServiceProvider m5 = new MD5CryptoServiceProvider(); //创建md5对象
 byte[] inputBye; byte[] outputBye; //使用GB2312编码方式把字符串转化为字节数组.
 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;
 } /// summary 
 /// 密钥
 /// /summary 
 private string Key; protected HttpContext HttpContext; /// summary 
 /// 请求的参数
 /// /summary 
 protected Hashtable Parameters; /// summary 
 /// debug信息
 /// /summary 
 private string DebugInfo; /// summary 
 /// 初始化函数
 /// /summary 
 public virtual void Init()
 } /// summary 
 /// 获取debug信息
 /// /summary 
 /// returns /returns 
 public String GetDebugInfo()
 { return DebugInfo;
 } /// summary 
 /// 获取密钥
 /// /summary 
 /// returns /returns 
 public string GetKey()
 { return Key;
 } /// summary 
 /// 设置密钥
 /// /summary 
 /// param name= key /param 
 public void SetKey(string key)
 { this.Key = key;
 } /// summary 
 /// 设置参数值
 /// /summary 
 /// param name= parameter /param 
 /// param name= parameterValue /param 
 public void SetParameter(string parameter, string parameterValue)
 { if (parameter != null parameter != )
 { if (Parameters.Contains(parameter))
 Parameters.Remove(parameter);
 Parameters.Add(parameter, parameterValue);
 } /// summary 
 /// 创建md5摘要,规则是:按参数名称a-z排序,遇到空值的参数不参加签名
 /// /summary 
 /// param name= key 参数名 /param 
 /// param name= value 参数值 /param 
 /// key和value通常用于填充最后一组参数
 /// returns /returns 
 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;
 } /// summary 
 /// 输出XML
 /// /summary 
 /// returns /returns 
 public string ParseXML()
 StringBuilder sb = new StringBuilder();
 sb.Append( xml 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 + ![CDATA[ + v + ]] / + k + 
 sb.Append( /xml return sb.ToString();
 } /// summary 
 /// 设置debug信息
 /// /summary 
 /// param name= debugInfo /param 
 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、调用现金红包处理类:

 /// summary 
 /// 企业号微信支付接口
 /// /summary 
 public static class TenPay
 { #region 企业向用户发红包
 /// summary 
 /// 用于企业向微信用户个人发红包
 /// 目前支持向指定微信用户的openid个人发红包
 /// /summary 
 /// param name= certPassword apiclient_cert.p12证书密码即商户号 /param 
 /// param name= data 微信支付需要post的xml数据 /param 
 /// param name= certPath apiclient_cert.p12的证书物理位置(例如:E:\projects\文档\微信商户平台证书\商户平台API证书 /param 
 /// param name= timeOut /param 
 /// returns /returns 
 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必须有权限对该文件夹操作的权限。

相关文章:

PHP微信公众号自动发送红包API,php公众红包api

微信公众号红包接口开发PHP开发 CA证书出错,请登陆微信支付商户平台下载证书

相关视频:

微信公众号前段-php微信接口开发实战项目视频教程 聊天机器人

以上就是微信公众号开发:商户如何给用户发红包实例讲解的详细内容,更多请关注php中文网其它相关文章!

微信app下载

微信是一款手机通信软件,支持通过手机网络发送语音短信、视频、图片和文字。微信可以单聊及群聊,还能根据地理位置找到附近的人,带给大家全新的移动沟通体验,有需要的小伙伴快来保存下载体验吧!


上一篇: 没有了
下一篇:没有了
【免责申明】黔优媒体网以上展示内容来源于用户自主上传、合作媒体、企业机构或网络收集整理,版权争议与本站无关,文章涉及见解与观点不代表黔优媒体网官方立场,请读者仅做参考,本文标题:微信公众号开发:商户如何给用户发红包实例讲解;欢迎转载,转载时请说明出处。若您认为本文侵犯了您的版权信息,或您发现该内容有任何违法/违规的内容,请您立即联系我们及时修正或删除。(邮箱号: kefu@qianu.com)