Example #1
0
        public static NameValueCollection GetOpenidAndAccessToken(Page page, string appId, string appSecret, bool appendLog = false)
        {
            if (!string.IsNullOrEmpty(page.Request.QueryString["code"]))
            {
                string code = page.Request.QueryString["code"];
                return(JsApiPay.GetOpenidAndAccessTokenFromCode(code, page, appId, appSecret, false));
            }
            string    host      = page.Request.Url.Host;
            string    path      = page.Request.Path;
            string    value     = HttpUtility.UrlEncode(page.Request.Url.ToString());
            WxPayData wxPayData = new WxPayData();

            wxPayData.SetValue("appid", appId);
            wxPayData.SetValue("redirect_uri", value);
            wxPayData.SetValue("response_type", "code");
            wxPayData.SetValue("scope", "snsapi_base");
            wxPayData.SetValue("state", "STATE#wechat_redirect");
            string text = "https://open.weixin.qq.com/connect/oauth2/authorize?" + wxPayData.ToUrl();

            if (appendLog)
            {
                WxPayLog.AppendLog(JsApiPay.paramDict, text, page.Request.Url.ToString(), "未获取到code,跳转去获取code页面", LogType.GetTokenOrOpenID);
            }
            try
            {
                page.Response.Redirect(text);
            }
            catch (ThreadAbortException)
            {
            }
            return(null);
        }
Example #2
0
		public static WxPayData Micropay(WxPayData inputObj, PayConfig config, int timeOut = 10)
		{
			string text = "https://api.mch.weixin.qq.com/pay/micropay";
			if (!inputObj.IsSet("body"))
			{
				WxPayLog.AppendLog(inputObj.GetParam(), "", HttpContext.Current.Request.Url.ToString(), "缺少必填参数body", LogType.MicroPay);
			}
			else if (!inputObj.IsSet("out_trade_no"))
			{
				WxPayLog.AppendLog(inputObj.GetParam(), "", HttpContext.Current.Request.Url.ToString(), "缺少必填参数out_trade_no", LogType.MicroPay);
			}
			else if (!inputObj.IsSet("total_fee"))
			{
				WxPayLog.AppendLog(inputObj.GetParam(), "", HttpContext.Current.Request.Url.ToString(), "缺少必填参数total_fee", LogType.MicroPay);
			}
			else if (!inputObj.IsSet("auth_code"))
			{
				WxPayLog.AppendLog(inputObj.GetParam(), "", HttpContext.Current.Request.Url.ToString(), "缺少必填参数auth_code", LogType.MicroPay);
			}
			inputObj.SetValue("spbill_create_ip", config.IPAddress);
			inputObj.SetValue("appid", config.AppId);
			inputObj.SetValue("mch_id", config.MchID);
			inputObj.SetValue("nonce_str", Guid.NewGuid().ToString().Replace("-", ""));
			inputObj.SetValue("sign", inputObj.MakeSign(config.Key));
			string xml = inputObj.ToXml();
			DateTime now = DateTime.Now;
			string xml2 = HttpService.Post(xml, text, false, config, timeOut);
			DateTime now2 = DateTime.Now;
			int timeCost = (int)(now2 - now).TotalMilliseconds;
			WxPayData wxPayData = new WxPayData();
			wxPayData.FromXml(xml2, config.Key);
			WxPayApi.ReportCostTime(text, timeCost, wxPayData, config);
			return wxPayData;
		}
