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

阅读 17684  ·  发布日期 2020-08-24 17:26  ·  温州雄霸网络科技有限公司|建站|APP小程序制作|做网站SEO推广优化
【摘要】 红包功能简单介绍:1、商户调用接口时,通过指定发送对象以及发送金额的方式发放红包,这样的方式,允许商户灵活的应用于各种各样丰富的活动场景2、领取到红包后,用户的资金直接进入微信零钱,避免繁复的领奖流程,带给用户微信支付原生的流畅体验现金红包官网文档地址:https://pay.weixin.qq.com/wiki/do... 【温州小程序开发,温州微信公众号,平阳做网站,平阳网站建设公司,平阳小程序商城制作,昆阳万全做网站,鳌江水头小程序,萧江腾蛟微信公众号,山门顺溪南雁海西南麂凤卧麻步怀溪网络网店服务,政采云网店管理服务】...

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

红包功能简单介绍:
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加密类:
/// /// 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("" + v + "" + k + ">");
}
else {
sb.Append("" + 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必须有权限对该文件夹操作的权限。
相关文章:
PHP微信公众号自动发送红包API,php公众红包api微信公众号红包接口开发PHP开发 CA证书出错,请登陆微信支付商户平台下载证书相关视频:
微信公众号前段-php微信接口开发实战项目视频教程 聊天机器人以上就是微信公众号开发:
商户如何给用户发红包实例讲解的详细内容,更多请关注php中文网其它相关文章!
微信
分享相关标签:
公众号 红包本文原创发布php中文网,转载请注明出处,感谢您的尊重!
上一篇:
长见识了,原来微信浏览器内可以直接启动外部浏览器
下一篇:
最新整理出的微信分享后端接口实现的大致流程相关文章相关视频修改微信号有什么影响吗?微信中共享实时位置什么意思数据库设计的基本原则是什么?微信小程序调用图片安全API微信公众号开发:
商户如何给用户发红包实例讲解数据表的更新/删除/查询操作数据表的连接与新增操作2数据表的连接与新增操作1数组常用函数-3 [温州做微信公众号]