コード例 #1
0
        public void Setup()
        {
            var handler         = new FakeResponseHandler();
            var historysettings = new HistorySettings {
                Use = true, Url = "whatever.com", Port = 3000
            };
            var jsApi = new JsApi(handler, historysettings);

            _apiProvider = new JsApiProvider(jsApi);
        }
コード例 #2
0
        //
        // GET: /Account/

        /// <summary>
        /// 绑定微信
        /// </summary>
        /// <param name="url"></param>
        /// <returns></returns>
        public ActionResult WXBind(string url)
        {
            try
            {
                JsApi jsapi = new JsApi(this);

                string codeUrl = jsapi.GetOpenidAndAccessToken_snsapi_userinfo();
                if (codeUrl != string.Empty)
                {
                    return(Redirect(codeUrl));
                }


                WXVariousApi VariousApi = new WXVariousApi();
                VariousApi.LoadWxConfigIncidentalAccess_token();
                WXUserInfo wx_userinfo = VariousApi.GetUserInfo(jsapi.openid);

                C_UserWxInfo.UnBindWxByC_UserName(CurrentUser.UserName);//解绑微信

                //用户信息,包括微信信息
                C_UserWxInfo wxInfo = C_UserWxInfo.GetInfoByOpenid(jsapi.openid);
                if (wxInfo == null)
                {
                    wxInfo                = new C_UserWxInfo();
                    wxInfo.C_UserName     = CurrentUser.UserName;
                    wxInfo.openid         = jsapi.openid;
                    wxInfo.accesstoken    = jsapi.access_token;
                    wxInfo.nickname       = wx_userinfo.nickname;
                    wxInfo.sex            = wx_userinfo.sex;
                    wxInfo.unionid        = wx_userinfo.unionid;
                    wxInfo.headimgurl     = wx_userinfo.headimgurl;
                    wxInfo.subscribe      = (wx_userinfo.subscribe == "0" ? false : true);
                    wxInfo.country        = wx_userinfo.country;
                    wxInfo.subscribe_time = Common.ConvertToDateTen(wx_userinfo.subscribe_time);
                    wxInfo.language       = wx_userinfo.language;
                    wxInfo.ID             = wxInfo.InsertAndReturnIdentity();//新的ID
                }
                else
                {
                    C_UserWxInfo.BindWxByC_UserName(CurrentUser.UserName, wxInfo.ID);
                }



                return(Redirect(HttpUtility.UrlDecode(url)));
            }
            catch (Exception ex)
            {
                DAL.Log.Instance.Write(ex.ToString(), "WXBind_error");
                return(View(ErrorPage.ViewName, new ErrorPage {
                    Message = "绑定微信失败"
                }));
            }
        }
コード例 #3
0
        protected void Page_Load(object sender, EventArgs e)
        {
            timestamp = Utils.ConvertDateTimeInt(DateTime.Now).ToString();
            noncestr  = timestamp; // 随机字符串也使用时间戳
            url       = "http://" + Utils.GetCurrentFullHost() + Request.RawUrl;
            var accessToken = AccessTokenBox.GetTokenValue("wxf50808b364418ffb", "bfaf8363dc64787091b3bbb7740dcf44");

            if (ticket == null || ticket.expires_time < DateTime.Now)
            {
                ticket = JsApi.GetHsJsApTicket(accessToken);
            }
            sign = JsApi.GetJsApiSign(noncestr, ticket.ticket, timestamp, url);
        }