Example #3
0
		public static WxPayData Report(WxPayData inputObj, PayConfig config, int timeOut = 1)
		{
			string url = "https://api.mch.weixin.qq.com/payitil/report";
			if (!inputObj.IsSet("interface_url"))
			{
				WxPayLog.AppendLog(inputObj.GetParam(), "", HttpContext.Current.Request.Url.ToString(), "接口URL,缺少必填参数interface_url!", LogType.Report);
			}
			if (!inputObj.IsSet("return_code"))
			{
				WxPayLog.AppendLog(inputObj.GetParam(), "", HttpContext.Current.Request.Url.ToString(), "返回状态码,缺少必填参数return_code!", LogType.Report);
			}
			if (!inputObj.IsSet("result_code"))
			{
				WxPayLog.AppendLog(inputObj.GetParam(), "", HttpContext.Current.Request.Url.ToString(), "业务结果,缺少必填参数result_code!", LogType.Report);
			}
			if (!inputObj.IsSet("user_ip"))
			{
				WxPayLog.AppendLog(inputObj.GetParam(), "", HttpContext.Current.Request.Url.ToString(), "访问接口IP,缺少必填参数user_ip!", LogType.Report);
			}
			if (!inputObj.IsSet("execute_time_"))
			{
				WxPayLog.AppendLog(inputObj.GetParam(), "", HttpContext.Current.Request.Url.ToString(), "接口耗时,缺少必填参数execute_time_!", LogType.Report);
			}
			inputObj.SetValue("appid", config.AppId);
			inputObj.SetValue("mch_id", config.MchID);
			inputObj.SetValue("user_ip", config.IPAddress);
			inputObj.SetValue("time", DateTime.Now.ToString("yyyyMMddHHmmss"));
			inputObj.SetValue("nonce_str", WxPayApi.GenerateNonceStr());
			inputObj.SetValue("sign", inputObj.MakeSign(config.Key));
			string xml = inputObj.ToXml();
			string xml2 = HttpService.Post(xml, url, false, config, timeOut);
			WxPayData wxPayData = new WxPayData();
			wxPayData.FromXml(xml2, config.Key);
			return wxPayData;
		}
Example #4
0
        public PayNotify GetPayNotify(string xml)
        {
            DataTable dataTable = this.ErrorTable("Notify");
            DataRow   dataRow   = dataTable.NewRow();

            dataRow["OperTime"] = DateTime.Now;
            try
            {
                if (string.IsNullOrEmpty(xml))
                {
                    return(null);
                }
                PayNotify notifyObject = Utils.GetNotifyObject <PayNotify>(xml);
                string    sign         = "";
                if (notifyObject == null || !this.ValidPaySign(notifyObject, out sign))
                {
                    dataTable.Rows.Add(dataRow);
                    IDictionary <string, string> dictionary = new Dictionary <string, string>();
                    dictionary.Add("ErrorMsg", (notifyObject == null) ? "Notify Null" : "Valid pay Sign Error");
                    dictionary.Add("result", xml);
                    WxPayLog.AppendLog(dictionary, sign, "", "签名验证失败", LogType.PayNotify);
                    return(null);
                }
                notifyObject.PayInfo = new PayInfo
                {
                    SignType      = "MD5",
                    Sign          = notifyObject.sign,
                    TradeMode     = 0,
                    BankType      = notifyObject.bank_type,
                    BankBillNo    = "",
                    TotalFee      = (decimal)notifyObject.total_fee / 100m,
                    FeeType       = ((notifyObject.fee_type == "CNY") ? 1 : 0),
                    NotifyId      = "",
                    TransactionId = notifyObject.transaction_id,
                    OutTradeNo    = notifyObject.out_trade_no,
                    TransportFee  = 0m,
                    ProductFee    = 0m,
                    Discount      = 1m,
                    BuyerAlias    = "",
                    Attach        = notifyObject.attach
                };
                return(notifyObject);
            }
            catch (Exception ex)
            {
                IDictionary <string, string> dictionary = new Dictionary <string, string>();
                dictionary.Add("result", xml);
                WxPayLog.WriteExceptionLog(ex, dictionary, LogType.Error);
                return(null);
            }
        }
