视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001 知道1 知道21 知道41 知道61 知道81 知道101 知道121 知道141 知道161 知道181 知道201 知道221 知道241 知道261 知道281
问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
.net微信服务号发送红包
2020-11-27 22:36:21 责编:小OO
文档

本文实例为大家分享了.net微信红包发送代码,供大家参考,具体内容如下

注:需要开通微信支付的服务号!

//跳转微信登录页面
public ActionResult Index()
{
 ViewBag.url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + {服务号appid} + "&redirect_uri=http%3A%2F%2F" + {微信重定向域名(填写程序域名,例如:www.xxxx.com)} + "%2F"+{程序控制器名,例如:Home}+"%2F"+{程序Action名,例如:RedirectWeChat}+"&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect";
 return View();
}

//获取accesstoken(访问微信接口需要)
public static string accesstoken(string WeChatWxAppId, string WeChatWxAppSecret)
{
 string strJson = HttpRequestUtil.RequestUrl(string.Format("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}", WeChatWxAppId, WeChatWxAppSecret));
 if (strJson.IndexOf("errcode") == -1)
 {
 return GetJsonValue(strJson, "access_token");
 }
 else
 {
 return "";
 }
}
//解析json
public static string GetJsonValue(string jsonStr, string key)
{
 string result = string.Empty;
 if (!string.IsNullOrEmpty(jsonStr))
 {
 key = "\"" + key.Trim('"') + "\"";
 int index = jsonStr.IndexOf(key) + key.Length + 1;
 if (index > key.Length + 1)
 {
 //先截逗号,若是最后一个,截“}”号,取最小值
 int end = jsonStr.IndexOf(',', index);
 if (end == -1)
 {
 end = jsonStr.IndexOf('}', index);
 }
 result = jsonStr.Substring(index, end - index);
 result = result.Trim(new char[] { '"', ' ', '\'' }); //过滤引号或空格
 }
 }
 return result;
}

//请求url
public static string RequestUrl(string url, string method="post")
{
 // 设置参数
 HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
 CookieContainer cookieContainer = new CookieContainer();
 request.CookieContainer = cookieContainer;
 request.AllowAutoRedirect = true;
 request.Method = method;
 request.ContentType = "text/html";
 request.Headers.Add("charset", "utf-8");
 //发送请求并获取相应回应数据
 HttpWebResponse response = request.GetResponse() as HttpWebResponse;
 //直到request.GetResponse()程序才开始向目标网页发送Post请求
 Stream responseStream = response.GetResponseStream();
 StreamReader sr = new StreamReader(responseStream, Encoding.UTF8);
 //返回结果网页(html)代码
 string content = sr.ReadToEnd();
 return content;
}
//接收微信返回code
//接收微信数据获取用户信息
public ActionResult RedirectWeChat(string code, string state)
{
 if (string.IsNullOrEmpty(code))
 {
 return Content("您拒绝了授权!");
 }
 string access_token = accesstoken(微信AppId, 微信AppSecret);
 string st = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" + 微信AppId + "&secret=" + 微信AppSecret + "&code=" + code + "&grant_type=authorization_code";
 string data = RequestUrl(st);
//拿到用户openid
string openid=GetJsonValue(data, "openid");
//获取用户其他信息
 string url = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=" + access_token + "&openid=" + openid + "&lang=zh_CN";
 data = RequestUrl(url);
string subscribe=GetJsonValue(data, "subscribe");
 if (subscribe == "0")
 {
 ///未关注
 return RedirectToAction("");
 }

 return RedirectToAction("");
}

//发送红包Action
public ActionResult HB()
{
 string openid = "";//用户openid
 string url = "https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack"; 
 string orderNo = 商户号 + DateTime.Now.ToString("yyyymmdd")+"随机10位数字";//商户订单号 组成:mch_id+yyyymmdd+10位一天内不能重复的数字。 
 string Code = ""//32为随机字符串; string key="key=" + "";//支付密钥(在商户平台设置32为字符串) 
 Dictionary<string, string> data = new Dictionary<string, string>(); data.Add("act_name", "");//活动名称 
 data.Add("client_ip", "192.168.1.1");//Ip地址 
 data.Add("mch_billno", orderNo);//商户订单号 组成:mch_id+yyyymmdd+10位一天内不能重复的数字。 
 data.Add("mch_id", "");//商户号 
 data.Add("nonce_str", Code);//随机字符串 
 data.Add("re_openid", openid);//用户openid 
 data.Add("remark", "");//备注 
 data.Add("send_name","");//商户名称 
 data.Add("total_amount", "100");//付款金额 单位分 
 data.Add("total_num", "1");//红包发放总人数 
 data.Add("wishing", "恭喜发财");//红包祝福语 
 data.Add("wxappid", );//公众账号appid 
 string xml = GetXML(data, key);//签名+拼接xml 
 string str=PostWebRequests(url, xml);//微信返回xml err_code=SUCCESS 就是成功
 return View(""); 
}

//发送红包(MD5签名+拼接XML)
public static string GetXML(Dictionary<string, string> data,string paykey)
{
 string retStr;
 MD5CryptoServiceProvider m5 = new MD5CryptoServiceProvider();

 var data1=from d in data orderby d.Key select d;
 string data2 = "";
 string XML = "<xml>";
 foreach (var item in data1)
 {
 //空值不参与签名
 if (item.Value + "" != "")
 {
 data2 += item.Key +"="+ item.Value + "&";
 }
 XML += "<" + item.Key + ">" + item.Value+""+ "</" + item.Key + ">";
 }

 data2 += paykey;
 //创建md5对象
 byte[] inputBye;
 byte[] outputBye;

 //使用GB2312编码方式把字符串转化为字节数组.
 try
 {
 inputBye = Encoding.UTF8.GetBytes(data2);
 }
 catch
 {
 inputBye = Encoding.GetEncoding("GB2312").GetBytes(data2);
 }
 outputBye = m5.ComputeHash(inputBye);

 retStr = System.BitConverter.ToString(outputBye);
 retStr = retStr.Replace("-", "").ToUpper();
 XML += "<sign>" + retStr + "</sign>";//签名
 XML += "</xml>";
 return XML;
}

//发送红包请求Post方法
public static string PostWebRequests(string postUrl, string menuInfo)
{
 string returnValue = string.Empty;
 try
 {
 Encoding encoding = Encoding.UTF8;
 byte[] bytes = encoding.GetBytes(menuInfo);
 string cert = @"E:\cdcert\apiclient_cert.p12";//支付证书路径
 string password = "1212121";//支付证书密码

 ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
 X509Certificate cer = new X509Certificate(cert, password, X509KeyStorageFlags.MachineKeySet);
 HttpWebRequest webrequest = (HttpWebRequest)HttpWebRequest.Create(postUrl);
 webrequest.ClientCertificates.Add(cer);
 webrequest.Method = "post";
 webrequest.ContentLength = bytes.Length;
 webrequest.GetRequestStream().Write(bytes, 0, bytes.Length);
 HttpWebResponse webreponse = (HttpWebResponse)webrequest.GetResponse();
 Stream stream = webreponse.GetResponseStream();
 string resp = string.Empty;
 using (StreamReader reader = new StreamReader(stream))
 {
 return reader.ReadToEnd();
 }

 }
 catch (Exception ex)
 {
 return "";
 }
} 

以下是微信开发官方相关文档

1. 【微信支付】公众号支付开发者文档
2. 微信开放平台
3.企业号开发者接口文档
4.微信公众平台开发者文档

下载本文
显示全文
专题