Esempio n. 1
0
 /// <summary>
 /// 微信-小程序登录
 /// </summary>
 /// <param name="code">wx.login获取到的用户码</param>
 /// <returns></returns>
 public Response BindWx(WxPayloadVO payload)
 {
     if (payload.IsCustomerServiceStaff)//微信公众号进入
     {
         return(BindCustomerServiceStaff(payload));
     }
     else//小程序进入
     {
         return(BindCustomer(payload));
     }
 }
Esempio n. 2
0
        /// <summary>
        /// 绑定客户-微信公众号进入
        /// </summary>
        /// <param name="payload"></param>
        /// <returns></returns>
        private Response BindCustomerServiceStaff(WxPayloadVO payload)
        {
            HttpClient client = new HttpClient();
            string     url    = "https://api.weixin.qq.com/sns/jscode2session?appid={0}&secret={1}&js_code={2}&grant_type=authorization_code";

            url = string.Format(url, AppId, Secret, payload.Code);

            HttpResponseMessage response = client.GetAsync(url).Result;

            response.EnsureSuccessStatusCode();

            string  msg  = response.Content.ReadAsStringAsync().Result;
            dynamic data = JsonConvert.DeserializeObject <dynamic>(msg);

            if (data.errmsg == null)
            {
                var             openid         = (string)data.openid;
                var             session_key    = (string)data.session_key;
                byte[]          encryData      = Convert.FromBase64String(payload.EncryptedData);
                RijndaelManaged rijndaelCipher = new RijndaelManaged
                {
                    Key     = Convert.FromBase64String(session_key),
                    IV      = Convert.FromBase64String(payload.Iv),
                    Mode    = CipherMode.CBC,
                    Padding = PaddingMode.PKCS7
                };
                ICryptoTransform transform = rijndaelCipher.CreateDecryptor();
                byte[]           plainText = transform.TransformFinalBlock(encryData, 0, encryData.Length);
                string           result    = Encoding.Default.GetString(plainText);
                //动态解析result 成对象
                dynamic obj = Newtonsoft.Json.Linq.JToken.Parse(result) as dynamic;

                string phoneNumber = (string)obj.phoneNumber;

                //查询手机号是否已注册
                dynamic staff = StaffService.QueryWxappUserByPhoneNumber(phoneNumber);

                if (staff == null)
                {
                    ESSChannelStaff customer = StaffService.QueryCustomerByWxopenid(openid);
                    if (customer == null)
                    {
                        HttpClient clients = new HttpClient();
                        var        tokens  = WxappService.ZXKH_IsExistAccess_Token();
                        //HttpClient client = new HttpClient();
                        string urls = string.Format("https://api.weixin.qq.com/cgi-bin/user/info?access_token={0}&openid={1}&lang=zh_CN", tokens, payload.gzhopenid);
                        HttpResponseMessage responses = client.GetAsync(urls).Result;
                        responses.EnsureSuccessStatusCode();

                        string  msgs  = responses.Content.ReadAsStringAsync().Result;
                        dynamic datas = JsonConvert.DeserializeObject <dynamic>(msgs);
                        // 以上openid获取用户信息

                        ChannelStaffVO vo = new ChannelStaffVO();
                        vo.ISNEW       = false;
                        vo.FCHANNELID  = 27;
                        vo.FMOBILE     = phoneNumber;
                        vo.FWXOPENID   = payload.gzhopenid;
                        vo.XCXOPENID   = openid;
                        vo.FENABLE     = '1';
                        vo.FTELE       = string.Empty;
                        vo.FCREATEDATE = System.DateTime.Now;
                        vo.FMODIFYDATE = System.DateTime.Now;
                        vo.FCREATORID  = 0;
                        vo.FMODIFIERID = 0;
                        vo.FQQ         = string.Empty;
                        vo.ISNEW       = false;
                        vo.KHNAME      = datas.nickname;


                        ChannelStaffLVO staffLVO = new ChannelStaffLVO
                        {
                            FNAME   = "微信注册用户",
                            FJOB    = "客户",
                            FREMARK = string.Empty,
                            FROLEID = 1001
                        };

                        vo.ChannelStaffLVOs = staffLVO;

                        StaffService.Save(vo);

                        if (StaffService.ZXKH_Staff_Customers(openid)) //判断该用户是否有客服关联,微信小程序消息发送进行人员的第一次分配
                        {
                            StaffService.ZXKH_AddShip(openid);         //添加人员关系
                        }


                        NHSessionProvider.GetCurrentSession().Flush();

                        customer = StaffService.QueryCustomerByWxopenid(openid);
                        ESSChannelStaffAvatar avatar = new ESSChannelStaffAvatar
                        {
                            //Picture = "Image/head.png",
                            Picture     = datas.headimgurl,
                            StaffId     = customer.FID,
                            UseWxAvatar = false
                        };

                        StaffService.SaveAvatar(avatar);
                    }
                    else
                    {
                        customer.FMOBILE = phoneNumber;
                    }
                    NHSessionProvider.GetCurrentSession().Flush();

                    staff = StaffService.QueryWxappUserByPhoneNumber(phoneNumber);
                }
                dynamic staffFwxOpenid = StaffService.QueryWxappUserByFwxOpenid(phoneNumber);
                if (staffFwxOpenid == null)
                {
                    StaffService.QueryWxappUserEditFwxOpenid(phoneNumber, payload.gzhopenid);
                }

                var token = JwtHelper.GenerateToken((int)staff["FID"], (string)staff["FJOB"], 2);

                var user = new
                {
                    userId          = (int)staff["FID"],
                    userName        = (string)staff["FNAME"],
                    wxopenid        = (string)staff["FWXOPENID"],
                    FJOB            = (string)staff["FJOB"],
                    channelName     = (string)staff["CHANNELNAME"],
                    channelCode     = (string)staff["FCHANNELCODE"],
                    channelId       = (int)staff["FCHANNELID"],
                    customerId      = (int)staff["FCUSTOMERID"],
                    channelTypeId   = (int)staff["FCHANNELTYPEID"],
                    channelTypeName = (string)staff["FCHANNELTYPENAME"],
                    avatarUrl       = (string)staff["PICTURE"],
                    nickName        = (string)staff["KHNAME"],
                    xcxopenid       = (string)staff["XCXOPENID"],
                    phoneNumber     = phoneNumber
                };

                return(new Response
                {
                    Result = new
                    {
                        token,
                        user
                    }
                });
            }
            else
            {
                throw new Exception((string)data.errmsg);
            }
        }