Example #5
0
		public static WxPayData UnifiedOrder(WxPayData inputObj, PayConfig config, int timeOut = 6)
		{
			string text = "https://api.mch.weixin.qq.com/pay/unifiedorder";
			if (!inputObj.IsSet("out_trade_no"))
			{
				WxPayLog.AppendLog(inputObj.GetParam(), "", HttpContext.Current.Request.Url.ToString(), "缺少统一支付接口必填参数out_trade_no!", LogType.UnifiedOrder);
			}
			else if (!inputObj.IsSet("body"))
			{
				WxPayLog.AppendLog(inputObj.GetParam(), "", HttpContext.Current.Request.Url.ToString(), "缺少统一支付接口必填参数body!", LogType.UnifiedOrder);
			}
			else if (!inputObj.IsSet("total_fee"))
			{
				WxPayLog.AppendLog(inputObj.GetParam(), "", HttpContext.Current.Request.Url.ToString(), "缺少统一支付接口必填参数total_fee!", LogType.UnifiedOrder);
			}
			else if (!inputObj.IsSet("trade_type"))
			{
				WxPayLog.AppendLog(inputObj.GetParam(), "", HttpContext.Current.Request.Url.ToString(), "缺少统一支付接口必填参数trade_type!", LogType.UnifiedOrder);
			}
			if (inputObj.GetValue("trade_type").ToString() == "JSAPI" && !inputObj.IsSet("openid"))
			{
				WxPayLog.AppendLog(inputObj.GetParam(), "", HttpContext.Current.Request.Url.ToString(), "统一支付接口中,缺少必填参数openid!trade_type为JSAPI时,openid为必填参数!", LogType.UnifiedOrder);
			}
			if (inputObj.GetValue("trade_type").ToString() == "NATIVE" && !inputObj.IsSet("product_id"))
			{
				WxPayLog.AppendLog(inputObj.GetParam(), "", HttpContext.Current.Request.Url.ToString(), "统一支付接口中,缺少必填参数product_id!trade_type为JSAPI时,product_id为必填参数!", LogType.UnifiedOrder);
			}
			if (!inputObj.IsSet("NOTIFY_URL"))
			{
				WxPayLog.AppendLog(inputObj.GetParam(), "", HttpContext.Current.Request.Url.ToString(), "统一支付接口中,缺少必填参数NOTIFY_URL!", LogType.UnifiedOrder);
			}
			if (!inputObj.IsSet("NOTIFY_URL"))
			{
				inputObj.SetValue("NOTIFY_URL", config.NOTIFY_URL);
			}
			inputObj.SetValue("appid", config.AppId);
			inputObj.SetValue("mch_id", config.MchID);
			inputObj.SetValue("spbill_create_ip", config.IPAddress);
			inputObj.SetValue("nonce_str", WxPayApi.GenerateNonceStr());
			inputObj.SetValue("sign", inputObj.MakeSign(config.Key));
			string xml = inputObj.ToXml();
			DateTime now = DateTime.Now;
			string xml2 = HttpService.Post(xml, text, false, config, timeOut);
			DateTime now2 = DateTime.Now;
			int timeCost = (int)(now2 - now).TotalMilliseconds;
			WxPayData wxPayData = new WxPayData();
			wxPayData.FromXml(xml2, config.Key);
			WxPayApi.ReportCostTime(text, timeCost, wxPayData, config);
			return wxPayData;
		}
Example #6
0
		private static void ReportCostTime(string interface_url, int timeCost, WxPayData inputObj, PayConfig config)
		{
			if (config.REPORT_LEVENL != 0 && (config.REPORT_LEVENL != 1 || !inputObj.IsSet("return_code") || !(inputObj.GetValue("return_code").ToString() == "SUCCESS") || !inputObj.IsSet("result_code") || !(inputObj.GetValue("result_code").ToString() == "SUCCESS")))
			{
				WxPayData wxPayData = new WxPayData();
				wxPayData.SetValue("interface_url", interface_url);
				wxPayData.SetValue("execute_time_", timeCost);
				if (inputObj.IsSet("return_code"))
				{
					wxPayData.SetValue("return_code", inputObj.GetValue("return_code"));
				}
				if (inputObj.IsSet("return_msg"))
				{
					wxPayData.SetValue("return_msg", inputObj.GetValue("return_msg"));
				}
				if (inputObj.IsSet("result_code"))
				{
					wxPayData.SetValue("result_code", inputObj.GetValue("result_code"));
				}
				if (inputObj.IsSet("err_code"))
				{
					wxPayData.SetValue("err_code", inputObj.GetValue("err_code"));
				}
				if (inputObj.IsSet("err_code_des"))
				{
					wxPayData.SetValue("err_code_des", inputObj.GetValue("err_code_des"));
				}
				if (inputObj.IsSet("out_trade_no"))
				{
					wxPayData.SetValue("out_trade_no", inputObj.GetValue("out_trade_no"));
				}
				if (inputObj.IsSet("device_info"))
				{
					wxPayData.SetValue("device_info", inputObj.GetValue("device_info"));
				}
				try
				{
					WxPayApi.Report(wxPayData, config, 1);
				}
				catch (WxPayException)
				{
					WxPayLog.AppendLog(inputObj.GetParam(), "", HttpContext.Current.Request.Url.ToString(), "关闭订单接口中,out_trade_no必填!", LogType.CloseOrder);
				}
			}
		}
