匿名通过本文主要向大家介绍了公众号 红包等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
红包功能简单介绍:
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编码方式把字符串转化为字节数组.
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;
} /// <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.Se

