Exemplo n.º 1
0
        private void GetOpenidAndAccessTokenFromCode(string code)
        {
            try
            {
                //构造获取openid及access_token的url
                WxPayData data = new WxPayData();
                data.SetValue("appid", WxPayConfig.APPID);
                data.SetValue("secret", WxPayConfig.APPSECRET);
                data.SetValue("code", code);
                data.SetValue("grant_type", "authorization_code");
                string url = "https://api.weixin.qq.com/sns/oauth2/access_token?" + data.ToUrl();

                //请求url以获取数据
                string result = HttpService.Get(url);

                //保存access_token,用于收货地址获取
                JsonData jd = JsonMapper.ToObject(result);
                _accessToken = (string)jd["access_token"];

                //获取用户openid
                _openId = (string)jd["openid"];

                LogHelper.CreateLog(string.Format("WxPayController.GetOpenidAndAccessTokenFromCode     openid:{0}\r\naccess_token:{1}", _openId, _accessToken), "wxdebug");
            }
            catch (Exception ex)
            {
                LogHelper.WriteLog(ex, "~/logs/GeneralLog");
                throw new WxPayException(ex.ToString());
            }
        }
Exemplo n.º 2
0
        public ActionResult WxPayIndex()
        {
            var shopcarViewModel = Session["Car"] as ShopCarViewModel;
            if (shopcarViewModel == null)
                return RedirectToAction("CheckInfoTicket", "Booking");

            _totalFee = Convert.ToInt32(shopcarViewModel.UserInfo.SumPrice * 100).ToString();
            LogHelper.CreateLog("进入WxPayIndex" + Request.QueryString["code"], "wxdebug");
            if (!string.IsNullOrEmpty(Request.QueryString["code"]))
            {
                Session["Car"] = null;
                var orderId = shopcarViewModel.OrderId;
                string code = Request.QueryString["code"];
                LogHelper.CreateLog(string.Format("WxPayController.WxPayIndex  code:{0}", code), "wxdebug");
                GetOpenidAndAccessTokenFromCode(code);
                var wxjsParam = PrePay(orderId);
                try
                {
                    PrePayModel prePayModel = JsonConvert.DeserializeObject<PrePayModel>(wxjsParam);
                    if (prePayModel != null)
                    {
                        //                        var wxJsApiParam = string.Format(@"timestamp:{0},nonceStr:'{1}',package:'{2}'
                        //                                    ,signType:'{3}',paySign:'{4}'", prePayModel.TimeStamp, prePayModel.NonceStr,
                        //                            prePayModel.PackAge,
                        //                            prePayModel.SignType, prePayModel.PaySign);
                        //                        LogHelper.CreateLog(wxJsApiParam, "wxdebug");

                        ViewData["timestamp2"] = prePayModel.TimeStamp;
                        ViewData["nonceStr2"] = prePayModel.NonceStr;
                        ViewData["package2"] = prePayModel.PackAge;
                        ViewData["signType2"] = prePayModel.SignType;
                        ViewData["paySign2"] = prePayModel.PaySign;
                    }
                }
                catch (Exception ex)
                {
                    LogHelper.CreateLog(ex.StackTrace, "wxdebug");
                }

                var wxConfigResult = Jssdk.GetWxConfigResult(WxPayConfig.APPID, WxPayConfig.APPSECRET, Request.Url.AbsoluteUri);
                ViewData["appid"] = wxConfigResult.appid;
                ViewData["timestamp"] = wxConfigResult.timestamp;
                ViewData["noncestr"] = wxConfigResult.noncestr;
                ViewData["signature"] = wxConfigResult.signature;
            }
            else
            {
                //构造网页授权获取code的URL
                string host = Request.Url.Host;
                string path = Request.Path;
                string redirect_uri = HttpUtility.UrlEncode("http://" + host + path);
                WxPayData data = new WxPayData();
                data.SetValue("appid", WxPayConfig.APPID);
                data.SetValue("redirect_uri", redirect_uri);
                data.SetValue("response_type", "code");
                data.SetValue("scope", "snsapi_base");
                data.SetValue("state", "STATE" + "#wechat_redirect");
                data.SetValue("showwxpaytitle", "1");
                string url = "https://open.weixin.qq.com/connect/oauth2/authorize?" + data.ToUrl();
                LogHelper.CreateLog(string.Format("WxPayController.WxPayIndex      Will Redirect to URL :{0} ", url), "wxdebug");
                try
                {
                    //触发微信返回code码
                    Response.Redirect(url);//Redirect函数会抛出ThreadAbortException异常,不用处理这个异常
                }
                catch (System.Threading.ThreadAbortException)
                {
                }
            }
            return View();
        }
Exemplo n.º 3
0
        /**
        *
        * 获取收货地址js函数入口参数,详情请参考收货地址共享接口:http://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_9
        * @return string 共享收货地址js函数需要的参数,json格式可以直接做参数使用
        */
        private string GetEditAddressParameters()
        {
            string parameter = "";
            try
            {
                string host = Request.Url.Host;
                string path = Request.Path;
                string queryString = Request.Url.Query;
                //这个地方要注意,参与签名的是网页授权获取用户信息时微信后台回传的完整url
                string url = "http://" + host + path + queryString;

                //构造需要用SHA1算法加密的数据
                WxPayData signData = new WxPayData();
                signData.SetValue("appid", WxPayConfig.APPID);
                signData.SetValue("url", url);
                signData.SetValue("timestamp", WxPayApi.GenerateTimeStamp());
                signData.SetValue("noncestr", WxPayApi.GenerateNonceStr());
                signData.SetValue("accesstoken", _accessToken);
                string param = signData.ToUrl();

                //Log.Debug(this.GetType().ToString(), "SHA1 encrypt param : " + param);
                //SHA1加密
                string addrSign = FormsAuthentication.HashPasswordForStoringInConfigFile(param, "SHA1");
                //Log.Debug(this.GetType().ToString(), "SHA1 encrypt result : " + addrSign);

                //获取收货地址js函数入口参数
                WxPayData afterData = new WxPayData();
                afterData.SetValue("appId", WxPayConfig.APPID);
                afterData.SetValue("scope", "jsapi_address");
                afterData.SetValue("signType", "sha1");
                afterData.SetValue("addrSign", addrSign);
                afterData.SetValue("timeStamp", signData.GetValue("timestamp"));
                afterData.SetValue("nonceStr", signData.GetValue("noncestr"));

                //转为json格式
                parameter = afterData.ToJson();
                //Log.Debug(this.GetType().ToString(), "Get EditAddressParam : " + parameter);
            }
            catch (Exception ex)
            {
                //Log.Error(this.GetType().ToString(), ex.ToString());
                throw new WxPayException(ex.ToString());
            }

            return parameter;
        }