Example #7
0
        public static void GetCode(Page page, string appId, bool appendLog = false)
        {
            string    text      = HttpUtility.UrlEncode(page.Request.Url.ToString());
            WxPayData wxPayData = new WxPayData();

            wxPayData.SetValue("appid", appId);
            wxPayData.SetValue("redirect_uri", text);
            wxPayData.SetValue("response_type", "code");
            wxPayData.SetValue("scope", "snsapi_base");
            wxPayData.SetValue("state", "STATE#wechat_redirect");
            string text2 = "https://open.weixin.qq.com/connect/oauth2/authorize?" + wxPayData.ToUrl();

            if (appendLog)
            {
                WxPayLog.AppendLog(JsApiPay.paramDict, text2, text, "跳转去获取code页面", LogType.GetTokenOrOpenID);
            }
            page.Response.Redirect(text2);
        }
Example #8
0
		public static WxPayData Reverse(WxPayData inputObj, PayConfig config, int timeOut = 6)
		{
			string text = "https://api.mch.weixin.qq.com/secapi/pay/reverse";
			if (!inputObj.IsSet("out_trade_no") && !inputObj.IsSet("transaction_id"))
			{
				WxPayLog.AppendLog(inputObj.GetParam(), "", HttpContext.Current.Request.Url.ToString(), "撤销订单API接口中缺少必填参数out_trade_no 或者 transaction_id", LogType.CloseOrder);
			}
			inputObj.SetValue("appid", config.AppId);
			inputObj.SetValue("mch_id", config.MchID);
			inputObj.SetValue("nonce_str", WxPayApi.GenerateNonceStr());
			inputObj.SetValue("sign", inputObj.MakeSign(config.Key));
			string xml = inputObj.ToXml();
			DateTime now = DateTime.Now;
			string xml2 = HttpService.Post(xml, text, true, config, timeOut);
			DateTime now2 = DateTime.Now;
			int timeCost = (int)(now2 - now).TotalMilliseconds;
			WxPayData wxPayData = new WxPayData();
			wxPayData.FromXml(xml2, config.Key);
			WxPayApi.ReportCostTime(text, timeCost, wxPayData, config);
			return wxPayData;
		}
Example #9
0
		public static WxPayData ShortUrl(WxPayData inputObj, PayConfig config, int timeOut = 6)
		{
			string text = "https://api.mch.weixin.qq.com/tools/shorturl";
			if (!inputObj.IsSet("long_url"))
			{
				WxPayLog.AppendLog(inputObj.GetParam(), "", HttpContext.Current.Request.Url.ToString(), "需要转换的URL,签名用原串,传输需URL encode!", LogType.ShortUrl);
			}
			inputObj.SetValue("appid", config.AppId);
			inputObj.SetValue("mch_id", config.MchID);
			inputObj.SetValue("nonce_str", WxPayApi.GenerateNonceStr());
			inputObj.SetValue("sign", inputObj.MakeSign(config.Key));
			string xml = inputObj.ToXml();
			DateTime now = DateTime.Now;
			string xml2 = HttpService.Post(xml, text, false, config, timeOut);
			DateTime now2 = DateTime.Now;
			int timeCost = (int)(now2 - now).TotalMilliseconds;
			WxPayData wxPayData = new WxPayData();
			wxPayData.FromXml(xml2, config.Key);
			WxPayApi.ReportCostTime(text, timeCost, wxPayData, config);
			return wxPayData;
		}
