/// <summary> /// 根据订单号创建微信支付 /// </summary> /// <param name="orderId">订单编号</param> /// <param name="appid">appId</param> /// <param name="mch_id">mch_id</param> /// <param name="notify_url">回调格式 http://haimylife.com/pay/wx_Pay_notify_url.aspx </param> /// <param name="spbill_create_ip">服务器Ip</param> /// <param name="key1">key</param> /// <param name="out_trade_no">out_trade_no</param> /// <param name="total">订单金额</param> /// <param name="msg">错误信息</param> /// <returns>微信响应实体</returns> public static VCodePayResponsEntity UnifiedOrder(string orderId, decimal total, string out_trade_no, string appid, string mch_id, string key1, string notify_url, string spbill_create_ip, out string msg) { VCodePayEntity payEntity = new Ecdev.Weixin.Pay.Domain.VCodePayEntity() { appid = appid, //appid = "wx45cd46b5f561deee", //mch_id = "D4DE77CE6F6C9E3A", mch_id = mch_id, body = orderId, nonce_str = VCodePayHelper.CreateRandom(20), out_trade_no = out_trade_no, fee_type = "CNY", //1 = 1分 total_fee = (int)(total * 100), spbill_create_ip = spbill_create_ip, notify_url = notify_url, product_id = orderId, Trade_type = "APP" }; Dictionary <string, string> dic = EntityToDic(payEntity); string sign = GetResultSign(dic, key1); dic.Add("sign", sign); string reqtest = BuildXml(dic, false); VCodePayResponsEntity post = PostData(prepay_id_Url, reqtest, out msg); return(post); }
/// <summary> /// 创建微信支付 /// </summary> /// <param name="wei"></param> /// <returns></returns> public static VCodePayResponsEntity CreateWeixinPay(VCodePayEntity wei) { Dictionary <string, string> dic = EntityToDic(wei); string sign = GetResultSign(dic, null); dic.Add("sign", sign); string reqtest = BuildXml(dic, false); string msg; VCodePayResponsEntity post = PostData(prepay_id_Url, reqtest, out msg); return(post); }
/// <summary> /// 创建二维码 /// </summary> /// <param name="post">微信支付创建返回实体</param> /// <param name="imgPath">二维码存放根目录</param> private static void CreateQrcode(VCodePayResponsEntity post) { System.Drawing.Bitmap bt; //string qrurl = string.IsNullOrEmpty(System.Configuration.ConfigurationSettings.AppSettings["EC_Url"]) ? "" : System.Configuration.ConfigurationSettings.AppSettings["EC_Url"].ToString(); //请求地址带参数 QRCodeEncoder qrCodeEncoder = new QRCodeEncoder(); bt = qrCodeEncoder.Encode(post.code_url, Encoding.UTF8); //Response.Write(path); bt.Save((string.IsNullOrWhiteSpace(imgPath) ? "" : imgPath + "/") + post.sign + ".jpg"); //return ""; }
/// <summary> /// 创建二维码支付请求 返回二维码图片地址 返回"":创建失败 /// </summary> /// <param name="wei">实体</param> /// <returns>返回二维码图片地址 返回"":创建失败</returns> public static string RequestWeixin(VCodePayEntity wei) { Dictionary <string, string> dic = EntityToDic(wei); string sign = GetResultSign(dic, null); dic.Add("sign", sign); string reqtest = BuildXml(dic, false); string msg; VCodePayResponsEntity post = null; int loop = 0; do { post = PostData(prepay_id_Url, reqtest, out msg); if (post != null) { break; } loop++; System.Threading.Thread.Sleep(500); } while (loop < 5); if (post == null) { return(msg); } try { CreateQrcode(post); return(post.sign + ".jpg"); } catch (Exception) { } return(""); }
protected override void AttachChildControls() { this.orderId = this.Page.Request.QueryString["orderId"]; OrderInfo orderInfo = ShoppingProcessor.GetOrderInfo(this.orderId); if (orderInfo == null) { base.GotoResourceNotFound(""); } this.litOrderId = (System.Web.UI.WebControls.Literal) this.FindControl("litOrderId"); this.litOrderTotal = (System.Web.UI.WebControls.Literal) this.FindControl("litOrderTotal"); this.litPaymentType = (System.Web.UI.HtmlControls.HtmlInputHidden) this.FindControl("litPaymentType"); this.litPaymentType.SetWhenIsNotNull(orderInfo.PaymentTypeId.ToString()); this.litOrderId.SetWhenIsNotNull(this.orderId); this.litOrderTotal.SetWhenIsNotNull(orderInfo.GetTotal().ToString("F2")); this.divhelper = (System.Web.UI.HtmlControls.HtmlGenericControl) this.FindControl("helper"); if (orderInfo.Gateway != "ecdev.plugins.payment.bankrequest") { this.divhelper.Visible = false; } else { this.divhelper.Visible = true; this.litHelperText = (System.Web.UI.WebControls.Literal) this.FindControl("litHelperText"); SiteSettings masterSettings = SettingsManager.GetMasterSettings(false); this.litHelperText.SetWhenIsNotNull(masterSettings.OffLinePayContent); } this.btnToPay = (System.Web.UI.HtmlControls.HtmlAnchor) this.FindControl("btnToPay"); if (this.btnToPay != null) { //判断为微信手机网页支付 if (orderInfo.Gateway == "Ecdev.plugins.payment.weixinwaprequest") { SiteSettings masterSettings = SettingsManager.GetMasterSettings(false); VCodePayResponsEntity rpsEntity = VCodePayHelper.CreateWeixinPay(new Ecdev.Weixin.Pay.Domain.VCodePayEntity() { appid = masterSettings.WeixinAppId, //appid = "wx45cd46b5f561deee", //mch_id = "D4DE77CE6F6C9E3A", mch_id = masterSettings.WeixinPartnerID, body = orderInfo.OrderId, nonce_str = VCodePayHelper.CreateRandom(20), out_trade_no = orderInfo.OrderId, fee_type = "CNY", //1 = 1分 total_fee = (int)(orderInfo.GetTotal() * 100), spbill_create_ip = "192.168.1.40", notify_url = "http://" + base.Context.Request.Url.Host + "/pay/wx_Pay_notify_url.aspx", product_id = orderInfo.OrderId.ToString() }); string javascript = string.Format("weixin://wap/pay?appid={0}&noncestr={1}&package=WAP&prepayid={2}×tamp={3}&sign={4}", rpsEntity.appid, rpsEntity.Nonce_str, rpsEntity.prepay_id, ConvertDateTimeInt(DateTime.Now), rpsEntity.sign); this.btnToPay.Target = "_blank"; this.btnToPay.HRef = javascript; } else { this.btnToPay.HRef = "FinishOrder.aspx?orderId=" + this.orderId + "&action=topay"; } } else { this.GotoPay(); } if (this.btnToPay != null && (orderInfo.Gateway == "ecdev.plugins.payment.podrequest" || orderInfo.Gateway == "ecdev.plugins.payment.bankrequest")) { this.btnToPay.Visible = false; } if (!this.Page.IsPostBack) { string text = System.Web.HttpContext.Current.Request.QueryString["action"]; if (!string.IsNullOrEmpty(text) && text == "topay") { this.GotoPay(); } } }
/// <summary> /// 创建二维码支付请求 /// </summary> /// <param name="url"></param> /// <param name="postData"></param> /// <param name="result"></param> /// <returns></returns> private static VCodePayResponsEntity PostData(string url, string postData, out string result) { string text = string.Empty; result = ""; VCodePayResponsEntity wei = new VCodePayResponsEntity(); try { Uri requestUri = new Uri(url); HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(requestUri); Encoding uTF = Encoding.UTF8; byte[] bytes = uTF.GetBytes(postData); httpWebRequest.Method = "POST"; httpWebRequest.ContentType = "text/xml"; httpWebRequest.ContentLength = (long)postData.Length; using (StreamWriter streamWriter = new StreamWriter(httpWebRequest.GetRequestStream())) { streamWriter.Write(postData); } using (HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse()) { using (Stream responseStream = httpWebResponse.GetResponseStream()) { Encoding uTF2 = Encoding.UTF8; StreamReader streamReader = new StreamReader(responseStream, uTF2); text = streamReader.ReadToEnd(); XmlDocument xmlDocument = new XmlDocument(); try { xmlDocument.LoadXml(text); } catch (Exception ex) { text = string.Format("获取信息错误doc.load:{0}", ex.Message) + text; } try { if (xmlDocument == null) { result = text; return(null); } XmlNode xmlNode = xmlDocument.SelectSingleNode("xml/return_code"); if (xmlNode == null) { result = text; return(null); } if (!(xmlNode.InnerText == "SUCCESS")) { result = xmlNode.InnerText; return(null); } XmlNode xmlNode2 = xmlDocument.SelectSingleNode("xml/prepay_id"); if (xmlNode2 != null) { wei.prepay_id = xmlNode2.InnerText; } xmlNode2 = xmlDocument.SelectSingleNode("xml/appid"); if (xmlNode2 != null) { wei.appid = xmlNode2.InnerText; } xmlNode2 = xmlDocument.SelectSingleNode("xml/mch_id"); if (xmlNode2 != null) { wei.mch_id = xmlNode2.InnerText; } xmlNode2 = xmlDocument.SelectSingleNode("xml/device_info"); if (xmlNode2 != null) { wei.device_info = xmlNode2.InnerText; } xmlNode2 = xmlDocument.SelectSingleNode("xml/nonce_str"); if (xmlNode2 != null) { wei.Nonce_str = xmlNode2.InnerText; } xmlNode2 = xmlDocument.SelectSingleNode("xml/sign"); if (xmlNode2 != null) { wei.sign = xmlNode2.InnerText; } xmlNode2 = xmlDocument.SelectSingleNode("xml/trade_type"); if (xmlNode2 != null) { wei.trade_type = xmlNode2.InnerText; } xmlNode2 = xmlDocument.SelectSingleNode("xml/code_url"); if (xmlNode2 != null) { wei.code_url = xmlNode2.InnerText; } return(wei); } catch (Exception ex) { text = string.Format("获取信息错误node.load:{0}", ex.Message) + text; } } } } catch (Exception ex) { result = string.Format("获取信息错误post error:{0}", ex.Message) + text; } return(null); }
private static Trade_state GetOrderState(string url, string postData, out string result, out string transaction_id) { string text = string.Empty; transaction_id = string.Empty; result = ""; VCodePayResponsEntity wei = new VCodePayResponsEntity(); try { Uri requestUri = new Uri(url); HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(requestUri); Encoding uTF = Encoding.UTF8; byte[] bytes = uTF.GetBytes(postData); httpWebRequest.Method = "POST"; httpWebRequest.ContentType = "text/xml"; httpWebRequest.ContentLength = (long)postData.Length; using (StreamWriter streamWriter = new StreamWriter(httpWebRequest.GetRequestStream())) { streamWriter.Write(postData); } using (HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse()) { using (Stream responseStream = httpWebResponse.GetResponseStream()) { Encoding uTF2 = Encoding.UTF8; StreamReader streamReader = new StreamReader(responseStream, uTF2); text = streamReader.ReadToEnd(); XmlDocument xmlDocument = new XmlDocument(); try { xmlDocument.LoadXml(text); } catch (Exception ex) { text = string.Format("获取信息错误doc.load:{0}", ex.Message) + text; } try { if (xmlDocument == null) { result = text; return(Trade_state.Error); } XmlNode xmlNode = xmlDocument.SelectSingleNode("xml/return_code"); if (xmlNode == null) { result = text; return(Trade_state.Error); } if (!(xmlNode.InnerText == "SUCCESS")) { result = xmlNode.InnerText; return(Trade_state.Error); } xmlNode = xmlDocument.SelectSingleNode("xml/trade_state"); if (xmlNode != null) { switch (xmlNode.InnerText) { case "SUCCESS": xmlNode = xmlDocument.SelectSingleNode("xml/transaction_id"); if (xmlNode != null) { transaction_id = xmlNode.InnerText; } return(Trade_state.SUCCESS); case "CLOSED": return(Trade_state.CLOSED); case "NOTPAY": return(Trade_state.NOTPAY); case "PAYERROR": return(Trade_state.PAYERROR); case "REFUND": return(Trade_state.REFUND); case "REVOKED": return(Trade_state.REVOKED); case "USERPAYING": return(Trade_state.USERPAYING); } return(Trade_state.Error); } } catch (Exception ex) { text = string.Format("获取信息错误node.load:{0}", ex.Message) + text; } } } } catch (Exception ex) { result = string.Format("获取信息错误post error:{0}", ex.Message) + text; } return(Trade_state.Error); }