用于企业向微信用户个人付款 ,支持向指定微信用户的openid付款。 在拥有某小程序或公众号内的用户的openid情况下,完成企业微信你对指定用户完成转账的场景。 注:部分转载于网络
简介
适用场景
C# 代码
private const string mch_appid = ""; //商户账号的appid private const string mchid = ""; //商户号 private const string key =""; //微信支付平台商家设置的私钥 private string amount = ""; //转账金额,单位为分 private string desc = ""; //付款备注 private string openid = ""; //收款用户的openid private string re_user_name =""; //用户的真实姓名 private string _requesturl="https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers"; //请求微信接口地址 private static string[] strs = new string[] { "a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z", "A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z" }; /// <summary> /// 微信转账到零钱 /// </summary> public static string WxPayToMoney() { try { IDictionary<string, string> moneyrequest = new Dictionary<string, string>(); moneyrequest.Add("mch_appid", mch_appid); //商户账号的appid moneyrequest.Add("mchid", mchid); //商户号 moneyrequest.Add("check_name", "FORCE_CHECK"); //NO_CHECK:不校验真实姓名 FORCE_CHECK:强校验真实姓名 moneyrequest.Add("amount", amount); //转账金额,单位为分 moneyrequest.Add("desc", desc);//付款备注 moneyrequest.Add("nonce_str",CreateNonce_str());//随机字符串 moneyrequest.Add("openid", openid);//收款用户openid moneyrequest.Add("partner_trade_no", DateTime.Now.ToString("yyyyMMddHHmmss")); //订单号 //moneyrequest.Add("spbill_create_ip", "11.111.111.111"); //ip地址,可不传 moneyrequest.Add("re_user_name", re_user_name);//收款用户姓名 moneyrequest.Add("sign", WePaySign(moneyrequest, key)); //设置签名 return GetPostResult(moneyrequest, _requesturl); } catch (Exception ex) { return ex.Message; } } /// <summary> /// 获取微信接口的返回参数 /// </summary> /// <param name="data"></param> /// <param name="url"></param> /// <param name="id"></param> /// <returns></returns> private static string GetPostResult(IDictionary<string, string> data, string url) { try { string _req_data = "<xml>"; //遍历定义模型的属性 foreach (KeyValuePair<string, string> kvp in data) { _req_data += "<" + kvp.Key + ">" + kvp.Value + "</" + kvp.Key + ">"; } _req_data += "</xml>"; string response = CreatePostHttpResponse(url, _req_data, int.MaxValue, null, Encoding.UTF8); return response; } catch (Exception ex) { return ex.Message; } } /// <summary> /// 创建POST方式的HTTP请求 /// </summary> /// <param name="url">请求的URL</param> /// <param name="parameters">随同请求POST的参数名称及参数值字典</param> /// <param name="timeout">请求的超时时间</param> /// <param name="userAgent">请求的客户端浏览器信息,可以为空</param> /// <param name="requestEncoding">发送HTTP请求时所用的编码</param> /// <returns></returns> public static string CreatePostHttpResponse(string url, string parameters, int? timeout, string userAgent, Encoding requestEncoding) { if (string.IsNullOrEmpty(url)) { throw new ArgumentNullException("url"); } if (requestEncoding == null) { throw new ArgumentNullException("requestEncoding"); } HttpWebRequest request = null; //证书配置 string cert = @""; //证书路径 string password = ""; //证书密码 X509Certificate cer = new X509Certificate(cert, password); System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; //如果是发送HTTPS请求 if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase)) { ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult); request = WebRequest.Create(url) as HttpWebRequest; request.ProtocolVersion = HttpVersion.Version10; } else { request = WebRequest.Create(url) as HttpWebRequest; } request.Method = "POST"; request.ContentType = "application/x-www-form-urlencoded"; request.ClientCertificates.Add(cer); if (!string.IsNullOrEmpty(userAgent)) { request.UserAgent = userAgent; } else { request.UserAgent = DefaultUserAgent; } if (timeout.HasValue) { request.Timeout = timeout.Value; } //如果需要POST数据 if (!string.IsNullOrEmpty(parameters)) { string buffer = parameters; byte[] data = requestEncoding.GetBytes(buffer.ToString()); using (Stream stream = request.GetRequestStream()) { stream.Write(data, 0, data.Length); } } StreamReader reader = new StreamReader(request.GetResponse().GetResponseStream(), requestEncoding); string da = reader.ReadToEnd(); CommonHelper.Log(da); return da; } /// <summary> /// 创建随机字符串 /// </summary> /// <returns></returns> public static string CreateNonce_str() { Random r = new Random(); var sb = new StringBuilder(); var length = strs.Length; for (int i = 0; i < 15; i++) { sb.Append(strs[r.Next(length - 1)]); } return sb.ToString(); } /// <summary> /// 微信签名算法 /// </summary> /// <param name="InDict"></param> /// <param name="TenPayV3_Key"></param> /// <returns></returns> private static string WePaySign(IDictionary<string, string> InDict, string TenPayV3_Key) { Senparc.Weixin.MP.TenPayLibV3.RequestHandler packageReqHandler = new Senparc.Weixin.MP.TenPayLibV3.RequestHandler(null); packageReqHandler.Init(); var StrA = new StringBuilder(); InDict = InDict.OrderBy(o => o.Key).ToDictionary(o => o.Key, p => p.Value); foreach (KeyValuePair<string, string> kvp in InDict) { if (kvp.Value != null || !string.IsNullOrEmpty(kvp.Value)) { StrA.Append(string.Format("{0}={1}&", kvp.Key, kvp.Value)); } } StrA.Append("key=" + TenPayV3_Key); //注:key为商户平台设置的密钥key return MakeSign(StrA.ToString()); } /// <summary> /// 签名MD5加密并全部转换成大写 /// </summary> /// <param name="signValue"></param> /// <returns></returns> private static string MakeSign(string signValue) { //MD5加密 var md5 = MD5.Create(); var bs = md5.ComputeHash(Encoding.UTF8.GetBytes(signValue)); var sb = new StringBuilder(); foreach (byte b in bs) { sb.Append(b.ToString("x2")); } //所有字符转为大写 return sb.ToString().ToUpper(); }
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算