void onError(int errorCode, string errorString)
            {
                var args = new PlayerIdentityLoginSubsystem.IdentityLoginCallbackArgs();

                args.error = new Error
                {
                    message = errorString,
                    type    = "WECHAT_APP_OAUTH_ERROR"
                };
                onLoginCompleted(args);
            }
Example #2
0
 private static void OnGetCode([MarshalAs(UnmanagedType.Struct)] CodeInfo codeInfo)
 {
     if (_callback == null)
     {
         Debug.LogError("callback not set for wechat login....");
         return;
     }
     if (string.IsNullOrEmpty(codeInfo.errMsg))
     {
         WeChatLoginUtils.LoginByCodeOrAccessToken(codeInfo.code, _appId, _redirectUrl, args => { _callback(args); });
     }
     else
     {
         var args = new PlayerIdentityLoginSubsystem.IdentityLoginCallbackArgs();
         args.error = new Error
         {
             message = codeInfo.errMsg,
             type    = "WECHAT_APP_OAUTH_ERROR"
         };
         _callback(args);
     }
 }
Example #3
0
        public static void LoginByCodeOrAccessToken(string code, string clientId, string redirectUrl, PlayerIdentityLoginSubsystem.Callback weChatLogin)
        {
            var args = new PlayerIdentityLoginSubsystem.IdentityLoginCallbackArgs();

            args.externalToken = new UnityEngine.PlayerIdentity.ExternalToken
            {
                idProvider = "wechat.com"
            };

            // use unity identity service
            if (string.IsNullOrEmpty(redirectUrl))
            {
                args.externalToken.authCode = code;
                weChatLogin(args);
            }
            else
            {
                var webRequest   = UnityWebRequest.Get($"{redirectUrl}?code={code}&&appid={clientId}");
                var asyncRequest = webRequest.SendWebRequest();
                asyncRequest.completed += operation =>
                {
                    if (webRequest.isNetworkError)
                    {
                        Debug.LogError("Error Get Access Token:" + webRequest.error);
                        args.error = new Error
                        {
                            message    = webRequest.error,
                            errorClass = ErrorClass.NetworkError,
                            type       = "WECHAT_CUSTOM_CALLBACK_ENDPOINT_SERVER",
                        };
                        weChatLogin(args);
                    }
                    else
                    {
                        Debug.Log("Get Access Token Response:\n" + webRequest.downloadHandler.text);
                        var response = JsonUtility.FromJson <WechatTokenResponse>(webRequest.downloadHandler.text);
                        if (!string.IsNullOrEmpty(response.errmsg))
                        {
                            args.error = new Error
                            {
                                message    = response.errmsg,
                                errorClass = ErrorClass.Unknown,
                                type       = "WECHAT_CUSTOM_CALLBACK_ENDPOINT_SERVER",
                            };
                        }
                        else
                        {
                            args.externalToken = new UnityEngine.PlayerIdentity.ExternalToken
                            {
                                accessToken = response.accessToken,
                                openid      = response.openid,
                                idProvider  = "wechat.com",
                                clientId    = clientId,
                                redirectUri = "http://localhost" //todo copy from sign with apple
                            };
                            weChatLogin(args);
                        }
                    }
                };
            }
        }
 void onLoginCompleted(PlayerIdentityLoginSubsystem.IdentityLoginCallbackArgs args)
 {
     callback(args);
 }