コード例 #4
0
ファイル: HomeController.cs プロジェクト: Haute998/WalkTd
        public ActionResult WXLogin(string url)
        {
            try
            {
                JsApi  jsapi   = new JsApi(this);
                string codeUrl = jsapi.GetOpenidAndAccessToken_snsapi_userinfo();
                if (codeUrl != string.Empty)
                {
                    return(Redirect(codeUrl));
                }

                //用户信息,包括微信信息
                C_UserWxVM userVM = new C_UserWxVM();
                Log.Instance.Write(jsapi.openid, "OpenID");

                userVM.LoadUserVMByOpenid(jsapi.openid);

                WXVariousApi VariousApi = new WXVariousApi();
                VariousApi.LoadWxConfigIncidentalAccess_token();
                WXUserInfo wx_userinfo = VariousApi.GetUserInfo(jsapi.openid);

                //未关注获取头像
                if (wx_userinfo.subscribe == "0")
                {
                    WXUserInfo new_Wx_UserInfo = VariousApi.GetUserInfo0(jsapi.openid, jsapi.access_token);

                    if (new_Wx_UserInfo != null)
                    {
                        wx_userinfo.nickname   = new_Wx_UserInfo.nickname;
                        wx_userinfo.sex        = new_Wx_UserInfo.sex;
                        wx_userinfo.province   = new_Wx_UserInfo.province;
                        wx_userinfo.city       = new_Wx_UserInfo.city;
                        wx_userinfo.country    = new_Wx_UserInfo.country;
                        wx_userinfo.headimgurl = new_Wx_UserInfo.headimgurl;
                        wx_userinfo.unionid    = new_Wx_UserInfo.unionid;
                    }
                }

                if (userVM == null || userVM.user == null)
                {
                    if (wx_userinfo.unionid.Length > 0)
                    {
                        userVM.LoadUserVMByunionid(wx_userinfo.unionid);
                    }
                }

                if (userVM == null || userVM.user == null)
                {
                    userVM.user       = new C_WxUser();
                    userVM.userWxInfo = new C_UserWxInfo();
                    //用户信息赋值
                    userVM.user.UserName             = "******" + (C_User.GetTopUseID() + 1 + 1000);
                    userVM.user.PassWord             = "";
                    userVM.user.IsValid              = true;
                    userVM.user.DatRegister          = DateTime.Now;
                    userVM.user.NickName             = wx_userinfo.nickname;
                    userVM.user.PortraitUrl          = wx_userinfo.headimgurl;
                    userVM.userWxInfo.openid         = jsapi.openid;
                    userVM.userWxInfo.accesstoken    = jsapi.access_token;
                    userVM.userWxInfo.nickname       = wx_userinfo.nickname;
                    userVM.userWxInfo.sex            = wx_userinfo.sex;
                    userVM.userWxInfo.unionid        = wx_userinfo.unionid;
                    userVM.userWxInfo.headimgurl     = wx_userinfo.headimgurl;
                    userVM.userWxInfo.subscribe      = (wx_userinfo.subscribe == "0" ? false : true);
                    userVM.userWxInfo.country        = wx_userinfo.country;
                    userVM.userWxInfo.subscribe_time = Common.ConvertToDateTen(wx_userinfo.subscribe_time);
                    userVM.userWxInfo.language       = wx_userinfo.language;

                    userVM.AddUser();
                    userVM.userWxInfo.C_UserName = userVM.user.UserName;
                }
                else
                {
                    userVM.user.NickName             = wx_userinfo.nickname;
                    userVM.user.PortraitUrl          = wx_userinfo.headimgurl;
                    userVM.userWxInfo.openid         = jsapi.openid;
                    userVM.userWxInfo.accesstoken    = jsapi.access_token;
                    userVM.userWxInfo.nickname       = wx_userinfo.nickname;
                    userVM.userWxInfo.sex            = wx_userinfo.sex;
                    userVM.userWxInfo.unionid        = wx_userinfo.unionid;
                    userVM.userWxInfo.headimgurl     = wx_userinfo.headimgurl;
                    userVM.userWxInfo.subscribe      = (wx_userinfo.subscribe == "0" ? false : true);
                    userVM.userWxInfo.country        = wx_userinfo.country;
                    userVM.userWxInfo.subscribe_time = Common.ConvertToDateTen(wx_userinfo.subscribe_time);
                    userVM.userWxInfo.language       = wx_userinfo.language;
                    userVM.user.UpdateByID();
                }
                string error    = string.Empty;
                string userName = userVM.user.UserName;
                userVM.userWxInfo.accesstoken    = jsapi.access_token;
                userVM.userWxInfo.nickname       = wx_userinfo.nickname;
                userVM.userWxInfo.groupid        = wx_userinfo.groupid;
                userVM.userWxInfo.headimgurl     = wx_userinfo.headimgurl;
                userVM.userWxInfo.subscribe      = (wx_userinfo.subscribe == "0" ? false : true);
                userVM.userWxInfo.country        = wx_userinfo.country;
                userVM.userWxInfo.subscribe_time = Common.ConvertToDateTen(wx_userinfo.subscribe_time);
                userVM.userWxInfo.language       = wx_userinfo.language;


                if (!string.IsNullOrWhiteSpace(userVM.userWxInfo.nickname))
                {
                    new System.Threading.Thread(delegate()
                    {
                        userVM.UpdateUserWxInfo();
                    }).Start();
                }
                Common.SetCookie("WxUserName", userName);
                DAL.Log.Instance.Write(userName + HttpUtility.UrlDecode(url) + wx_userinfo.nickname, "WXLogin_error11");
                return(Redirect(HttpUtility.UrlDecode(url)));
            }
            catch (Exception ex)
            {
                DAL.Log.Instance.Write(ex.ToString(), "WXLogin_error");
                return(View(ErrorPage.ViewName, new ErrorPage {
                    Message = ex.ToString()
                }));
            }
        }