Example #10
0
        public static string GetEditAddressParameters(string appId, string access_token, bool appendLog = false)
        {
            string text = "";

            try
            {
                string    host      = JsApiPay.page.Request.Url.Host;
                string    path      = JsApiPay.page.Request.Path;
                string    query     = JsApiPay.page.Request.Url.Query;
                string    value     = "http://" + host + path + query;
                WxPayData wxPayData = new WxPayData();
                wxPayData.SetValue("appid", appId);
                wxPayData.SetValue("url", value);
                wxPayData.SetValue("timestamp", WxPayApi.GenerateTimeStamp());
                wxPayData.SetValue("noncestr", WxPayApi.GenerateNonceStr());
                wxPayData.SetValue("accesstoken", access_token);
                string    password   = wxPayData.ToUrl();
                string    text2      = FormsAuthentication.HashPasswordForStoringInConfigFile(password, "SHA1");
                WxPayData wxPayData2 = new WxPayData();
                wxPayData2.SetValue("appId", appId);
                wxPayData2.SetValue("scope", "jsapi_address");
                wxPayData2.SetValue("signType", "sha1");
                wxPayData2.SetValue("addrSign", text2);
                wxPayData2.SetValue("timeStamp", wxPayData.GetValue("timestamp"));
                wxPayData2.SetValue("nonceStr", wxPayData.GetValue("noncestr"));
                text = wxPayData2.ToJson();
                JsApiPay.paramDict.Add("paramJson", text);
                if (appendLog)
                {
                    WxPayLog.AppendLog(JsApiPay.paramDict, text2, JsApiPay.page.Request.Url.ToString(), "获取收货地址js函数入口参数", LogType.GetOrEditAddress);
                }
            }
            catch (Exception ex)
            {
                WxPayLog.AppendLog(JsApiPay.paramDict, "", JsApiPay.page.Request.Url.ToString(), "获取收货地址js函数入口参数:" + ex.Message, LogType.GetOrEditAddress);
                throw new WxPayException(ex.ToString());
            }
            return(text);
        }
Example #11
0
		public static WxPayData Refund(WxPayData inputObj, PayConfig config, int timeOut = 60)
		{
			string text = "https://api.mch.weixin.qq.com/secapi/pay/refund";
			if (!inputObj.IsSet("out_trade_no") && !inputObj.IsSet("transaction_id"))
			{
				WxPayLog.AppendLog(inputObj.GetParam(), "", HttpContext.Current.Request.Url.ToString(), "退款订单API接口中缺少必填参数out_trade_no 或者 transaction_id", LogType.Refund);
			}
			else if (!inputObj.IsSet("out_refund_no"))
			{
				WxPayLog.AppendLog(inputObj.GetParam(), "", HttpContext.Current.Request.Url.ToString(), "退款订单API接口中缺少必填参数out_refund_no", LogType.Refund);
			}
			else if (!inputObj.IsSet("total_fee"))
			{
				WxPayLog.AppendLog(inputObj.GetParam(), "", HttpContext.Current.Request.Url.ToString(), "退款订单API接口中缺少必填参数total_fee", LogType.Refund);
			}
			else if (!inputObj.IsSet("refund_fee"))
			{
				WxPayLog.AppendLog(inputObj.GetParam(), "", HttpContext.Current.Request.Url.ToString(), "退款订单API接口中缺少必填参数refund_fee", LogType.Refund);
			}
			else if (!inputObj.IsSet("op_user_id"))
			{
				WxPayLog.AppendLog(inputObj.GetParam(), "", HttpContext.Current.Request.Url.ToString(), "退款订单API接口中缺少必填参数op_user_id", LogType.Refund);
			}
			inputObj.SetValue("appid", config.AppId);
			inputObj.SetValue("mch_id", config.MchID);
			inputObj.SetValue("nonce_str", Guid.NewGuid().ToString().Replace("-", ""));
			inputObj.SetValue("sign", inputObj.MakeSign(config.Key));
			string xml = inputObj.ToXml();
			DateTime now = DateTime.Now;
			string xml2 = HttpService.Post(xml, text, true, config, timeOut);
			DateTime now2 = DateTime.Now;
			int timeCost = (int)(now2 - now).TotalMilliseconds;
			WxPayData wxPayData = new WxPayData();
			wxPayData.FromXml(xml2, config.Key);
			WxPayApi.ReportCostTime(text, timeCost, wxPayData, config);
			return wxPayData;
		}
