public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/plain"; PayWeiXin model = new PayWeiXin(); PayForWeiXinHelp PayHelp = new PayForWeiXinHelp(); string result = string.Empty; //传入OpenId string openId = context.Request.Form["openId"].ToString(); //传入红包金额(单位分) string amount = context.Request.Form["amount"] == null ? "" : context.Request.Form["amount"].ToString(); //接叐收红包的用户 用户在wxappid下的openid model.re_openid = openId;//"oFIYdszuDXVqVCtwZ-yIcbIS262k"; //付款金额,单位分 model.total_amount = int.Parse(amount); //最小红包金额,单位分 model.min_value = int.Parse(amount); //最大红包金额,单位分 model.max_value = int.Parse(amount); //调用方法 string postData = PayHelp.DoDataForPayWeiXin(model); try { result = PayHelp.PayForWeiXin(postData); } catch (Exception ex) { //写日志 } XmlDocument doc = new XmlDocument(); doc.LoadXml(result); string jsonResult = JsonConvert.SerializeXmlNode(doc); context.Response.ContentType = "application/json"; context.Response.Write(jsonResult); context.Response.End(); }
/// <summary> /// 调用微信支付接口前处理数据,包括sign验证等 /// </summary> /// <param name="payForWeiXin"></param> /// <returns></returns> public string DoDataForPayWeiXin(PayWeiXin payForWeiXin) { #region 处理nonce_str随机字符串,不长于 32 位(本程序生成长度为16位的) string str = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; payForWeiXin.nonce_str = RandomStr(str, 16); #endregion #region 商户信息从config文件中读取 //商户支付密钥key string key = ConfigurationManager.AppSettings["key"].ToString(); //商户号 payForWeiXin.mch_id = ConfigurationManager.AppSettings["mch_id"].ToString(); //商户 appid payForWeiXin.wxappid = ConfigurationManager.AppSettings["wxappid"].ToString(); //提供方名称 payForWeiXin.nick_name = ConfigurationManager.AppSettings["nick_name"].ToString(); payForWeiXin.act_id = "act_id"; //红包収送者名称 payForWeiXin.send_name = ConfigurationManager.AppSettings["send_name"].ToString(); //红包収放总人数 payForWeiXin.total_num = int.Parse(ConfigurationManager.AppSettings["total_num"].ToString()); //红包祝福诧 payForWeiXin.wishing = ConfigurationManager.AppSettings["wishing"].ToString(); //活劢名称 payForWeiXin.act_name = ConfigurationManager.AppSettings["act_name"].ToString(); //备注信息 payForWeiXin.remark = ConfigurationManager.AppSettings["remark"].ToString(); //商户logo的url payForWeiXin.logo_imgurl = ConfigurationManager.AppSettings["logo_imgurl"].ToString(); //分享文案 payForWeiXin.share_content = ConfigurationManager.AppSettings["share_content"].ToString(); //分享链接 payForWeiXin.share_url = ConfigurationManager.AppSettings["share_url"].ToString(); //分享的图片url payForWeiXin.share_imgurl = ConfigurationManager.AppSettings["share_imgurl"].ToString(); //调用接口的机器 Ip 地址 payForWeiXin.client_ip = ConfigurationManager.AppSettings["client_ip"].ToString(); #endregion #region 订单信息 //生成订单号组成: mch_id+yyyymmdd+10 位一天内不能重复的数字 //生成10位不重复的数字 string num = "0123456789"; string randomNum = RandomStr(num, 10); payForWeiXin.mch_billno = payForWeiXin.mch_billno + System.DateTime.Now.ToString("yyyyMMdd") + randomNum; #endregion string postData = @"<xml> <mch_billno>{0}</mch_billno> <mch_id>{1}</mch_id> <wxappid>{2}</wxappid> <nick_name>{3}</nick_name> <send_name>{4}</send_name> <re_openid>{5}</re_openid> <total_amount>{6}</total_amount> <min_value>{7}</min_value> <max_value>{8}</max_value> <total_num>{9}</total_num> <wishing>{10}</wishing> <client_ip>{11}</client_ip> <act_name>{12}</act_name> <act_id>{13}</act_id> <remark>{14}</remark> <nonce_str>{15}</nonce_str>"; postData = string.Format(postData, payForWeiXin.mch_billno, payForWeiXin.mch_id, payForWeiXin.wxappid, payForWeiXin.nick_name, payForWeiXin.send_name, payForWeiXin.re_openid, payForWeiXin.total_amount, payForWeiXin.min_value, payForWeiXin.max_value, payForWeiXin.total_num, payForWeiXin.wishing, payForWeiXin.client_ip, payForWeiXin.act_name, payForWeiXin.act_id, payForWeiXin.remark, payForWeiXin.nonce_str ); //原始传入参数 string[] signTemp = { "mch_billno=" + payForWeiXin.mch_billno, "mch_id=" + payForWeiXin.mch_id, "wxappid=" + payForWeiXin.wxappid, "nick_name=" + payForWeiXin.nick_name, "send_name=" + payForWeiXin.send_name, "re_openid=" + payForWeiXin.re_openid, "total_amount=" + payForWeiXin.total_amount, "min_value=" + payForWeiXin.min_value, "max_value=" + payForWeiXin.max_value, "total_num=" + payForWeiXin.total_num, "wishing=" + payForWeiXin.wishing, "client_ip=" + payForWeiXin.client_ip, "act_name=" + payForWeiXin.act_name, "act_id=" + payForWeiXin.act_id, "remark=" + payForWeiXin.remark, "nonce_str=" + payForWeiXin.nonce_str }; List <string> signList = signTemp.ToList(); //拼接原始字符串 if (!string.IsNullOrEmpty(payForWeiXin.logo_imgurl)) { postData += "<logo_imgurl>{0}</logo_imgurl> "; postData = string.Format(postData, payForWeiXin.logo_imgurl); signList.Add("logo_imgurl=" + payForWeiXin.logo_imgurl); } if (!string.IsNullOrEmpty(payForWeiXin.share_content)) { postData += "<share_content>{0}</share_content> "; postData = string.Format(postData, payForWeiXin.share_content); signList.Add("share_content=" + payForWeiXin.share_content); } if (!string.IsNullOrEmpty(payForWeiXin.share_url)) { postData += "<share_url>{0}</share_url> "; postData = string.Format(postData, payForWeiXin.share_url); signList.Add("share_url=" + payForWeiXin.share_url); } if (!string.IsNullOrEmpty(payForWeiXin.share_imgurl)) { postData += "<share_imgurl>{0}</share_imgurl> "; postData = string.Format(postData, payForWeiXin.share_imgurl); signList.Add("share_imgurl=" + payForWeiXin.share_imgurl); } #region 处理支付签名 //对signList按照ASCII码从小到大的顺序排序 signList.Sort(); string signOld = string.Empty; string payForWeiXinOld = string.Empty; int i = 0; foreach (string temp in signList) { signOld += temp + "&"; i++; } signOld = signOld.Substring(0, signOld.Length - 1); //拼接Key signOld += "&key=" + key; //处理支付签名 payForWeiXin.sign = Encrypt(signOld).ToUpper(); #endregion postData += "<sign>{0}</sign></xml>"; postData = string.Format(postData, payForWeiXin.sign); return(postData); }