コード例 #5
0
ファイル: WechatController.cs プロジェクト: FH-VMS/FycnApi
        public ResultObj <PayStateModel> GetUrl(string m, string code, string retBack = "")
        {
            //var log = LogManager.GetLogger("FycnApi", "wechat");
            //log.Info("mmmmmmmmmmmmmmmm:"+m);
            string url = string.Empty;
            //KeyJsonModel keyJsonInfo = PayHelper.AnalizeKey(k);
            IPay          _ipay     = new PayService();
            WxPayConfig   payConfig = _ipay.GenerateConfigModelWByClientId(m);
            PayStateModel payState  = new PayStateModel();

            if (string.IsNullOrEmpty(payConfig.APPID))
            {
                payState.RequestState = "2";
                payState.ProductJson  = "";
                payState.RequestData  = "";
                return(Content(payState));
            }
            PayModel payInfo = new PayModel();

            //JsApi.payInfo = new PayModel();
            payInfo.k = m;
            JsApi  jsApi   = new JsApi();
            string backUrl = "/wechat.html?clientId=" + m;

            if (!string.IsNullOrEmpty(retBack))
            {
                backUrl = backUrl + HttpUtility.UrlDecode(retBack);
            }
            jsApi.GetOpenidAndAccessToken(code, payConfig, payInfo, backUrl, "snsapi_userinfo");

            if (string.IsNullOrEmpty(payInfo.openid))
            {
                payState.RequestState = "0";
                payState.ProductJson  = "";
                payState.RequestData  = payInfo.redirect_url;
                return(Content(payState));
            }
            //根据code 返回access_token
            //string urlAcess = string.Format("https://api.weixin.qq.com/sns/oauth2/access_token?appid={0}&secret={1}&code={2}&grant_type=authorization_code", payConfig.APPID,payConfig.APPSECRET,code);
            //string jsonResult = HttpService.Get(urlAcess);
            //log.Info("access_token:" + jsonResult);

            //Dictionary<string,string> dicAcess = JsonHandler.GetObjectFromJson<Dictionary<string,string>>(jsonResult);
            string accessToken = payInfo.access_token;//dicAcess["access_token"];
            //取授权用户信息
            string urlUserInfo  = string.Format("https://api.weixin.qq.com/sns/userinfo?access_token={0}&openid={1}&lang=zh_CN", accessToken, payInfo.openid);
            string jsonUserInfo = HttpService.Get(urlUserInfo);

            payState.RequestState = "1";
            payState.ProductJson  = jsonUserInfo;
            payState.RequestData  = "";
            IWechat           iwechat    = new WechatService();
            WechatMemberModel memberInfo = new WechatMemberModel();

            memberInfo.ClientId = m;
            memberInfo.OpenId   = payInfo.openid;
            List <WechatMemberModel> lstMemberInfo = iwechat.IsExistMember(memberInfo);

            if (lstMemberInfo.Count == 0)
            {
                WechatMemberModel createMemberInfo = JsonHandler.GetObjectFromJson <WechatMemberModel>(jsonUserInfo);
                createMemberInfo.ClientId = m;
                iwechat.CreateMember(createMemberInfo);
            }
            //if(iwechat.IsExistMember(memberInfo))
            //log.Info("test");

            return(Content(payState));
        }