Example #12
0
		public static WxPayData DownloadBill(WxPayData inputObj, PayConfig config, int timeOut = 6)
		{
			string url = "https://api.mch.weixin.qq.com/pay/downloadbill";
			if (!inputObj.IsSet("bill_date"))
			{
				WxPayLog.AppendLog(inputObj.GetParam(), "", HttpContext.Current.Request.Url.ToString(), "对账单接口中,缺少必填参数bill_date", LogType.DownLoadBill);
			}
			inputObj.SetValue("appid", config.AppId);
			inputObj.SetValue("mch_id", config.MchID);
			inputObj.SetValue("nonce_str", WxPayApi.GenerateNonceStr());
			inputObj.SetValue("sign", inputObj.MakeSign(config.Key));
			string xml = inputObj.ToXml();
			string text = HttpService.Post(xml, url, false, config, timeOut);
			WxPayData wxPayData = new WxPayData();
			if (text.Substring(0, 5) == "<xml>")
			{
				wxPayData.FromXml(text, config.Key);
			}
			else
			{
				wxPayData.SetValue("result", text);
			}
			return wxPayData;
		}
Example #13
0
        public static string Post(string xml, string url, bool isUseCert, PayConfig config, int timeout)
        {
            GC.Collect();
            string          text                    = "";
            HttpWebRequest  httpWebRequest          = null;
            HttpWebResponse httpWebResponse         = null;
            Stream          stream                  = null;
            IDictionary <string, string> dictionary = new Dictionary <string, string>();

            dictionary.Add("xml", xml);
            dictionary.Add("url", url);
            dictionary.Add("isUseCert", isUseCert.ToString());
            dictionary.Add("timeout", timeout.ToString());
            dictionary.Add("SSLCERT_PATH", config.SSLCERT_PATH);
            dictionary.Add("SSLCERT_PASSWORD", config.SSLCERT_PASSWORD);
            dictionary.Add("PROXY_URL", config.PROXY_URL);
            long num = 0L;

            try
            {
                ServicePointManager.DefaultConnectionLimit = 200;
                if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase))
                {
                    ServicePointManager.ServerCertificateValidationCallback = HttpService.CheckValidationResult;
                }
                httpWebRequest             = (HttpWebRequest)WebRequest.Create(url);
                httpWebRequest.Method      = "POST";
                httpWebRequest.Timeout     = -1;
                httpWebRequest.ContentType = "text/xml";
                byte[] bytes = Encoding.UTF8.GetBytes(xml);
                httpWebRequest.ContentLength = bytes.Length;
                if (isUseCert)
                {
                    string     physicalApplicationPath = HttpContext.Current.Request.PhysicalApplicationPath;
                    FileStream fileStream = new FileStream(physicalApplicationPath + config.SSLCERT_PATH, FileMode.Open, FileAccess.Read, FileShare.Read);
                    byte[]     array      = new byte[fileStream.Length];
                    fileStream.Read(array, 0, array.Length);
                    fileStream.Close();
                    X509Certificate2 value = new X509Certificate2(array, config.SSLCERT_PASSWORD, X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.Exportable | X509KeyStorageFlags.PersistKeySet);
                    httpWebRequest.ClientCertificates.Add(value);
                }
                stream = httpWebRequest.GetRequestStream();
                stream.Write(bytes, 0, bytes.Length);
                stream.Close();
                ServicePointManager.ServerCertificateValidationCallback = HttpService.CheckValidationResult;
                httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();
                StreamReader streamReader = new StreamReader(httpWebResponse.GetResponseStream(), Encoding.UTF8);
                text = streamReader.ReadToEnd().Trim();
                WxPayLog.AppendLog(dictionary, "", url + "---0", text, LogType.Refund);
                streamReader.Close();
            }
            catch (ThreadAbortException)
            {
                WxPayLog.AppendLog(dictionary, xml, url + "---1", text, LogType.Refund);
                Thread.ResetAbort();
                return("");
            }
            catch (WebException ex2)
            {
                if (ex2.Status == WebExceptionStatus.ProtocolError)
                {
                    dictionary.Add("StatusCode", ((HttpWebResponse)ex2.Response).StatusCode.ToString());
                    dictionary.Add("StatusCode", ((HttpWebResponse)ex2.Response).StatusDescription);
                }
                WxPayLog.AppendLog(dictionary, xml, url + "---2---" + num + "---" + ex2.Message, text, LogType.Refund);
                return("");
            }
            catch (Exception ex3)
            {
                dictionary.Add("HttpService", ex3.ToString());
                WxPayLog.AppendLog(dictionary, xml, url + "---3", text, LogType.Refund);
                return("");
            }
            finally
            {
                httpWebResponse?.Close();
                httpWebRequest?.Abort();
            }
            return(text);
        }
