Exemplo n.º 1
0
        /**
         *
         * 通过code换取网页授权access_token和openid的返回数据,正确时返回的JSON数据包如下:
         * {
         *  "access_token":"ACCESS_TOKEN",
         *  "expires_in":7200,
         *  "refresh_token":"REFRESH_TOKEN",
         *  "openid":"OPENID",
         *  "scope":"SCOPE",
         *  "unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL"
         * }
         * 其中access_token可用于获取共享收货地址
         * openid是微信支付jsapi支付接口统一下单时必须的参数
         * 更详细的说明请参考网页授权获取用户基本信息:http://mp.weixin.qq.com/wiki/17/c0f37d5704f0b64713d5d2c37b468d75.html
         * @失败时抛异常WxPayException
         */

        public void GetOpenidAndAccessTokenFromCode(string code)
        {
            try
            {
                //构造获取openid及access_token的url
                WxPayData data = new WxPayData();
                data.SetValue("appid", jsApiConfig.AppId);
                data.SetValue("secret", jsApiConfig.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);

                OwinTokenDto model = SerializationHelper.JsonToObject <OwinTokenDto>(result);

                //保存access_token,用于收货地址获取
                access_token = model.Access_Token;

                //获取用户openid
                openid = model.OpenId;
            }
            catch (Exception ex)
            {
                throw new WxPayException(ex.ToString());
            }
        }
        public OwinUserDto GetUserDto(OwinConfig owinConfig, OwinTokenDto owinTokenDto)
        {
            //https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID
            string strUri = GetUserUri(owinConfig, owinTokenDto);

            return(HttpHelper.Get <OwinUserDto>(strUri));
        }
        public OwinUserDto GetUserDto(OwinConfig owinConfig, string strCode)
        {
            OwinTokenDto owinTokenDto = GetTokenDto(owinConfig, strCode);

            if (owinTokenDto.ErrCode.HasValue)
            {
                return(new OwinUserDto
                {
                    ErrCode = owinTokenDto.ErrCode,
                    ErrMsg = owinTokenDto.ErrMsg
                });
            }

            return(GetUserDto(owinConfig, owinTokenDto));
        }
        public string GetUserUri(string strName, OwinTokenDto owinTokenDto)
        {
            OwinConfig config = GetByName(strName);

            return(GetUserUri(config, owinTokenDto));
        }
        public async Task <bool> Login(string strOwinConfigName, string strOwinState, string strOwinCode, string strSessionName = "Mob")
        {
            MobMemberHelper helper = new MobMemberHelper();

            Member member = null;

            if (!SystemConfigModel.Instance.IsUseWechatLogin)
            {
                member = new Member();
                if (!(await helper.SaveAsync(member)))
                {
                    return(false);
                }

                return(true);
            }

            if (!SessionHelper.Owin.IsValid(strOwinState))
            {
                return(false);
            }

            OwinConfig   config       = GetByName(strOwinConfigName);
            OwinTokenDto owinTokenDto = GetTokenDto(config, strOwinCode);

            if (!owinTokenDto.ErrCode.HasValue)
            {
                member = helper.GetDbSet <Member>().Where(o => o.OpenId == owinTokenDto.OpenId).FirstOrDefault();
                if (member != null)
                {
                    member.Name = "";
                    SetSession(member);
                    return(true);
                }
            }

            OwinUserDto owinDto = GetUserDto(config, owinTokenDto);

            if (owinDto.ErrCode.HasValue)
            {
                LogHelper.Error(owinDto.ErrCode + ":" + owinDto.ErrMsg);
                return(false);
            }

            if (member == null)
            {
                member = helper.GetDbSet <Member>().Where(o => o.OpenId == owinTokenDto.OpenId).FirstOrDefault();
            }

            if (member == null)
            {
                member = new Member
                {
                    OpenId = owinDto.OpenId,
                };
            }

            member.NickName  = owinDto.NickName;
            member.Avatar    = owinDto.HeadImgUrl;
            member.Sex       = owinDto.Sex == "1" ? Sex.Male : Sex.Male;
            member.ShareCode = await GetShareCodeAsync();

            if (!(await helper.SaveAsync(member)))
            {
                return(false);
            }

            string strShareCode = SessionHelper.ShareCode.GetSession <string>();

            if (!string.IsNullOrEmpty(strShareCode))
            {
                await helper.SetMemberReferee(member, strShareCode);
            }

            return(true);
        }
        public string GetUserUri(OwinConfig config, OwinTokenDto owinTokenDto)
        {
            string strUri = TypeHelper.FillContent <OwinConfig>(config, config.UserInfoUri);

            return(TypeHelper.FillContent <OwinTokenDto>(owinTokenDto, strUri));
        }