コード例 #6
0
ファイル: WechatController.cs プロジェクト: FH-VMS/FycnApi
        //微信支付
        public ResultObj <PayStateModel> PostDataW(string clientId, string openId, string privilegeIds, string selfChosen, [FromBody] List <ProductPayModel> lstProductPay)
        {
            var log = LogManager.GetLogger("FycnApi", "wechat");

            try
            {
                IPay _ipay = new PayService();
                //移动支付赋值
                WxPayConfig payConfig = _ipay.GenerateConfigModelWByClientId(clientId);
                payConfig.NOTIFY_URL = PathConfig.NotidyAddr + "/Wechat/PostPayResultW"; //结果通知方法
                JsApi    jsApi   = new JsApi();
                PayModel payInfo = new PayModel();
                payInfo.openid = openId;
                //JsApi.payInfo = new PayModel();
                //生成code 根据code取微信支付的openid和access_token
                //jsApi.GetOpenidAndAccessToken(code, payConfig, payInfo, "/wechat.html#/pay?clientId=" + clientId, "");

                PayStateModel payState = new PayStateModel();


                //JSAPI支付预处理

                //string result = HttpService.Get(payInfo.redirect_url);
                //生成交易号
                payInfo.trade_no    = new PayHelper().GeneraterTradeNo();
                payInfo.jsonProduct = clientId;
                //取商品信息


                decimal totalFee     = 0;
                string  productNames = string.Empty;
                List <ProductListModel> lstProduct = new List <ProductListModel>();
                IWechat _iwechat     = new WechatService();
                string  waresId      = string.Empty;
                string  waresGroupId = string.Empty;
                foreach (ProductPayModel productInfo in lstProductPay)
                {
                    waresId = waresId + productInfo.WaresId + ",";
                }

                lstProduct = _iwechat.GetProdcutAndGroupList(waresId.TrimEnd(','), waresGroupId.TrimEnd(','));
                //遍历商品
                foreach (ProductListModel productInfo in lstProduct)
                {
                    var productPay = (from m in lstProductPay
                                      where m.WaresId == productInfo.WaresId
                                      select m).ToList <ProductPayModel>();
                    if (productPay.Count > 0)
                    {
                        totalFee              = totalFee + Convert.ToInt32(productPay[0].Number) * Convert.ToDecimal(productInfo.WaresDiscountUnitPrice == 0 ? productInfo.WaresUnitPrice: productInfo.WaresDiscountUnitPrice);
                        productNames          = productNames + productInfo.WaresName + ",";
                        productPay[0].TradeNo = payInfo.trade_no;
                    }
                }


                payInfo.product_name = productNames.Length > 25 ? productNames.Substring(0, 25) : productNames;

                payState.ProductJson = JsonHandler.GetJsonStrFromObject(lstProductPay, false);
                /*******************优惠券信息**********************/
                PrivilegeMemberRelationModel privilegeInfo = new PrivilegeMemberRelationModel();
                privilegeInfo.ClientId = clientId;
                privilegeInfo.MemberId = openId;
                if (totalFee > 0.01M)
                {
                    List <PrivilegeMemberRelationModel> lstPrivilege = new List <PrivilegeMemberRelationModel>();
                    if (string.IsNullOrEmpty(privilegeIds) && string.IsNullOrEmpty(selfChosen))
                    {
                        lstPrivilege = _iwechat.GetCanUsePrivilege(privilegeInfo, privilegeIds, ref totalFee, lstProductPay);
                    }
                    else if (!string.IsNullOrEmpty(privilegeIds))
                    {
                        lstPrivilege = _iwechat.GetChosenPrivilege(privilegeInfo, privilegeIds, ref totalFee, lstProductPay);
                    }



                    log.Info("ddddd" + lstPrivilege.Count);
                    if (lstPrivilege.Count > 0)
                    {
                        string[] lstStr = lstPrivilege.Select(m => m.Id).ToArray();
                        if (string.IsNullOrEmpty(privilegeIds))
                        {
                            payInfo.jsonProduct = payInfo.jsonProduct + "~" + string.Join(",", lstStr);
                        }
                        else
                        {
                            payInfo.jsonProduct = payInfo.jsonProduct + "~" + privilegeIds;
                        }

                        payState.PrivilegeJson = JsonHandler.GetJsonStrFromObject(lstPrivilege, false);
                    }
                }
                //string total_fee = "1";
                //检测是否给当前页面传递了相关参数

                // 1.先取购买商品的详情返回给用户   并缓存到页面   2.支付成功后跳转到支付结果页并把缓存数据插入到销售记录表
                //若传递了相关参数,则调统一下单接口,获得后续相关接口的入口参数

                // jsApiPay.openid = openid;

                /*
                 * decimal privilegeMoney = 0;
                 * int weixinMoney = 0;
                 * if (lstPrivilege.Count > 0)
                 * {
                 *  if (lstPrivilege[0].Money>0)
                 *  {
                 *      privilegeMoney = lstPrivilege[0].Money;
                 *      weixinMoney = Convert.ToInt32(((totalFee - privilegeMoney) * 100));
                 *  }
                 *  else
                 *  {
                 *      privilegeMoney = lstPrivilege[0].Discount;
                 *      weixinMoney = Convert.ToInt32(((totalFee) * 100)* (privilegeMoney/10));
                 *  }
                 *
                 * }
                 * else
                 * {
                 */
                int weixinMoney = Convert.ToInt32((totalFee) * 100);
                //}

                payInfo.total_fee = (weixinMoney < 0 ? 1 : weixinMoney);
                //payInfo.jsonProduct = JsonHandler.GetJsonStrFromObject(keyJsonInfo, false);
                payState.TotalMoney = (totalFee < 0 ? Convert.ToDecimal(0.01) : totalFee);
                //写入交易中转
                if (payInfo.total_fee == 0)
                {
                    payState.RequestState = "2";
                    payState.RequestData  = "";
                    return(Content(payState));
                }
                RedisHelper helper = new RedisHelper(0);

                helper.StringSet(payInfo.trade_no.Trim(), JsonHandler.GetJsonStrFromObject(lstProductPay, false), new TimeSpan(0, 10, 30));

                // FileHandler.WriteFile("data/", JsApi.payInfo.trade_no + ".wa", JsApi.payInfo.jsonProduct);

                WxPayData unifiedOrderResult = jsApi.GetUnifiedOrderResult(payInfo, payConfig);
                // Log.Write("GetDataW", "step step");
                string wxJsApiParam = jsApi.GetJsApiParameters(payConfig, payInfo);//获取H5调起JS API参数
                payState.RequestState = "1";
                payState.RequestData  = wxJsApiParam;



                return(Content(payState));
            }
            catch (Exception ex)
            {
                PayStateModel payStateError = new PayStateModel();
                payStateError.RequestState = "3";
                payStateError.RequestData  = ex.Message;
                return(Content(payStateError));
            }
            return(Content(new PayStateModel()));
        }
