示例#1
0
        /// <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);
        }
示例#2
0
        /// <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);
        }
示例#3
0
        /// <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 "";
        }
示例#4
0
        /// <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("");
        }
示例#5
0
        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}&timestamp={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();
                }
            }
        }
示例#6
0
        /// <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);
        }
示例#7
0
        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);
        }