Пример #1
0
 void ShowUserLogin(WxUserDataDto user)
 {
     if (user != null)
     {
         //登录成功
         Dispatcher.Invoke(() =>
         {
             this.BtnLogin.Content = "登录成功";
             this.Title            = $"DEMO:{user.NickName}({user.UserName})";
         });
     }
     else
     {
         //登录失败
         Dispatcher.Invoke(() => this.BtnLogin.Content = "登录失败,请重试");
         this.BtnLogin.IsEnabled = true;
     }
 }
Пример #2
0
        unsafe void Init()
        {
            this._userStatus = WechatUserStatus.Initing;
            fixed(int *WxUser = &wxUser, PushStr = &pushStr)
            {
                string uuid = IpadDll.FakeUuId();
                var    mac  = IpadDll.FakeMac();

                //var ret = IpadDll.WXSetNetworkVerifyInfo("116.62.17.77", 9000);//ipadtest
                var ret = IpadDll.WXSetNetworkVerifyInfo(this.dllIP, this.dllPort);

                if (ret != 1)
                {
                    MsgDelegate.Show("授权失败:" + ret);
                    return;
                }
                var key = string.Format(@"<softtype><k3>9.0.2</k3><k9>iPad</k9><k10>2</k10><k19>58BF17B5-2D8E-4BFB-A97E-38F1226F13F8</k19><k20>{0}</k20><k21>neihe_5GHz</k21><k22>(null)</k22><k24>{1}</k24><k33>\345\276\256\344\277\241</k33><k47>1</k47><k50>1</k50><k51>com.tencent.xin</k51><k54>iPad4,4</k54></softtype>", uuid, mac);

                IpadDll.WXInitialize((int)WxUser, "鎴戠殑IPAD", key, uuid);
                IpadDll.WXSetRecvMsgCallBack(wxUser, outputDelegate);

                IpadDll.WXGetQRCode(wxUser, (int)PushStr);

                var         msg    = Marshal.PtrToStringAnsi(new IntPtr(Convert.ToInt32(pushStr)));
                WxQrCodeDto qrcode = Newtonsoft.Json.JsonConvert.DeserializeObject <WxQrCodeDto>(msg);//反序列化

                //var img = Base64StringToImage(qrcode.QrCode);
                MsgDelegate.QrLogin(qrcode.QrCode);

                WXReleaseEX(ref pushStr);
                WxQrResultDto qrCoderesult = null;

                while (true)
                {
                    if (!(this._userStatus == WechatUserStatus.Initing || this._userStatus == WechatUserStatus.Scaning))
                    {
                        break;
                    }
                    this._userStatus = WechatUserStatus.Scaning;
                    IpadDll.WXCheckQRCode(wxUser, (int)PushStr);
                    var datas = MarshalNativeToManaged((IntPtr)pushStr);
                    if (datas == null)
                    {
                        continue;
                    }
                    string sstr = datas.ToString();
                    qrCoderesult = Newtonsoft.Json.JsonConvert.DeserializeObject <WxQrResultDto>(sstr);
                    WXReleaseEX(ref pushStr);
                    bool breakok = false;
                    switch (qrCoderesult.Status)
                    {
                    case 0: MsgDelegate.Show("请扫描二维码"); break;

                    case 1: MsgDelegate.Show("请点在手机上点确认"); break;

                    case 2: MsgDelegate.Show("正在登录中.."); breakok = true; break;

                    case 3: MsgDelegate.Show("已过期"); break;

                    case 4: MsgDelegate.Show("取消操作了"); breakok = true; break;
                    }
                    if (breakok)
                    {
                        break;
                    }
                }

                if (qrCoderesult.Status == 2)
                {
                    var username = qrCoderesult.UserName;
                    this.user.wxid = qrCoderesult.UserName;
                    this.user.name = qrCoderesult.NickName;
                    var pass = qrCoderesult.Password;
                    IpadDll.WXQRCodeLogin(wxUser, username, pass, (int)PushStr);
                    var    datas = MarshalNativeToManaged((IntPtr)pushStr);
                    string sstr  = datas.ToString();
                    WXReleaseEX(ref pushStr);
                    WxUserDataDto userdata = Newtonsoft.Json.JsonConvert.DeserializeObject <WxUserDataDto>(sstr);//反序列化
                    if (userdata.Status == -301)
                    {
                        Thread.Sleep(1000);
                        IpadDll.WXQRCodeLogin(wxUser, username, pass, (int)PushStr);
                        datas = MarshalNativeToManaged((IntPtr)pushStr);
                        sstr  = datas.ToString();
                        WXReleaseEX(ref pushStr);
                        MsgDelegate.Show("微信重定向");
                        userdata = Newtonsoft.Json.JsonConvert.DeserializeObject <WxUserDataDto>(sstr);//反序列化

                        if (userdata.Status == 0)
                        {
                            this._userStatus = WechatUserStatus.Logined;
                            MsgDelegate.Show("登录成功");
                            IpadDll.WXHeartBeat(wxUser, (int)PushStr);
                            datas = MarshalNativeToManaged((IntPtr)pushStr);
                            sstr  = datas.ToString();
                            WXReleaseEX(ref pushStr);

                            MsgDelegate.UserLogin(userdata);
                            Task.Run(new Action(this.SyncList));
                            return;
                        }
                        else
                        {
                            this._userStatus = WechatUserStatus.Failed;
                            MsgDelegate.UserLogin(null);
                            MsgDelegate.Show("登录失败");
                        }
                    }

                    if (userdata.Status == 0)
                    {
                        this._userStatus = WechatUserStatus.Logined;
                        MsgDelegate.Show("登录成功");
                        IpadDll.WXHeartBeat(wxUser, (int)PushStr);
                        datas = MarshalNativeToManaged((IntPtr)pushStr);
                        sstr  = datas.ToString();
                        WXReleaseEX(ref pushStr);

                        MsgDelegate.UserLogin(userdata);
                        Task.Run(new Action(this.SyncList));
                        return;
                    }
                    else
                    {
                        this._userStatus = WechatUserStatus.Failed;
                        MsgDelegate.UserLogin(null);
                        MsgDelegate.Show("登录失败");
                    }
                }
                else
                {
                    this._userStatus = WechatUserStatus.Failed;
                    MsgDelegate.UserLogin(null);
                    MsgDelegate.Show("登录失败");
                }
            }
        }