コード例 #7
0
ファイル: xfz_homeController.cs プロジェクト: Haute998/WalkTd
        //
        // GET: /xfz_home/


        public ActionResult wxlogin(string url)
        {
            try
            {
                string openid       = "";
                string access_token = "";

                if (!string.IsNullOrWhiteSpace(WeConfig.WxDebug))
                {
                    openid       = WeConfig.WxDebug;
                    access_token = "";
                }


                else
                {
                    JsApi jsapi = new JsApi(this);

                    string codeUrl = jsapi.GetOpenidAndAccessToken_snsapi_userinfo();
                    if (codeUrl != string.Empty)
                    {
                        return(Redirect(codeUrl));
                    }
                    openid       = jsapi.openid;
                    access_token = jsapi.access_token;
                }



                //用户信息,包括微信信息
                C_ConsumerWxVM userVM = new C_ConsumerWxVM();
                userVM.LoadUserVMByOpenid(openid);

                WXVariousApi VariousApi = new WXVariousApi();
                VariousApi.LoadWxConfigIncidentalAccess_token();
                WXUserInfo wx_userinfo = VariousApi.GetUserInfo(openid);



                if (wx_userinfo == null)
                {
                    wx_userinfo = new WXUserInfo();
                }



                //未关注获取头像
                if (wx_userinfo.subscribe == "0")
                {
                    WXUserInfo new_Wx_UserInfo = VariousApi.GetUserInfo0(openid, access_token);

                    if (new_Wx_UserInfo != null)
                    {
                        wx_userinfo.nickname   = new_Wx_UserInfo.nickname;
                        wx_userinfo.sex        = new_Wx_UserInfo.sex;
                        wx_userinfo.province   = new_Wx_UserInfo.province;
                        wx_userinfo.city       = new_Wx_UserInfo.city;
                        wx_userinfo.country    = new_Wx_UserInfo.country;
                        wx_userinfo.headimgurl = new_Wx_UserInfo.headimgurl;
                        wx_userinfo.unionid    = new_Wx_UserInfo.unionid;
                    }
                }



                if (userVM == null || userVM.user == null)
                {
                    string guidCode = DAL.MD5Helper.GetMD5UTF8(Request.UserHostAddress + "," + Guid.NewGuid().ToString());


                    userVM.user       = new C_Consumer();
                    userVM.userWxInfo = new C_UserWxInfo();
                    //用户信息赋值
                    userVM.user.UserName             = "******" + (C_Consumer.GetTopUseID() + 1 + 1000 + guidCode.SubStringSafe(0, 4));
                    userVM.user.Pwd                  = "";
                    userVM.user.DatReg               = DateTime.Now;
                    userVM.user.Mobile               = "";
                    userVM.user.Type                 = "消费者";
                    userVM.userWxInfo.openid         = openid;
                    userVM.userWxInfo.accesstoken    = access_token;
                    userVM.userWxInfo.nickname       = wx_userinfo.nickname;
                    userVM.userWxInfo.sex            = wx_userinfo.sex;
                    userVM.userWxInfo.unionid        = wx_userinfo.unionid;
                    userVM.userWxInfo.headimgurl     = wx_userinfo.headimgurl;
                    userVM.userWxInfo.subscribe      = (wx_userinfo.subscribe == "0" ? false : true);
                    userVM.userWxInfo.country        = wx_userinfo.country;
                    userVM.userWxInfo.subscribe_time = Common.ConvertToDateTen(wx_userinfo.subscribe_time);
                    userVM.userWxInfo.language       = wx_userinfo.language;

                    userVM.AddUser();
                    userVM.userWxInfo.C_UserName = userVM.user.UserName;
                }
                userVM.userWxInfo.C_ConsumerUserName = userVM.user.UserName;
                string error    = string.Empty;
                string userName = userVM.user.UserName;
                userVM.userWxInfo.accesstoken    = access_token;
                userVM.userWxInfo.nickname       = wx_userinfo.nickname;
                userVM.userWxInfo.groupid        = wx_userinfo.groupid;
                userVM.userWxInfo.headimgurl     = wx_userinfo.headimgurl;
                userVM.userWxInfo.subscribe      = (wx_userinfo.subscribe == "0" ? false : true);
                userVM.userWxInfo.country        = wx_userinfo.country;
                userVM.userWxInfo.subscribe_time = Common.ConvertToDateTen(wx_userinfo.subscribe_time);
                userVM.userWxInfo.language       = wx_userinfo.language;


                if (!string.IsNullOrWhiteSpace(userVM.userWxInfo.nickname))
                {
                    new System.Threading.Thread(delegate()
                    {
                        userVM.UpdateUserWxInfo();
                    }).Start();
                }
                Session["xfz_UserName"] = userName;
                return(Redirect(HttpUtility.UrlDecode(url)));
            }
            catch (Exception ex)
            {
                DAL.Log.Instance.Write(ex.ToString(), "WXLogin_error");
                return(View(ErrorPage.ViewName, new ErrorPage {
                    Message = ex.ToString()
                }));
            }
        }