Esempio n. 3
0
        public Response Register(WxPayloadVO payload)
        {
            HttpClient client = new HttpClient();
            string     url    = "https://api.weixin.qq.com/sns/jscode2session?appid={0}&secret={1}&js_code={2}&grant_type=authorization_code";

            url = string.Format(url, AppId, Secret, payload.Code);

            HttpResponseMessage response = client.GetAsync(url).Result;

            response.EnsureSuccessStatusCode();

            string  msg  = response.Content.ReadAsStringAsync().Result;
            dynamic data = JsonConvert.DeserializeObject <dynamic>(msg);

            if (data.errmsg == null)
            {
                var openid = (string)data.openid;

                ESSChannelStaff customer = StaffService.QueryCustomerByWxopenid(openid);

                if (customer == null)
                {
                    ChannelStaffVO vo = new ChannelStaffVO();
                    vo.ISNEW       = false;
                    vo.FCHANNELID  = 27;
                    vo.FMOBILE     = "";
                    vo.FWXOPENID   = openid;
                    vo.FENABLE     = '1';
                    vo.FTELE       = string.Empty;
                    vo.FCREATEDATE = System.DateTime.Now;
                    vo.FMODIFYDATE = System.DateTime.Now;
                    vo.FCREATORID  = 0;
                    vo.FMODIFIERID = 0;
                    vo.FQQ         = string.Empty;
                    vo.KHNAME      = payload.NickName;

                    ChannelStaffLVO staffLVO = new ChannelStaffLVO
                    {
                        FNAME   = "微信注册用户",
                        FJOB    = "门店客户",
                        FREMARK = string.Empty,
                        FROLEID = 3027
                    };

                    vo.ChannelStaffLVOs = staffLVO;

                    StaffService.Save(vo);

                    NHSessionProvider.GetCurrentSession().Flush();

                    customer = StaffService.QueryCustomerByWxopenid(openid);
                    ESSChannelStaffAvatar avatar = new ESSChannelStaffAvatar
                    {
                        Picture     = payload.AvatarUrl,
                        StaffId     = customer.FID,
                        UseWxAvatar = true
                    };

                    StaffService.SaveAvatar(avatar);
                }
                else
                {
                    if (string.IsNullOrWhiteSpace(customer.KHNAME))
                    {
                        customer.KHNAME = payload.NickName;
                    }
                    var avatar = StaffService.QueryCustomerAvatar(customer.FID);
                    if (avatar == null)
                    {
                        avatar = new ESSChannelStaffAvatar
                        {
                            Picture     = payload.AvatarUrl,
                            StaffId     = customer.FID,
                            UseWxAvatar = true
                        };

                        StaffService.SaveAvatar(avatar);
                    }
                    else
                    {
                        if (string.IsNullOrWhiteSpace(avatar.Picture))
                        {
                            avatar.Picture     = payload.AvatarUrl;
                            avatar.UseWxAvatar = true;
                        }
                    }
                }

                NHSessionProvider.GetCurrentSession().Flush();

                return(new Response
                {
                    Result = 1
                });
            }
            else
            {
                throw new Exception((string)data.errmsg);
            }
        }
Esempio n. 4
0
 public Response BindWx(WxPayloadVO payload)
 {
     return(Service.BindWx(payload));
 }