Example #14
0
        public static NameValueCollection GetOpenidAndAccessTokenFromCode(string code, Page page, string appId, string appSecret, bool appendLog = false)
        {
            NameValueCollection nameValueCollection = new NameValueCollection();

            nameValueCollection.Add("OpenID", "");
            nameValueCollection.Add("Access_Token", "");
            string value  = "";
            string value2 = "";

            try
            {
                WxPayData wxPayData = new WxPayData();
                wxPayData.SetValue("appid", appId);
                wxPayData.SetValue("secret", appSecret);
                wxPayData.SetValue("code", code);
                wxPayData.SetValue("grant_type", "authorization_code");
                string   text     = "https://api.weixin.qq.com/sns/oauth2/access_token?" + wxPayData.ToUrl();
                string   json     = HttpService.Get(text, "");
                JsonData jsonData = JsonMapper.ToObject(json);
                value2 = (string)jsonData["access_token"];
                value  = (string)jsonData["openid"];
                nameValueCollection.Set("OpenID", value);
                nameValueCollection.Set("Access_Token", value2);
                if (!JsApiPay.paramDict.ContainsKey("appid"))
                {
                    JsApiPay.paramDict.Add("appid", appId);
                }
                if (!JsApiPay.paramDict.ContainsKey("secret"))
                {
                    JsApiPay.paramDict.Add("secret", appSecret);
                }
                if (!JsApiPay.paramDict.ContainsKey("code"))
                {
                    JsApiPay.paramDict.Add("code", code);
                }
                if (!JsApiPay.paramDict.ContainsKey("grant_type"))
                {
                    JsApiPay.paramDict.Add("grant_type", "authorization_code");
                }
                if (!JsApiPay.paramDict.ContainsKey("RequestUrl"))
                {
                    JsApiPay.paramDict.Add("RequestUrl", text);
                }
                if (!JsApiPay.paramDict.ContainsKey("OpenID"))
                {
                    JsApiPay.paramDict.Add("OpenID", value);
                }
                if (!JsApiPay.paramDict.ContainsKey("Access_Token"))
                {
                    JsApiPay.paramDict.Add("Access_Token", value2);
                }
                if (appendLog)
                {
                    WxPayLog.AppendLog(JsApiPay.paramDict, "", page.Request.Url.ToString(), "根据code获取OpenId和AccessToken", LogType.GetTokenOrOpenID);
                }
                return(nameValueCollection);
            }
            catch (Exception ex)
            {
                if (!JsApiPay.paramDict.ContainsKey("appid"))
                {
                    JsApiPay.paramDict.Add("appid", appId);
                }
                if (!JsApiPay.paramDict.ContainsKey("secret"))
                {
                    JsApiPay.paramDict.Add("secret", appSecret);
                }
                if (!JsApiPay.paramDict.ContainsKey("code"))
                {
                    JsApiPay.paramDict.Add("code", code);
                }
                if (!JsApiPay.paramDict.ContainsKey("grant_type"))
                {
                    JsApiPay.paramDict.Add("grant_type", "authorization_code");
                }
                if (!JsApiPay.paramDict.ContainsKey("OpenID"))
                {
                    JsApiPay.paramDict.Add("OpenID", value);
                }
                if (!JsApiPay.paramDict.ContainsKey("Access_Token"))
                {
                    JsApiPay.paramDict.Add("Access_Token", value2);
                }
                WxPayLog.AppendLog(JsApiPay.paramDict, "", page.Request.Url.ToString(), "根据code获取OpenId和AccessToken" + ex.Message, LogType.GetTokenOrOpenID);
                throw new WxPayException(ex.ToString());
            }
        }