コード例 #8
0
ファイル: PaymentController.cs プロジェクト: FH-VMS/FycnApi
        //微信支付
        public ResultObj <PayStateModel> GetDataW(string k, string code)
        {
            bool isPayByTunnel = true;

            try
            {
                //解码机器传过来的key值
                //解析k值
                KeyJsonModel keyJsonInfo = new PayHelper().AnalizeKey(k);
                RedisHelper  redisHelper = new RedisHelper(0);
                if (!redisHelper.KeyExists(keyJsonInfo.m))
                {
                    PayStateModel payStateNull = new PayStateModel();
                    return(Content(payStateNull, ResultCode.Success, "机器不在线", new Pagination {
                    }));
                }
                IPay _ipay = new PayService();
                //移动支付赋值
                WxPayConfig payConfig = _ipay.GenerateConfigModelW(keyJsonInfo.m);
                JsApi       jsApi     = new JsApi();
                PayModel    payInfo   = new PayModel();
                //JsApi.payInfo = new PayModel();
                payInfo.k = k;
                //生成code 根据code取微信支付的openid和access_token
                jsApi.GetOpenidAndAccessToken(code, payConfig, payInfo, "/m.html?k=" + payInfo.k, "");

                PayStateModel payState = new PayStateModel();
                if (string.IsNullOrEmpty(payInfo.openid))
                {
                    payState.RequestState = "0";
                    payState.ProductJson  = "";
                    payState.RequestData  = payInfo.redirect_url;
                    return(Content(payState));
                }

                //JSAPI支付预处理


                if (string.IsNullOrEmpty(keyJsonInfo.m) || keyJsonInfo.t.Count == 0)
                {
                    payState.RequestState = "2";
                    payState.ProductJson  = "";
                    payState.RequestData  = "";
                    return(Content(payState));
                }
                //生成交易号
                payInfo.trade_no = new PayHelper().GeneraterTradeNo();
                //取商品信息


                decimal             totalFee     = 0;
                string              productNames = string.Empty;
                List <ProductModel> lstProduct   = new List <ProductModel>();
                if (keyJsonInfo.t.Count > 0 && keyJsonInfo.t[0].tid.Length > 10)
                {
                    isPayByTunnel = false;
                }

                //按货道付款
                if (isPayByTunnel)
                {
                    lstProduct = _ipay.GetProducInfo(keyJsonInfo.m, keyJsonInfo.t);
                    //遍历商品
                    foreach (ProductModel productInfo in lstProduct)
                    {
                        var tunnelInfo = (from m in keyJsonInfo.t
                                          where m.tid == productInfo.TunnelId
                                          select m).ToList <KeyTunnelModel>();
                        if (tunnelInfo.Count > 0)
                        {
                            productInfo.Num     = string.IsNullOrEmpty(tunnelInfo[0].n) ? "1" : tunnelInfo[0].n;
                            totalFee            = totalFee + Convert.ToInt32(productInfo.Num) * Convert.ToDecimal(productInfo.UnitW);
                            productNames        = productNames + productInfo.WaresName + ",";
                            productInfo.TradeNo = payInfo.trade_no;
                            tunnelInfo[0].p     = productInfo.UnitW;
                            tunnelInfo[0].wid   = productInfo.WaresId;
                        }
                    }
                }
                else
                {
                    lstProduct = _ipay.GetProducInfoByWaresId(keyJsonInfo.m, keyJsonInfo.t);
                    //遍历商品
                    foreach (ProductModel productInfo in lstProduct)
                    {
                        var tunnelInfo = (from m in keyJsonInfo.t
                                          where m.tid == productInfo.WaresId
                                          select m).ToList <KeyTunnelModel>();
                        if (tunnelInfo.Count > 0)
                        {
                            productInfo.Num     = string.IsNullOrEmpty(tunnelInfo[0].n) ? "1" : tunnelInfo[0].n;
                            totalFee            = totalFee + Convert.ToInt32(productInfo.Num) * Convert.ToDecimal(productInfo.UnitW);
                            productNames        = productNames + productInfo.WaresName + ",";
                            productInfo.TradeNo = payInfo.trade_no;
                            tunnelInfo[0].p     = productInfo.UnitW;

                            tunnelInfo[0].wid = productInfo.WaresId;
                            tunnelInfo[0].tid = productInfo.TunnelId;
                        }
                    }
                }


                payInfo.product_name = productNames.Length > 25 ? productNames.Substring(0, 25) : productNames;

                //string total_fee = "1";
                //检测是否给当前页面传递了相关参数

                // 1.先取购买商品的详情返回给用户   并缓存到页面   2.支付成功后跳转到支付结果页并把缓存数据插入到销售记录表
                //若传递了相关参数,则调统一下单接口,获得后续相关接口的入口参数

                // jsApiPay.openid = openid;

                payInfo.total_fee   = Convert.ToInt32((totalFee * 100));
                payInfo.jsonProduct = JsonHandler.GetJsonStrFromObject(keyJsonInfo, false);

                //写入交易中转

                /*
                 * RedisHelper helper = new RedisHelper(0);
                 *
                 * helper.StringSet(JsApi.payInfo.trade_no.Trim(), JsApi.payInfo.jsonProduct, new TimeSpan(0, 10, 30));
                 */
                // FileHandler.WriteFile("data/", JsApi.payInfo.trade_no + ".wa", JsApi.payInfo.jsonProduct);

                WxPayData unifiedOrderResult = jsApi.GetUnifiedOrderResult(payInfo, payConfig);
                // Log.Write("GetDataW", "step step");
                string wxJsApiParam = jsApi.GetJsApiParameters(payConfig, payInfo);//获取H5调起JS API参数
                payState.RequestState = "1";
                payState.ProductJson  = JsonHandler.GetJsonStrFromObject(lstProduct, false);
                payState.RequestData  = wxJsApiParam;



                return(Content(payState));
            }
            catch (Exception ex)
            {
                PayStateModel payStateError = new PayStateModel();
                payStateError.RequestState = "3";
                payStateError.RequestData  = ex.Message;
                return(Content(payStateError));
            }
            return(Content(new PayStateModel()));
        }