コード例 #1
0
ファイル: SpriteManager.cs プロジェクト: ZeLye/uEmuera
    public static void GetSprite(CroppedImage src,
                                 object obj, Action <object, SpriteInfo> callback)
    {
        var         basename = src.BaseImage.Name;
        TextureInfo ti       = null;

        texture_dict.TryGetValue(basename, out ti);
        if (ti == null)
        {
            var item = new CallbackInfo(src, obj, callback);
            List <CallbackInfo> list = null;
            if (loading_set.TryGetValue(basename, out list))
            {
                list.Add(item);
            }
            else
            {
                list = new List <CallbackInfo> {
                    item
                };
                loading_set.Add(basename, list);
                GenericUtils.StartCoroutine(Loading(src.BaseImage));
            }
        }
        else
        {
            callback(obj, GetSpriteInfo(ti, src));
        }
    }
コード例 #2
0
 async void IDataBaseContextEventCallback.OnDataBasesReset(CallbackInfo callbackInfo, string[] dataBaseNames, DataBaseMetaData[] metaDatas)
 {
     try
     {
         await this.callbackEvent.InvokeAsync(callbackInfo.Index, () =>
         {
             this.Dispatcher.Invoke(() =>
             {
                 var authentication = this.UserContext.Authenticate(callbackInfo.SignatureDate);
                 var dataBases      = new DataBase[dataBaseNames.Length];
                 for (var i = 0; i < dataBaseNames.Length; i++)
                 {
                     var dataBaseName = dataBaseNames[i];
                     var metaData     = metaDatas[i];
                     var dataBase     = this[dataBaseName];
                     dataBases[i]     = dataBase;
                     dataBase.SetReset(authentication, metaData);
                 }
                 //this.InvokeItemsResetEvent(authentication, dataBases, metaData);
             });
         });
     }
     catch (Exception e)
     {
         this.CremaHost.Error(e);
     }
 }
コード例 #3
0
        public void Schedule(System.Action <ISPAnim> callback)
        {
            //if (!_state.IsPlaying) throw new System.InvalidOperationException("Can only schedule a callback on a playing animation.");
            if (callback == null)
            {
                throw new System.ArgumentNullException("callback");
            }

            if (_endOfLineCallback == null)
            {
                _endOfLineCallback = new CallbackInfo()
                {
                    timeout = float.PositiveInfinity
                }
            }
            ;
            _endOfLineCallback.callback += callback;

            if (_waitRoutine == null)
            {
                _waitRoutine = new RadicalCoroutine(this.DoUpdate());                       //RadicalCoroutine.UpdateTicker(this.Update);
            }
            if (!_waitRoutine.Active)
            {
                _waitRoutine.Start(_state.Controller);
            }
        }
コード例 #4
0
 async void IDataBaseContextEventCallback.OnDataBasesCreated(CallbackInfo callbackInfo, string[] dataBaseNames, DataBaseInfo[] dataBaseInfos, string comment)
 {
     try
     {
         await this.callbackEvent.InvokeAsync(callbackInfo.Index, () =>
         {
             this.Dispatcher.Invoke(() =>
             {
                 var subscribeToken = this.subscribeToken;
                 var authentication = this.UserContext.Authenticate(callbackInfo.SignatureDate);
                 var dataBases      = new DataBase[dataBaseNames.Length];
                 for (var i = 0; i < dataBaseNames.Length; i++)
                 {
                     var dataBaseName = dataBaseNames[i];
                     var dataBaseInfo = dataBaseInfos[i];
                     var dataBase     = new DataBase(this, subscribeToken, dataBaseInfo);
                     this.AddBase(dataBase.Name, dataBase);
                     dataBases[i] = dataBase;
                 }
                 this.InvokeItemsCreateEvent(authentication, dataBases, comment);
             });
         });
     }
     catch (Exception e)
     {
         this.CremaHost.Error(e);
     }
 }
        private bool ProcessTimer(Guid workflowInstanceId)
        {
            bool         retval  = false;
            CallbackInfo cs      = null;
            Guid         timerId = Guid.Empty;

            lock (locker)
            {
                Guid expTimerId;
                if (HasExpiredTimer(workflowInstanceId, out expTimerId))
                {
                    cs = pendingScheduleRequests.Remove(expTimerId);
                }
            }
            try
            {
                if (cs != null)
                {
                    WorkflowTrace.Host.TraceEvent(TraceEventType.Information, 0, "ManualWorkflowSchedulerService: Processing timer {0}", timerId);
                    cs.Callback(cs.InstanceId);
                    retval = true;
                }
            }
            catch (Exception e)
            {
                RaiseServicesExceptionNotHandledEvent(e, workflowInstanceId);
            }
            return(retval);
        }
コード例 #6
0
        /// <summary>
        /// Called when item is updated
        /// </summary>
        /// <param name="key">key of the item being updated</param>
        /// <param name="callbackEntry">callback entry that contains the updated value</param>
        private void CustomUpdate(object key, object callbackInfo, EventContext eventContext)
        {
            if (_client != null)
            {
                CallbackInfo cbInfo = callbackInfo as CallbackInfo;
                if (cbInfo != null && cbInfo.Client == _client.ClientID)
                {
                    //client older then 4.1 sp2 private patch 4 does not support bulk Events
                    if (_client.ClientVersion >= 4124)
                    {
                        Alachisoft.NCache.Common.Protobuf.BulkEventItemResponse eventitem = new Common.Protobuf.BulkEventItemResponse();
                        eventitem.eventType           = Common.Protobuf.BulkEventItemResponse.EventType.ITEM_UPDATED_CALLBACK;
                        eventitem.ItemUpdatedCallback = EventHelper.GetItemUpdatedCallbackResponse(eventContext, (string)key, (short)cbInfo.Callback, cbInfo.DataFilter);

                        //To avoid NullReference problem if both evnt and NCache.Dispose are called simultaenously
                        ClientManager client = _client;
                        if (client != null)
                        {
                            client.ConnectionManager.EnqueueEvent(eventitem, _client.SlaveId);
                        }
                        //_client.EnqueueEvent(eventitem);
                    }
                    else
                    {
                        lock (ConnectionManager.CallbackQueue)
                        {
                            ConnectionManager.CallbackQueue.Enqueue(new ItemUpdateCallback((short)cbInfo.Callback, (string)key, cbInfo.Client, eventContext, cbInfo.DataFilter));
                            Monitor.Pulse(ConnectionManager.CallbackQueue);
                        }
                    }
                }
            }
        }
コード例 #7
0
 protected override void OnStarted()
 {
     lock (this.timerQueue)
     {
         base.OnStarted();
         CallbackInfo info = this.timerQueue.Peek();
         if (info != null)
         {
             this.callbackTimer = this.CreateTimerCallback(info);
         }
         this.running = true;
     }
     lock (this.waitingQueue)
     {
         int num = Math.Min(this.maxSimultaneousWorkflows, this.waitingQueue.Count);
         for (int i = 0; i < num; i++)
         {
             if (ThreadPool.QueueUserWorkItem(new WaitCallback(this.QueueWorkerProcess)))
             {
                 this.numCurrentWorkers++;
             }
         }
     }
     if ((this.queueCounters == null) && (base.Runtime.PerformanceCounterManager != null))
     {
         this.queueCounters = base.Runtime.PerformanceCounterManager.CreateCounters(ExecutionStringManager.PerformanceCounterWorkflowsWaitingName);
     }
 }
コード例 #8
0
        public virtual void OnCustomRemoveCallback(string key, object value, CacheItemRemovedReason reason,
                                                   BitSet flag, bool notifyAsync, EventCacheItem item)
        {
            try
            {
                object[] args = value as object[];
                if (args != null)
                {
                    object val = args[0];


                    CallbackInfo cbInfo = args[1] as CallbackInfo;
                    if (cbInfo != null)
                    {
                        if (_parent._perfStatsCollector != null)
                        {
                            _parent._perfStatsCollector.IncrementEventsProcessedPerSec();
                        }

                        if (item != null)
                        {
                            item.Value = GetObject(item.Value, flag);
                        }
                        EventHandle handle = new EventHandle((short)cbInfo.Callback);
                        _parent.EventManager.RaiseSelectiveCacheNotification(key, EventType.ItemRemoved, item, null,
                                                                             reason, notifyAsync, handle, cbInfo.DataFilter);
                    }
                }
            }
            catch
            {
            }
        }
コード例 #9
0
 public override void HandleSuccess(CallbackInfo <WebObjects.Facebook.BindOauthResponse> info)
 {
     if (Debug.isDebugBuild)
     {
         Debug.Log("binding succeeded");
     }
 }
コード例 #10
0
ファイル: DomainContext.cs プロジェクト: s2quake/JSSoft.Crema
        async void IDomainContextEventCallback.OnDomainsDeleted(CallbackInfo callbackInfo, Guid[] domainIDs, bool[] isCanceleds, object[] results)
        {
            try
            {
                await this.callbackEvent.InvokeAsync(callbackInfo.Index, () =>
                {
                    this.Dispatcher.Invoke(() =>
                    {
                        var authentication         = this.UserContext.Authenticate(callbackInfo.SignatureDate);
                        var domainHostList         = new List <IDomainHost>(domainIDs.Length);
                        var domainHostCanceledList = new List <bool>(domainIDs.Length);
                        var domainHostResultList   = new List <object>(domainIDs.Length);

                        var domainList         = new List <Domain>(domainIDs.Length);
                        var domainCanceledList = new List <bool>(domainIDs.Length);
                        var domainResultList   = new List <object>(domainIDs.Length);

                        for (var i = 0; i < domainIDs.Length; i++)
                        {
                            var domainID   = domainIDs[i];
                            var isCanceled = isCanceleds[i];
                            var result     = results[i];
                            var domain     = this.GetDomain(domainID);
                            domain.InvokeDeleteAsync(authentication, isCanceled, result);
                        }
                    });
                });
            }
            catch (Exception e)
            {
                this.CremaHost.Error(e);
            }
        }
コード例 #11
0
        public void UnRegisterKeyNotification(string clientId, string key, CallbackInfo updateCallback, CallbackInfo removeCallback)
        {
            if (clientId == null)
            {
                return;
            }

            lock (this)
            {
                if (!_clients.ContainsKey(clientId))
                {
                    return;
                }

                if (_clients[clientId].RemoveKey(key))
                {
                    if (_registeredKeys.ContainsKey(key))
                    {
                        if (_registeredKeys[key].DecrementRefCount() <= 0)
                        {
                            _registeredKeys.Remove(key);

                            if (_updatedKeys.ContainsKey(key))
                            {
                                _updatedKeys.Remove(key);
                            }
                            if (_removedKeys.ContainsKey(key))
                            {
                                _removedKeys.Remove(key);
                            }
                        }
                    }
                }
            }
        }
コード例 #12
0
ファイル: Inventory.cs プロジェクト: joaokucera/sdk-unity
            public override void HandleSuccess(CallbackInfo <WebObjects.Items.EquipResponse> info)
            {
                DomainObjects.InventoryItem item = inventory.dataStore.inventory.Get(id);
                item.equipped = true;

                RoarManager.OnGoodEquipped(new RoarManager.GoodInfo(id, item.ikey, item.label));
            }
コード例 #13
0
        public static bool CheckCallbackInfo(CallbackInfo info)
        {
            var keys = info.Data.Keys;
            var dict = new Dictionary <string, string>();

            foreach (var key in keys)
            {
                if (key.Equals("sign"))
                {
                    continue;
                }
                dict[key] = info.Data[key];
            }

            //string[] keys = new string[] { "appid", "bank_type", "cash_fee", "fee_type", "is_subscribe", "mch_id", "nonce_str", "openid", "out_trade_no", "result_code", "return_code", "time_end", "total_fee", "trade_type", "transaction_id" };
            //foreach (var key in keys)
            //{
            //    dict[key] = info.Data[key];
            //}

            var config = Config.XCX;

            string sign = GetSignString(dict, config.mch_secret);

            if (sign.Equals(info.Data["sign"], StringComparison.OrdinalIgnoreCase))
            {
                return(true);
            }

            return(false);
        }
コード例 #14
0
 async void IDataBaseContextEventCallback.OnDataBasesAuthenticationLeft(CallbackInfo callbackInfo, string[] dataBaseNames, AuthenticationInfo authenticationInfo)
 {
     try
     {
         await this.callbackEvent.InvokeAsync(callbackInfo.Index, () =>
         {
             this.Dispatcher.Invoke(() =>
             {
                 var authentication = this.UserContext.Authenticate(callbackInfo.SignatureDate);
                 var dataBases      = new DataBase[dataBaseNames.Length];
                 for (var i = 0; i < dataBaseNames.Length; i++)
                 {
                     var dataBaseName = dataBaseNames[i];
                     var dataBase     = this[dataBaseName];
                     dataBases[i]     = dataBase;
                     dataBase.SetAuthenticationLeft(authentication);
                 }
             });
         });
     }
     catch (Exception e)
     {
         this.CremaHost.Error(e);
     }
 }
コード例 #15
0
    private void Update()
    {
        for (int i = 0; i < mCallbackList.Count; i++)
        {
            float runTime = mCallbackList[i].ignoretimescale ? Time.realtimeSinceStartup : Time.time;
            if (mCallbackList[i].call == null)
            {
                mCallbackList.RemoveAt(i);
                i--;
            }
            else if (runTime >= mCallbackList[i].endTime)
            {
                CallbackInfo info = mCallbackList[i];
                if (mCallbackList[i].times > 1)
                {
                    info.endTime += info.dely;
                    info.times--;
                    mCallbackList[i] = info;
                }
                else
                {
                    mCallbackList.RemoveAt(i);
                    i--;
                }
                info.call();
            }
        }

        for (int i = 0; i < m_CallBackUpdateList.Count; ++i)
        {
            m_CallBackUpdateList[i]();
        }
    }
コード例 #16
0
        public bool DoCallback(NameValueCollection query, NameValueCollection form, string bodydata, Action <CallbackInfo> action)
        {
            var parameters = new Dictionary <string, string>();

            parameters["status"]  = query["status"];
            parameters["account"] = query["account"];
            parameters["order"]   = query["order"];
            parameters["orders"]  = query["orders"];
            parameters["paytype"] = query["paytype"];
            parameters["money"]   = query["money"];
            parameters["body"]    = query["body"];
            parameters["ext"]     = query["ext"];
            parameters["sign"]    = query["sign"];

            var callback = new CallbackInfo();

            callback.Status = ResultStatus.Fail;

            if (!string.IsNullOrEmpty(parameters["order"]) && parameters["status"] == "1" && parameters["account"] == this.appid)
            {
                callback.Status     = ResultStatus.Succ;
                callback.OrderNo    = parameters["order"];
                callback.AttachData = Base64Helper.Base64Decode(parameters["ext"]);
            }

            action(callback);

            if (callback.Status == ResultStatus.Succ)
            {
                return(true);
            }

            return(false);
        }
コード例 #17
0
            public override void HandleSuccess(CallbackInfo <WebObjects.User.NetdriveFetchResponse> info)
            {
                //TODO: Move this into the ParseXML function in NetdriveFetchResponse

                /*
                 * string value = "";
                 * string str = null;
                 *
                 * IXMLNode nd = info.data.GetNode("roar>0>user>0>netdrive_get>0>netdrive_field>0>data>0");
                 * if(nd!=null)
                 * {
                 * str = nd.Text;
                 * }
                 * if (str!=null) value = str;
                 *
                 * data.Data_[key] = value;
                 * info.msg = value;
                 *
                 * if ( value==null || value == "")
                 * {
                 * data.logger_.DebugLog("[roar] -- No data for key: "+key);
                 * info.code = IWebAPI.UNKNOWN_ERR;
                 * info.msg = "No data for key: "+key;
                 * cbx( new CallbackInfo<string>( null, IWebAPI.UNKNOWN_ERR, "no data for key: "+key ) );
                 * }
                 */

                data.Data_[key] = info.data;


                cbx(new CallbackInfo <string>(info.data.data, IWebAPI.OK, null));
                RoarManager.OnDataLoaded(key, info.data.data);
            }
コード例 #18
0
        public virtual void OnCustomUpdateCallback(string key, object value, bool notifyAsync, EventCacheItem item,
                                                   EventCacheItem oldItem, BitSet flag)
        {
            try
            {
                CallbackInfo cbInfo = value as CallbackInfo;
                if (cbInfo != null)
                {
                    if (item != null)
                    {
                        item.Value = GetObject(item.Value, flag);
                    }
                    if (oldItem != null)
                    {
                        oldItem.Value = GetObject(oldItem.Value, flag);
                    }

                    if (_parent._perfStatsCollector != null)
                    {
                        _parent._perfStatsCollector.IncrementEventsProcessedPerSec();
                    }

                    EventHandle handle = new EventHandle((short)cbInfo.Callback);
                    this._eventManager.RaiseSelectiveCacheNotification(key, EventType.ItemUpdated, item, oldItem,
                                                                       CacheItemRemovedReason.Underused, notifyAsync, handle, cbInfo.DataFilter);
                }
            }
            catch
            {
            }
        }
コード例 #19
0
 async void IDataBaseContextEventCallback.OnDataBasesInfoChanged(CallbackInfo callbackInfo, DataBaseInfo[] dataBaseInfos)
 {
     try
     {
         await this.callbackEvent.InvokeAsync(callbackInfo.Index, () =>
         {
             this.Dispatcher.Invoke(() =>
             {
                 var authentication = this.UserContext.Authenticate(callbackInfo.SignatureDate);
                 var dataBases      = new DataBase[dataBaseInfos.Length];
                 for (var i = 0; i < dataBaseInfos.Length; i++)
                 {
                     var dataBaseInfo = dataBaseInfos[i];
                     var dataBase     = this[dataBaseInfo.Name];
                     dataBase.SetDataBaseInfo(dataBaseInfo);
                     dataBases[i] = dataBase;
                 }
                 this.InvokeItemsInfoChangedEvent(authentication, dataBases);
             });
         });
     }
     catch (Exception e)
     {
         this.CremaHost.Error(e);
     }
 }
        public void RegisterFeatureFlagChangedCallback(string flagName, LdValue valueDefault, Action <LdValue> callback, bool checkAsap)
        {
            if (!IsInitialized)
            {
                Debug.LogWarning("LauchDarklyClientBehavior.RegisterBoolFlagCallback called before initialized.");
            }

            List <CallbackInfo> callbackInfoList = null;

            if (flagCallbacks.ContainsKey(flagName))
            {
                callbackInfoList = flagCallbacks[flagName];
            }
            else
            {
                callbackInfoList        = new List <CallbackInfo>();
                flagCallbacks[flagName] = callbackInfoList;
            }

            CallbackInfo callbackInfo = new CallbackInfo(valueDefault, callback, checkAsap);

            if (callbackInfoList.Contains(callbackInfo))
            {
                Debug.LogError("LaunchDarklyClientBehavior.RegisterFlagChangedCallback - duplicate callback attempted registration; process ABORTED.");
                return;
            }

            callbackInfoList.Add(callbackInfo);

            if (IsInitialized && checkAsap)
            {
                ExecuteVariationCheck(flagName, callback, ref valueDefault);
            }
        }
コード例 #21
0
ファイル: Element.cs プロジェクト: sycomix/Win10Bot
        internal void SignalEvent(
            HardwareComponentEventHandler callback, ElementComponent componenet)
        {
            // enqueue the info about the callback for later use
            CallbackInfo ci = new CallbackInfo();

            ci.callback  = callback;
            ci.component = componenet;
            lock (callbacks)
            {
                if (!callbacks.Contains(ci))
                {
                    callbacks.Enqueue(ci);
                }
            }

            // if asyncCallbacks are enabled, then go ahead and run them
            // on this thread - otherwise they wait for a explicit call to
            // PumpEvents() by the user (or the run loop)
            if (asyncCallbacks)
            {
                PumpEvents();
            }
            else
            {
                // this signals the Run() loop that there are
                // events to be run
                eventsReady.Set();
            }
        }
コード例 #22
0
 async void IDataBaseContextEventCallback.OnDataBasesDeleted(CallbackInfo callbackInfo, string[] dataBaseNames)
 {
     try
     {
         await this.callbackEvent.InvokeAsync(callbackInfo.Index, () =>
         {
             this.Dispatcher.Invoke(() =>
             {
                 var authentication = this.UserContext.Authenticate(callbackInfo.SignatureDate);
                 var dataBases      = new DataBase[dataBaseNames.Length];
                 for (var i = 0; i < dataBaseNames.Length; i++)
                 {
                     var dataBaseName = dataBaseNames[i];
                     var dataBase     = this[dataBaseName];
                     this.RemoveBase(dataBaseName);
                     dataBases[i] = dataBase;
                 }
                 this.InvokeItemsDeletedEvent(authentication, dataBases, dataBaseNames);
             });
         });
     }
     catch (Exception e)
     {
         this.CremaHost.Error(e);
     }
 }
        private void OnTimerCallback(object ignored)
        {
            CallbackInfo ci = null;

            try
            {
                lock (locker)
                {
                    if (State.Equals(WorkflowRuntimeServiceState.Started))
                    {
                        ci = pendingScheduleRequests.Peek();
                        if (ci != null)
                        {
                            if (ci.IsExpired)
                            {
                                WorkflowTrace.Host.TraceEvent(TraceEventType.Information, 0, "Timeout occured for timer for instance {0}", ci.InstanceId);
                                threadRunning = true;
                                pendingScheduleRequests.Dequeue();
                            }
                            else
                            {
                                callbackTimer = CreateTimerCallback(ci);
                            }
                        }
                    }
                }
                if (threadRunning)
                {
                    ci.Callback(ci.InstanceId);  // delivers the timer message
                    RunWorkflow(ci.InstanceId);
                }
            }
            catch (ThreadAbortException e)
            {
                WorkflowTrace.Host.TraceEvent(TraceEventType.Error, 0, "Timeout for instance, {0} threw exception {1}", ci == null ? Guid.Empty : ci.InstanceId, e.Message);
                RaiseServicesExceptionNotHandledEvent(e, ci.InstanceId);
                throw;
            }
            catch (Exception e)
            {
                WorkflowTrace.Host.TraceEvent(TraceEventType.Error, 0, "Timeout for instance, {0} threw exception {1}", ci == null ? Guid.Empty : ci.InstanceId, e.Message);
                RaiseServicesExceptionNotHandledEvent(e, ci.InstanceId);
            }
            finally
            {
                lock (locker)
                {
                    if (threadRunning)
                    {
                        threadRunning = false;
                        ci            = pendingScheduleRequests.Peek();
                        if (ci != null)
                        {
                            callbackTimer = CreateTimerCallback(ci);
                        }
                    }
                }
            }
        }
        private void OnTimerCallback(object ignored)
        {
            CallbackInfo info = null;

            try
            {
                lock (this.locker)
                {
                    if (base.State.Equals(WorkflowRuntimeServiceState.Started))
                    {
                        info = this.pendingScheduleRequests.Peek();
                        if (info != null)
                        {
                            if (info.IsExpired)
                            {
                                WorkflowTrace.Host.TraceEvent(TraceEventType.Information, 0, "Timeout occured for timer for instance {0}", new object[] { info.InstanceId });
                                this.threadRunning = true;
                                this.pendingScheduleRequests.Dequeue();
                            }
                            else
                            {
                                this.callbackTimer = this.CreateTimerCallback(info);
                            }
                        }
                    }
                }
                if (this.threadRunning)
                {
                    info.Callback(info.InstanceId);
                    this.RunWorkflow(info.InstanceId);
                }
            }
            catch (ThreadAbortException exception)
            {
                WorkflowTrace.Host.TraceEvent(TraceEventType.Error, 0, "Timeout for instance, {0} threw exception {1}", new object[] { (info == null) ? Guid.Empty : info.InstanceId, exception.Message });
                base.RaiseServicesExceptionNotHandledEvent(exception, info.InstanceId);
                throw;
            }
            catch (Exception exception2)
            {
                WorkflowTrace.Host.TraceEvent(TraceEventType.Error, 0, "Timeout for instance, {0} threw exception {1}", new object[] { (info == null) ? Guid.Empty : info.InstanceId, exception2.Message });
                base.RaiseServicesExceptionNotHandledEvent(exception2, info.InstanceId);
            }
            finally
            {
                lock (this.locker)
                {
                    if (this.threadRunning)
                    {
                        this.threadRunning = false;
                        info = this.pendingScheduleRequests.Peek();
                        if (info != null)
                        {
                            this.callbackTimer = this.CreateTimerCallback(info);
                        }
                    }
                }
            }
        }
コード例 #25
0
        public override CallbackInfo ProcessCallback(Order order, HttpRequest request, IDictionary <string, string> settings)
        {
            CallbackInfo callbackInfo = null;

            try
            {
                order.MustNotBeNull("order");
                request.MustNotBeNull("request");
                settings.MustNotBeNull("settings");
                settings.MustContainKey("secretKey", "settings");

                //Write data when testing
                if (settings.ContainsKey("testMode") && settings["testMode"] == "1")
                {
                    LogRequest <Paynova>(request, logPostData: true);
                }

                PostbackDigest postbackDigest = new PostbackDigest(settings["secretKey"]);
                if (order.CartNumber == request.Form["ORDER_NUMBER"] && postbackDigest.Validate(request.Form))
                {
                    decimal amountAuthorized  = decimal.Parse(request.Form["PAYMENT_1_AMOUNT"], CultureInfo.InvariantCulture);
                    string  transaction       = request.Form["PAYMENT_1_TRANSACTION_ID"];
                    string  paymentType       = request.Form["PAYMENT_1_PAYMENT_METHOD_NAME"];
                    string  paymentIdentifier = request.Form["PAYMENT_1_CARD_LAST_FOUR"];

                    PaymentState?paymentState = null;
                    switch (request.Form["PAYMENT_1_STATUS"])
                    {
                    case "Pending":
                        paymentState = PaymentState.PendingExternalSystem;
                        break;

                    case "Completed":
                    case "PartiallyCompleted":
                        paymentState = PaymentState.Captured;
                        break;

                    case "Authorized":
                        paymentState = PaymentState.Authorized;
                        break;
                    }

                    if (paymentState != null)
                    {
                        callbackInfo = new CallbackInfo(amountAuthorized, transaction, paymentState.Value, paymentType, paymentIdentifier);
                    }
                }
                else
                {
                    LoggingService.Instance.Warn <Paynova>("Paynova(" + order.CartNumber + ") - digest check failed");
                }
            }
            catch (Exception exp)
            {
                LoggingService.Instance.Error <Paynova>("Paynova(" + order.CartNumber + ") - Process callback", exp);
            }

            return(callbackInfo);
        }
コード例 #26
0
 protected void OnBuyComplete(CallbackInfo <Roar.WebObjects.Shop.BuyResponse> response)
 {
     isBuying = false;
     if (response.code != WebAPI.OK)
     {
         FlashError(response.msg);
     }
 }
コード例 #27
0
 public override void HandleSuccess(CallbackInfo <WebObjects.Shop.BuyResponse> info)
 {
     RoarManager.OnGoodBought(
         new RoarManager.PurchaseInfo(
             ikey,
             info.data.buy_response
             ));
 }
コード例 #28
0
        public override CallbackInfo ProcessCallback(Order order, HttpRequest request, IDictionary <string, string> settings)
        {
            CallbackInfo callbackInfo = null;

            try
            {
                order.MustNotBeNull("order");
                request.MustNotBeNull("request");
                settings.MustNotBeNull("settings");
                settings.MustContainKey("md5Key1", "settings");
                settings.MustContainKey("md5Key2", "settings");

                //Write data when testing
                if (settings.ContainsKey("test_mode") && settings["test_mode"] == "true")
                {
                    LogRequest <Payer>(request, logGetData: true);
                }

                //Check for payer IP addresses
                string remoteServerIpAddress = request.ServerVariables["REMOTE_ADDR"];

                if (remoteServerIpAddress == "217.151.207.84" || remoteServerIpAddress == "79.136.103.5" || remoteServerIpAddress == "79.136.103.9" || remoteServerIpAddress == "94.140.57.180" || remoteServerIpAddress == "94.140.57.181" || remoteServerIpAddress == "94.140.57.184" || remoteServerIpAddress == "192.168.100.1")
                {
                    string url             = request.Url.Scheme + "://" + request.Url.Host + request.ServerVariables["REQUEST_URI"];
                    string urlExceptMd5Sum = url.Substring(0, url.IndexOf("&md5sum", StringComparison.Ordinal));

                    string md5CheckValue = GenerateMD5Hash(settings["md5Key1"] + urlExceptMd5Sum + settings["md5Key2"]).ToUpperInvariant();

                    if (md5CheckValue == request.QueryString["md5sum"])
                    {
                        HttpContext.Current.Response.Output.Write("TRUE");

                        string       transaction  = request.QueryString["payread_payment_id"];
                        string       paymentType  = request.QueryString["payer_payment_type"];
                        string       callbackType = request.QueryString["payer_callback_type"];
                        PaymentState paymentState = callbackType == "auth" ? PaymentState.Authorized : PaymentState.Captured;

                        callbackInfo = new CallbackInfo(order.TotalPrice.Value.WithVat, transaction, paymentState, paymentType);
                    }
                    else
                    {
                        LoggingService.Instance.Warn <Payer>("Payer(" + order.CartNumber + ") - MD5Sum security check failed");
                    }
                }
                else
                {
                    LoggingService.Instance.Warn <Payer>("Payer(" + order.CartNumber + ") - IP security check failed - IP: " + remoteServerIpAddress);
                }

                HttpContext.Current.Response.Output.Write("FALSE");
            }
            catch (Exception exp)
            {
                LoggingService.Instance.Error <Payer>("QuickPay(" + order.CartNumber + ") - Process callback", exp);
            }

            return(callbackInfo);
        }
コード例 #29
0
ファイル: PayClient.cs プロジェクト: me15000/PayFactory
        public bool DoCallback(NameValueCollection query, NameValueCollection form, string bodydata, Action <CallbackInfo> action)
        {
            NameValueCollection Request = new NameValueCollection();

            foreach (var key in query.AllKeys)
            {
                Request[key] = query[key];
            }

            foreach (var key in form.AllKeys)
            {
                Request[key] = form[key];
            }


            string order_id    = Request["order_id"];
            string pay_state   = Request["pay_state"] ?? string.Empty;
            string agent_order = Request["agent_order"];
            string pay_fee     = Request["pay_fee"];
            string time        = Request["time"];
            string remark      = Request["remark"];
            string additional  = Request["additional"];
            string attach      = Request["attach"];
            string sign        = Request["sign"] ?? string.Empty;

            Hashtable ht = new Hashtable();

            ht.Add("order_id", order_id);
            ht.Add("pay_state", pay_state);
            ht.Add("agent_order", agent_order);
            ht.Add("pay_fee", pay_fee);
            ht.Add("time", time);
            ht.Add("remark", remark);
            ht.Add("additional", additional);
            ht.Add("attach", attach);
            ht.Add("key", this.secret_key);
            string md5sign = CreateSign(ht);

            var callback = new CallbackInfo();

            callback.Status = ResultStatus.Fail;

            if (!string.IsNullOrEmpty(agent_order) && pay_state == "10000" && md5sign == sign.ToUpper())
            {
                callback.Status     = ResultStatus.Succ;
                callback.OrderNo    = agent_order;
                callback.AttachData = Base64Helper.Base64Decode(attach);
            }

            action(callback);

            if (callback.Status == ResultStatus.Succ)
            {
                return(true);
            }

            return(false);
        }
コード例 #30
0
        internal bool addCallback <M>(SubscriptionCallbackHelper <M> helper, string md5sum, CallbackQueueInterface queue,
                                      uint queue_size, bool allow_concurrent_callbacks, string topiclol) where M : IRosMessage, new()
        {
            lock (md5sum_mutex)
            {
                if (this.md5sum == "*" && md5sum != "*")
                {
                    this.md5sum = md5sum;
                }
            }

            if (md5sum != "*" && md5sum != this.md5sum)
            {
                return(false);
            }

            lock (callbacks_mutex)
            {
                CallbackInfo <M> info = new CallbackInfo <M> {
                    helper = helper, callback = queue, subscription_queue = new Callback <M>(helper.callback().func, topiclol, queue_size, allow_concurrent_callbacks)
                };
                //if (!helper.isConst())
                //{
                ++nonconst_callbacks;
                //}

                callbacks.Add(info);

                if (latched_messages.Count > 0)
                {
                    lock (publisher_links_mutex)
                    {
                        foreach (PublisherLink link in publisher_links)
                        {
                            if (link.Latched)
                            {
                                if (latched_messages.ContainsKey(link))
                                {
                                    LatchInfo            latch_info = latched_messages[link];
                                    IMessageDeserializer des        = new IMessageDeserializer(helper, latch_info.message,
                                                                                               latch_info.connection_header);
                                    bool was_full = false;
                                    ((Callback <M>)info.subscription_queue).push((SubscriptionCallbackHelper <M>)info.helper, (MessageDeserializer <M>)des, true,
                                                                                 ref was_full,
                                                                                 latch_info.receipt_time);
                                    ((Callback <M>)info.subscription_queue).topic = topiclol;
                                    if (!was_full)
                                    {
                                        info.callback.addCallback(info.subscription_queue, info.Get());
                                    }
                                }
                            }
                        }
                    }
                }
            }
            return(true);
        }
コード例 #31
0
		protected override void InitCallbacks ()
		{
			ArrayList maps = _typeMap.RelatedMaps;
			if (maps != null)
			{
				foreach (XmlTypeMapping map in maps)  {
					CallbackInfo info = new CallbackInfo (this, map);
					if (map.TypeData.SchemaType == SchemaTypes.Enum) AddWriteCallback(map.TypeData.Type, map.XmlType, map.Namespace, new XmlSerializationWriteCallback (info.WriteEnum));
					else AddWriteCallback(map.TypeData.Type, map.XmlType, map.Namespace, new XmlSerializationWriteCallback (info.WriteObject));
				}
			}
		}
コード例 #32
0
ファイル: EveApi.cs プロジェクト: TheAsuro/NEVR
        private static void ApiRequest(string uri, Action<string> callback)
        {
            AsyncCallback requestCallback = new AsyncCallback(ProcessApiResult);
            HttpWebRequest request = WebRequest.Create(uri) as HttpWebRequest;
            CallbackInfo info = new CallbackInfo();
            info.request = request;
            info.callback = callback;

            request.UserAgent = @"http://theasuro.de Maintainer: Till W [email protected]";

            request.BeginGetResponse(requestCallback, info);
        }
コード例 #33
0
        public override void RegisterKeyNotification(string key, CallbackInfo updateCallback, CallbackInfo removeCallback, OperationContext operationContext)
        {
            Sync.AcquireWriterLock(Timeout.Infinite);
            try
            {

                Internal.RegisterKeyNotification(key, updateCallback, removeCallback, operationContext);

                if (_context.CacheImpl.RequiresReplication)
                {
                    string uniqueKey = System.Guid.NewGuid().ToString() + key;
#if !CLIENT
                    _context.CacheImpl.EnqueueForReplication(null, (int)ClusterCacheBase.OpCodes.RegisterKeyNotification, new object[] { key, updateCallback, removeCallback, operationContext });
#endif
                }
            }
            finally
            {
                Sync.ReleaseWriterLock();
            }
        }
コード例 #34
0
ファイル: Axcess.cs プロジェクト: jizepi/Payment-providers
        public override CallbackInfo ProcessCallback( Order order, HttpRequest request, IDictionary<string, string> settings )
        {
            CallbackInfo callbackInfo = null;

              try {
            order.MustNotBeNull( "order" );
            request.MustNotBeNull( "request" );
            settings.MustNotBeNull( "settings" );
            settings.MustContainKey( "TRANSACTION.MODE", "settings" );

            //Write data when testing
            if ( settings[ "TRANSACTION.MODE" ] != "LIVE" ) {
              LogRequest( request, logPostData: true );
            }

            HttpContext.Current.Response.Clear();
            if ( request[ "PROCESSING.RESULT" ] == "ACK" ) {
              callbackInfo = new CallbackInfo( decimal.Parse( request.Form[ "PRESENTATION.AMOUNT" ], CultureInfo.InvariantCulture ), request.Form[ "IDENTIFICATION.UNIQUEID" ], request.Form[ "PAYMENT.CODE" ] != "CC.DB" ? PaymentState.Authorized : PaymentState.Captured );

              string continueUrl = GetContinueUrl( order, settings );
              if ( !continueUrl.StartsWith( "http" ) ) {
            Uri baseUrl = new UriBuilder( request.Url.Scheme, request.Url.Host, request.Url.Port ).Uri;
            continueUrl = new Uri( baseUrl, continueUrl ).AbsoluteUri;
              }

              HttpContext.Current.Response.Write( continueUrl );
            } else {
              LoggingService.Instance.Log( "Axcess(" + order.CartNumber + ") - Process callback - PROCESSING.CODE: " + request[ "PROCESSING.CODE" ] );

              string cancelUrl = GetCancelUrl( order, settings );
              if ( !cancelUrl.StartsWith( "http" ) ) {
            Uri baseUrl = new UriBuilder( request.Url.Scheme, request.Url.Host, request.Url.Port ).Uri;
            cancelUrl = new Uri( baseUrl, cancelUrl ).AbsoluteUri;
              }
              HttpContext.Current.Response.Write( cancelUrl );
            }
              } catch ( Exception exp ) {
            LoggingService.Instance.Log( exp, "Axcess(" + order.CartNumber + ") - Process callback" );
              }

              return callbackInfo;
        }
コード例 #35
0
ファイル: Stripe.cs プロジェクト: jizepi/Payment-providers
        public override CallbackInfo ProcessCallback( Order order, HttpRequest request, IDictionary<string, string> settings )
        {
            CallbackInfo callbackInfo = null;

              try {
            order.MustNotBeNull( "order" );
            request.MustNotBeNull( "request" );
            settings.MustNotBeNull( "settings" );
            settings.MustContainKey( "mode", "settings" );
            settings.MustContainKey( settings[ "mode" ] + "_secret_key", "settings" );

            // If in test mode, write out the form data to a text file
            if ( settings.ContainsKey( "mode" ) && settings[ "mode" ] == "test" ) {
              LogRequest( request, logPostData: true );
            }

            StripeChargeCreateOptions chargeOptions = new StripeChargeCreateOptions {
              AmountInCents = (int)( order.TotalPrice.Value.WithVat * 100 ),
              Currency = CurrencyService.Instance.Get( order.StoreId, order.CurrencyId ).IsoCode,
              TokenId = request.Form[ "stripeToken" ],
              Description = order.CartNumber,
              Capture = settings.ContainsKey( "capture" ) && ( settings[ "capture" ].TryParse<bool>() ?? false )
            };

            StripeChargeService chargeService = new StripeChargeService( settings[ settings[ "mode" ] + "_secret_key" ] );
            StripeCharge charge = chargeService.Create( chargeOptions );

            if ( charge.AmountInCents != null && charge.Paid != null && charge.Paid.Value ) {
              callbackInfo = new CallbackInfo( (decimal)charge.AmountInCents.Value / 100, charge.Id, charge.Captured != null && charge.Captured.Value ? PaymentState.Captured : PaymentState.Authorized );

            }

              } catch ( StripeException e ) {
            // Pass through request fields
            string requestFields = string.Join( "", request.Form.AllKeys.Select( k => "<input type=\"hidden\" name=\"" + k + "\" value=\"" + request.Form[ k ] + "\" />" ) );

            //Add error details from the exception.
            requestFields = requestFields + "<input type=\"hidden\" name=\"TransactionFailed\" value=\"true\" />";
            requestFields = requestFields + "<input type=\"hidden\" name=\"FailureReason.chargeId\" value=\"" + e.StripeError.ChargeId + "\" />";
            requestFields = requestFields + "<input type=\"hidden\" name=\"FailureReason.Code\" value=\"" + e.StripeError.Code + "\" />";
            requestFields = requestFields + "<input type=\"hidden\" name=\"FailureReason.Error\" value=\"" + e.StripeError.Error + "\" />";
            requestFields = requestFields + "<input type=\"hidden\" name=\"FailureReason.ErrorSubscription\" value=\"" + e.StripeError.ErrorSubscription + "\" />";
            requestFields = requestFields + "<input type=\"hidden\" name=\"FailureReason.ErrorType\" value=\"" + e.StripeError.ErrorType + "\" />";
            requestFields = requestFields + "<input type=\"hidden\" name=\"FailureReason.Message\" value=\"" + e.StripeError.Message + "\" />";
            requestFields = requestFields + "<input type=\"hidden\" name=\"FailureReason.Parameter\" value=\"" + e.StripeError.Parameter + "\" />";

            string paymentForm = PaymentMethodService.Instance.Get( order.StoreId, order.PaymentInformation.PaymentMethodId.Value ).GeneratePaymentForm( order, requestFields );

            //Force the form to auto submit
            paymentForm += "<script type=\"text/javascript\">document.forms[0].submit();</script>";

            //Write out the form
            HttpContext.Current.Response.Clear();
            HttpContext.Current.Response.Write( paymentForm );
            HttpContext.Current.Response.End();
              } catch ( Exception exp ) {
            LoggingService.Instance.Log( exp, "Stripe(" + order.CartNumber + ") - ProcessCallback" );
              }

              return callbackInfo;
        }
コード例 #36
0
ファイル: LocalCacheBase.cs プロジェクト: christrotter/NCache
 public override void UnregisterKeyNotification(string[] keys, CallbackInfo updateCallback, CallbackInfo removeCallback, OperationContext operationContext)
 {
     if (keys != null)
     {
         foreach (string key in keys)
             UnregisterKeyNotification(key, updateCallback, removeCallback, operationContext);
     }
 }
コード例 #37
0
ファイル: Ogone.cs プロジェクト: EtchUK/Payment-providers
        public override CallbackInfo ProcessCallback( Order order, HttpRequest request, IDictionary<string, string> settings )
        {
            CallbackInfo callbackInfo = null;

              try {
            order.MustNotBeNull( "order" );
            request.MustNotBeNull( "request" );
            settings.MustNotBeNull( "settings" );
            settings.MustContainKey( "SHAOUTPASSPHRASE", "settings" );

            //Write data when testing
            if ( settings.ContainsKey( "TESTMODE" ) && settings[ "TESTMODE" ] == "1" ) {
              LogRequest<Ogone>( request, logGetData: true );
            }

            Dictionary<string, string> inputFields = new Dictionary<string, string>();

            string shaSign = request.QueryString[ "SHASIGN" ];
            string strAmount = request.QueryString[ "AMOUNT" ];
            string transaction = request.QueryString[ "PAYID" ];
            string status = request.QueryString[ "STATUS" ];
            string cardType = request.QueryString[ "BRAND" ];
            string cardNo = request.QueryString[ "CARDNO" ];

            foreach ( string key in request.QueryString.Keys ) {
              if ( !key.Equals( "SHASIGN" ) )
            inputFields[ key ] = request.QueryString[ key ];
            }

            string strToHash = string.Join( "", inputFields.OrderBy( i => i.Key ).Select( i => i.Key.ToUpperInvariant() + "=" + i.Value + settings[ "SHAOUTPASSPHRASE" ] ) );
            string digest = new SHA512Managed().ComputeHash( Encoding.UTF8.GetBytes( strToHash ) ).ToHex().ToUpperInvariant();

            if ( order.CartNumber == request.QueryString[ "ORDERID" ] && digest.Equals( shaSign ) ) {
              callbackInfo = new CallbackInfo( decimal.Parse( strAmount, CultureInfo.InvariantCulture ), transaction, status == "5" || status == "51" ? PaymentState.Authorized : PaymentState.Captured, cardType, cardNo );
            } else {
              LoggingService.Instance.Warn<Ogone>( "Ogone(" + order.CartNumber + ") - SHASIGN check isn't valid - Calculated digest: " + digest + " - Ogone SHASIGN: " + shaSign );
            }
              } catch ( Exception exp ) {
            LoggingService.Instance.Error<Ogone>( "Ogone(" + order.CartNumber + ") - Process callback", exp );
              }

              return callbackInfo;
        }
コード例 #38
0
        public override CallbackInfo ProcessCallback( Order order, HttpRequest request, IDictionary<string, string> settings )
        {
            CallbackInfo callbackInfo = null;

              try {
            order.MustNotBeNull( "order" );
            request.MustNotBeNull( "request" );
            settings.MustNotBeNull( "settings" );
            settings.MustContainKey( "md5HashKey", "settings" );
            settings.MustContainKey( "x_login", "settings" );

            //Write data when testing
            if ( settings.ContainsKey( "testing" ) && settings[ "testing" ] == "1" ) {
              LogRequest( request, logPostData: true );
            }

            string responseCode = request.Form[ "x_response_code" ];
            if ( responseCode == "1" ) {

              string amount = request.Form[ "x_amount" ];
              string transaction = request.Form[ "x_trans_id" ];

              string gatewayMd5Hash = request.Form[ "x_MD5_Hash" ];

              MD5CryptoServiceProvider x = new MD5CryptoServiceProvider();
              string calculatedMd5Hash = Regex.Replace( BitConverter.ToString( x.ComputeHash( Encoding.ASCII.GetBytes( settings[ "md5HashKey" ] + settings[ "x_login" ] + transaction + amount ) ) ), "-", string.Empty );

              if ( gatewayMd5Hash == calculatedMd5Hash ) {
            PaymentState paymentState = PaymentState.Authorized;
            if ( request.Form[ "x_type" ] == "auth_capture" ) {
              paymentState = PaymentState.Captured;
            }
            string cardType = request.Form[ "x_card_type" ];
            string cardNumber = request.Form[ "x_account_number" ];

            callbackInfo = new CallbackInfo( decimal.Parse( amount, CultureInfo.InvariantCulture ), transaction, paymentState, cardType, cardNumber );
              } else {
            LoggingService.Instance.Log( "Authorize.net(" + order.CartNumber + ") - MD5Sum security check failed - " + gatewayMd5Hash + " - " + calculatedMd5Hash + " - " + settings[ "md5HashKey" ] );
              }
            } else {
              LoggingService.Instance.Log( "Authorize.net(" + order.CartNumber + ") - Payment not approved: " + responseCode );
            }
              } catch ( Exception exp ) {
            LoggingService.Instance.Log( exp, "Authorize.net(" + order.CartNumber + ") - Process callback" );
              }

              return callbackInfo;
        }
コード例 #39
0
ファイル: Dibs.cs プロジェクト: jizepi/Payment-providers
        public override CallbackInfo ProcessCallback( Order order, HttpRequest request, IDictionary<string, string> settings )
        {
            CallbackInfo callbackInfo = null;

              try {
            order.MustNotBeNull( "order" );
            request.MustNotBeNull( "request" );
            settings.MustNotBeNull( "settings" );
            settings.MustContainKey( "md5k1", "settings" );
            settings.MustContainKey( "md5k2", "settings" );

            //Write data when testing
            if ( settings.ContainsKey( "test" ) && settings[ "test" ] == "1" ) {
              LogRequest( request, logPostData: true );
            }

            string transaction = request.Form[ "transact" ];
            string currencyCode = request.Form[ "currency" ];
            string strAmount = request.Form[ "amount" ];
            string authkey = request.Form[ "authkey" ];
            string capturenow = request.Form[ "capturenow" ];
            string fee = request.Form[ "fee" ] ?? "0"; //Is not always in the return data
            string paytype = request.Form[ "paytype" ];
            string cardnomask = request.Form[ "cardnomask" ];

            decimal totalAmount = ( decimal.Parse( strAmount, CultureInfo.InvariantCulture ) + decimal.Parse( fee, CultureInfo.InvariantCulture ) );
            bool autoCaptured = capturenow == "1";

            string md5CheckValue = string.Empty;
            md5CheckValue += settings[ "md5k1" ];
            md5CheckValue += "transact=" + transaction;
            md5CheckValue += "&amount=" + totalAmount.ToString( "0", CultureInfo.InvariantCulture );
            md5CheckValue += "&currency=" + currencyCode;

            //authkey = MD5(k2 + MD5(k1 + "transact=tt&amount=aa&currency=cc"))
            if ( GenerateMD5Hash( settings[ "md5k2" ] + GenerateMD5Hash( md5CheckValue ) ) == authkey ) {
              callbackInfo = new CallbackInfo( totalAmount / 100M, transaction, !autoCaptured ? PaymentState.Authorized : PaymentState.Captured, paytype, cardnomask );
            } else {
              LoggingService.Instance.Log( "DIBS(" + order.CartNumber + ") - MD5Sum security check failed" );
            }
              } catch ( Exception exp ) {
            LoggingService.Instance.Log( exp, "DIBS(" + order.CartNumber + ") - Process callback" );
              }

              return callbackInfo;
        }
コード例 #40
0
ファイル: Wannafind.cs プロジェクト: jizepi/Payment-providers
        public override CallbackInfo ProcessCallback( Order order, HttpRequest request, IDictionary<string, string> settings )
        {
            CallbackInfo callbackInfo = null;

              try {
            order.MustNotBeNull( "order" );
            request.MustNotBeNull( "request" );
            settings.MustNotBeNull( "settings" );
            settings.MustContainKey( "md5CallbackSecret", "settings" );

            //Write data when testing
            if ( settings.ContainsKey( "testmode" ) && settings[ "testmode" ] == "1" ) {
              LogRequest( request, logGetData: true );
            }

            string cartNumber = request.QueryString[ "orderid" ];
            string currency = request.QueryString[ "currency" ];
            string amount = request.QueryString[ "amount" ];
            string cardType = settings.ContainsKey( "cardtype" ) ? settings[ "cardtype" ] : string.Empty;

            string md5CheckValue = GenerateMD5Hash( cartNumber + currency + cardType + amount + settings[ "md5CallbackSecret" ] );

            if ( order.CartNumber.Replace( StoreService.Instance.Get( order.StoreId ).OrderSettings.CartNumberPrefix, "" ) == cartNumber && md5CheckValue.Equals( request.QueryString[ "checkmd5callback" ] ) ) {

              string transaction = request.QueryString[ "transacknum" ];
              string cardtype = request.QueryString[ "cardtype" ];
              string cardnomask = request.QueryString[ "cardnomask" ];

              decimal totalAmount = decimal.Parse( amount, CultureInfo.InvariantCulture );

              //Wannafind cant give us info about auto capturing
              callbackInfo = new CallbackInfo( totalAmount / 100M, transaction, PaymentState.Authorized, cardtype, cardnomask );
            } else {
              LoggingService.Instance.Log( "Wannafind(" + order.CartNumber + ") - MD5Sum security check failed" );
            }
              } catch ( Exception exp ) {
            LoggingService.Instance.Log( exp, "Wannafind(" + order.CartNumber + ") - Process callback" );
              }

              return callbackInfo;
        }
コード例 #41
0
ファイル: Paynova.cs プロジェクト: EtchUK/Payment-providers
        public override CallbackInfo ProcessCallback( Order order, HttpRequest request, IDictionary<string, string> settings )
        {
            CallbackInfo callbackInfo = null;

              try {
            order.MustNotBeNull( "order" );
            request.MustNotBeNull( "request" );
            settings.MustNotBeNull( "settings" );
            settings.MustContainKey( "secretKey", "settings" );

            //Write data when testing
            if ( settings.ContainsKey( "testMode" ) && settings[ "testMode" ] == "1" ) {
              LogRequest<Paynova>( request, logPostData: true );
            }

            PostbackDigest postbackDigest = new PostbackDigest( settings[ "secretKey" ] );
            if ( order.CartNumber == request.Form[ "ORDER_NUMBER" ] && postbackDigest.Validate( request.Form ) ) {
              decimal amountAuthorized = decimal.Parse( request.Form[ "PAYMENT_1_AMOUNT" ], CultureInfo.InvariantCulture );
              string transaction = request.Form[ "PAYMENT_1_TRANSACTION_ID" ];
              string paymentType = request.Form[ "PAYMENT_1_PAYMENT_METHOD_NAME" ];
              string paymentIdentifier = request.Form[ "PAYMENT_1_CARD_LAST_FOUR" ];

              PaymentState? paymentState = null;
              switch ( request.Form[ "PAYMENT_1_STATUS" ] ) {
            case "Pending":
              paymentState = PaymentState.PendingExternalSystem;
              break;
            case "Completed":
            case "PartiallyCompleted":
              paymentState = PaymentState.Captured;
              break;
            case "Authorized":
              paymentState = PaymentState.Authorized;
              break;
              }

              if ( paymentState != null ) {
            callbackInfo = new CallbackInfo( amountAuthorized, transaction, paymentState.Value, paymentType, paymentIdentifier );
              }
            } else {
              LoggingService.Instance.Warn<Paynova>( "Paynova(" + order.CartNumber + ") - digest check failed" );
            }
              } catch ( Exception exp ) {
            LoggingService.Instance.Error<Paynova>( "Paynova(" + order.CartNumber + ") - Process callback", exp );
              }

              return callbackInfo;
        }
コード例 #42
0
ファイル: Klarna.cs プロジェクト: EtchUK/Payment-providers
        public override CallbackInfo ProcessCallback( Order order, HttpRequest request, IDictionary<string, string> settings )
        {
            CallbackInfo callbackInfo = null;

              try {
            order.MustNotBeNull( "order" );
            request.MustNotBeNull( "request" );
            settings.MustNotBeNull( "settings" );
            settings.MustContainKey( "sharedSecret", "settings" );

            IConnector connector = Connector.Create( settings[ "sharedSecret" ] );
            KlarnaOrder klarnaOrder = new KlarnaOrder( connector, new Uri( order.Properties[ "klarnaLocation" ] ) ) {
              ContentType = KlarnaApiRequestContentType
            };
            klarnaOrder.Fetch();

            if ( (string)klarnaOrder.GetValue( "status" ) == "checkout_complete" ) {

              //We need to populate the order with the information entered into Klarna.
              SaveOrderPropertiesFromKlarnaCallback( order, klarnaOrder );

              decimal amount = ( (JObject)klarnaOrder.GetValue( "cart" ) )[ "total_price_including_tax" ].Value<decimal>() / 100M;
              string klarnaId = klarnaOrder.GetValue( "id" ).ToString();

              callbackInfo = new CallbackInfo( amount, klarnaId, PaymentState.Authorized );

              klarnaOrder.Update( new Dictionary<string, object>() { { "status", "created" } } );
            } else {
              throw new Exception( "Trying to process a callback from Klarna with an order that isn't completed" );
            }
              } catch ( Exception exp ) {
            LoggingService.Instance.Error<Klarna>( "Klarna(" + order.CartNumber + ") - Process callback", exp );
              }

              return callbackInfo;
        }
コード例 #43
0
        public override void RegisterKeyNotification(string[] keys, CallbackInfo updateCallback,
            CallbackInfo removeCallback, OperationContext operationContext)
        {
            object[] obj = null;
            Hashtable targetNodes = null;
            Hashtable result = new Hashtable();

            ArrayList totalKeys = new ArrayList(keys);
            Address targetNode = null;
            string[] currentKeys = null;
            targetNodes = GetTargetNodes(totalKeys);

            if (targetNodes != null && targetNodes.Count != 0)
            {
                IDictionaryEnumerator ide = targetNodes.GetEnumerator();
                Hashtable keyList = null;


                while (ide.MoveNext())
                {
                    targetNode = ide.Key as Address;
                    keyList = (Hashtable) ide.Value;

                    if (targetNode != null && keyList != null)
                    {
                        currentKeys = new string[keyList.Count];
                        int j = 0;
                        foreach (object key in keyList.Keys)
                        {
                            int index = totalKeys.IndexOf(key);
                            if (index != -1)
                            {
                                currentKeys[j] = (string) totalKeys[index];
                                j++;
                            }
                        }

                        try
                        {
                            obj = new object[] {currentKeys, updateCallback, removeCallback, operationContext};
                            if (targetNode.Equals(Cluster.LocalAddress))
                            {
                                handleRegisterKeyNotification(obj);
                            }
                            else
                            {
                                Function fun = new Function((byte) OpCodes.RegisterKeyNotification, obj, false);
                                object rsp = Cluster.SendMessage(targetNode, fun, GetFirstResponse, false);
                            }
                        }
                        catch (Alachisoft.NGroups.SuspectedException se)
                        {
                            if (Context.NCacheLog.IsInfoEnabled)
                                Context.NCacheLog.Info("PartServerCache.RegisterKeyNotification",
                                    targetNode + " left while Registering notification");
                            throw se;
                        }
                        catch (Alachisoft.NCache.Common.Exceptions.TimeoutException te)
                        {
                            if (Context.NCacheLog.IsInfoEnabled)
                                Context.NCacheLog.Info("PartServerCache.RegisterKeyNotification",
                                    targetNode + " operation timed out");
                            throw te;
                        }
                        catch (Alachisoft.NCache.Caching.Exceptions.StateTransferException se)
                        {
                            throw se;
                        }

                    }
                }
            }
        }
コード例 #44
0
 public override void RegisterKeyNotification(string key, CallbackInfo updateCallback,
     CallbackInfo removeCallback, OperationContext operationContext)
 {
     object[] obj = new object[] {key, updateCallback, removeCallback, operationContext};
     Address targetNode = null;
     do
     {
         try
         {
             targetNode = GetNextNode(key);
             if (targetNode.Equals(Cluster.LocalAddress))
             {
                 handleRegisterKeyNotification(obj);
             }
             else
             {
                 Function fun = new Function((byte) OpCodes.RegisterKeyNotification, obj, false);
                 object results = Cluster.SendMessage(targetNode, fun, GetFirstResponse, false);
             }
             break;
         }
         catch (Alachisoft.NGroups.SuspectedException se)
         {
             if (Context.NCacheLog.IsInfoEnabled)
                 Context.NCacheLog.Info("PartServerCache.RegisterKeyNotification",
                     targetNode + " left while Registering notification");
             throw se;
         }
         catch (Alachisoft.NCache.Common.Exceptions.TimeoutException te)
         {
             if (Context.NCacheLog.IsInfoEnabled)
                 Context.NCacheLog.Info("PartServerCache.RegisterKeyNotification",
                     targetNode + " operation timed out");
             throw te;
         }
         catch (Alachisoft.NCache.Caching.Exceptions.StateTransferException se)
         {
             _distributionMgr.Wait(key);
         }
     } while (true);
 }
 private Timer CreateTimerCallback(CallbackInfo info)
 {
     DateTime utcNow = DateTime.UtcNow;
     TimeSpan dueTime = (info.When > utcNow) ? ((TimeSpan) (info.When - utcNow)) : TimeSpan.Zero;
     if (dueTime > fiveMinutes)
     {
         dueTime = fiveMinutes;
     }
     return new Timer(this.timerCallback, info.State, dueTime, infinite);
 }
 protected internal override void Schedule(WaitCallback callback, Guid workflowInstanceId, DateTime whenUtc, Guid timerId)
 {
     WorkflowTrace.Host.TraceEvent(TraceEventType.Information, 0, "Scheduling work for instance {0} on timer ID {1} in {2}", new object[] { workflowInstanceId, timerId, (TimeSpan) (whenUtc - DateTime.UtcNow) });
     if (callback == null)
     {
         throw new ArgumentNullException("callback");
     }
     if (timerId == Guid.Empty)
     {
         throw new ArgumentException(string.Format(CultureInfo.CurrentUICulture, ExecutionStringManager.CantBeEmptyGuid, new object[] { "timerId" }));
     }
     if (workflowInstanceId == Guid.Empty)
     {
         throw new ArgumentException(string.Format(CultureInfo.CurrentUICulture, ExecutionStringManager.CantBeEmptyGuid, new object[] { "workflowInstanceId" }));
     }
     CallbackInfo info = new CallbackInfo(this, callback, workflowInstanceId, whenUtc);
     lock (this.timerQueue)
     {
         this.timerQueue.Enqueue(timerId, info, whenUtc);
     }
 }
コード例 #47
0
        public override void UnregisterKeyNotification(string[] keys, CallbackInfo updateCallback, CallbackInfo removeCallback, OperationContext operationContext)
        {
            bool mirrorReplication = _context.CacheImpl.RequiresReplication;

            Sync.AcquireWriterLock(Timeout.Infinite);
            try
            {

                Internal.UnregisterKeyNotification(keys, updateCallback, removeCallback, operationContext);

                if (mirrorReplication)
                {
                    for (int i = 0; i < keys.Length; i++)
                    {
                        if (mirrorReplication)
                        {
                            string uniqueKey = System.Guid.NewGuid().ToString() + keys[i];
#if !CLIENT
                            _context.CacheImpl.EnqueueForReplication(null, (int)ClusterCacheBase.OpCodes.UnregisterKeyNotification, new object[] { keys[i], updateCallback, removeCallback, operationContext });
#endif
                        }
                    }
                }
            }
            finally
            {
                Sync.ReleaseWriterLock();
            }
        }
コード例 #48
0
ファイル: QuickPay.cs プロジェクト: jizepi/Payment-providers
        public override CallbackInfo ProcessCallback( Order order, HttpRequest request, IDictionary<string, string> settings )
        {
            CallbackInfo callbackInfo = null;

              try {
            order.MustNotBeNull( "order" );
            request.MustNotBeNull( "request" );
            settings.MustNotBeNull( "settings" );
            settings.MustContainKey( "md5secret", "settings" );

            //Write data when testing
            if ( settings.ContainsKey( "testmode" ) && settings[ "testmode" ] == "1" ) {
              LogRequest( request, logPostData: true );
            }

            string md5CheckValue = string.Empty;
            md5CheckValue += request.Form[ "msgtype" ];
            md5CheckValue += request.Form[ "ordernumber" ];
            md5CheckValue += request.Form[ "amount" ];
            md5CheckValue += request.Form[ "currency" ];
            md5CheckValue += request.Form[ "time" ];
            md5CheckValue += request.Form[ "state" ];
            md5CheckValue += request.Form[ "qpstat" ];
            md5CheckValue += request.Form[ "qpstatmsg" ];
            md5CheckValue += request.Form[ "chstat" ];
            md5CheckValue += request.Form[ "chstatmsg" ];
            md5CheckValue += request.Form[ "merchant" ];
            md5CheckValue += request.Form[ "merchantemail" ];
            md5CheckValue += request.Form[ "transaction" ];
            md5CheckValue += request.Form[ "cardtype" ];
            md5CheckValue += request.Form[ "cardnumber" ];
            md5CheckValue += request.Form[ "cardhash" ];
            md5CheckValue += request.Form[ "cardexpire" ];
            md5CheckValue += request.Form[ "acquirer" ];
            md5CheckValue += request.Form[ "splitpayment" ];
            md5CheckValue += request.Form[ "fraudprobability" ];
            md5CheckValue += request.Form[ "fraudremarks" ];
            md5CheckValue += request.Form[ "fraudreport" ];
            md5CheckValue += request.Form[ "fee" ];
            md5CheckValue += settings[ "md5secret" ];

            string orderName = order.CartNumber;
            while ( orderName.Length < 4 )
              orderName = "0" + orderName;

            if ( orderName == request.Form[ "ordernumber" ] && GenerateMD5Hash( md5CheckValue ) == request.Form[ "md5check" ] ) {
              string qpstat = request.Form[ "qpstat" ];

              if ( qpstat == "000" ) {
            decimal amount = decimal.Parse( request.Form[ "amount" ], CultureInfo.InvariantCulture ) / 100M;
            string state = request.Form[ "state" ];
            string transaction = request.Form[ "transaction" ];

            callbackInfo = new CallbackInfo( amount, transaction, state == "1" ? PaymentState.Authorized : PaymentState.Captured, request.Form[ "cardtype" ], request.Form[ "cardnumber" ] );
              } else {
            LoggingService.Instance.Log( "Quickpay(" + order.CartNumber + ") - Error making API request - error code: " + qpstat + " | error message: " + request.Form[ "qpstatmsg" ] );
              }

            } else {
              LoggingService.Instance.Log( "QuickPay(" + order.CartNumber + ") - MD5Sum security check failed" );
            }
              } catch ( Exception exp ) {
            LoggingService.Instance.Log( exp, "QuickPay(" + order.CartNumber + ") - Process callback" );
              }

              return callbackInfo;
        }
コード例 #49
0
ファイル: ePay.cs プロジェクト: EtchUK/Payment-providers
        public override CallbackInfo ProcessCallback( Order order, HttpRequest request, IDictionary<string, string> settings )
        {
            CallbackInfo callbackInfo = null;

              try {
            order.MustNotBeNull( "order" );
            request.MustNotBeNull( "request" );
            settings.MustNotBeNull( "settings" );

            //Write data when testing
            if ( settings.ContainsKey( "testMode" ) && settings[ "testMode" ] == "1" ) {
              LogRequest<ePay>( request, logGetData: true );
            }

            string transaction = request.QueryString[ "txnid" ];
            string strAmount = request.QueryString[ "amount" ];
            string hash = request.QueryString[ "hash" ];

            string md5CheckValue = string.Empty;

            foreach ( string k in request.QueryString.Keys ) {
              if ( k != "hash" ) {
            md5CheckValue += request.QueryString[ k ];
              }
            }
            if ( settings.ContainsKey( "md5securitykey" ) ) {
              md5CheckValue += settings[ "md5securitykey" ];
            }

            if ( order.CartNumber == request.QueryString[ "orderid" ] && GenerateMD5Hash( md5CheckValue ) == hash ) {
              string fee = request.QueryString[ "txnfee" ];
              string cardid = request.QueryString[ "paymenttype" ];
              string cardnopostfix = request.QueryString[ "cardno" ];

              decimal totalAmount = ( decimal.Parse( strAmount, CultureInfo.InvariantCulture ) + decimal.Parse( fee, CultureInfo.InvariantCulture ) );

              bool autoCaptured = settings.ContainsKey( "instantcapture" ) && settings[ "instantcapture" ] == "1";

              callbackInfo = new CallbackInfo( totalAmount / 100M, transaction, !autoCaptured ? PaymentState.Authorized : PaymentState.Captured, cardid, cardnopostfix );
            } else {
              LoggingService.Instance.Warn<ePay>( "ePay(" + order.CartNumber + ") - MD5Sum security check failed" );
            }
              } catch ( Exception exp ) {
            LoggingService.Instance.Error<ePay>( "ePay(" + order.CartNumber + ") - Process callback", exp );
              }

              return callbackInfo;
        }
コード例 #50
0
        public override CallbackInfo ProcessCallback( Order order, HttpRequest request, IDictionary<string, string> settings )
        {
            CallbackInfo callbackInfo = null;

              try {
            order.MustNotBeNull( "order" );
            request.MustNotBeNull( "request" );
            settings.MustNotBeNull( "settings" );
            settings.MustContainKey( "secretWord", "settings" );

            //Write data when testing
            if ( settings.ContainsKey( "demo" ) && settings[ "demo" ] == "Y" ) {
              LogRequest( request, logGetData: true );
            }

            string accountNumber = request.QueryString[ "sid" ];
            string transaction = request.QueryString[ "order_number" ];
            string strAmount = request.QueryString[ "total" ];
            string key = request.QueryString[ "key" ];

            string md5CheckValue = string.Empty;
            md5CheckValue += settings[ "secretWord" ];
            md5CheckValue += accountNumber;
            md5CheckValue += settings.ContainsKey( "demo" ) && settings[ "demo" ] == "Y" ? "1" : transaction;
            md5CheckValue += strAmount;

            string calculatedMd5 = GenerateMD5Hash( md5CheckValue ).ToUpperInvariant();

            if ( calculatedMd5 == key ) {
              decimal totalAmount = decimal.Parse( strAmount, CultureInfo.InvariantCulture );

              callbackInfo = new CallbackInfo( totalAmount, transaction, PaymentState.Authorized );
            } else {
              LoggingService.Instance.Log( "2CheckOut(" + order.CartNumber + ") - MD5Sum security check failed - key: " + key + " - calculatedMD5: " + calculatedMd5 );
            }
              } catch ( Exception exp ) {
            LoggingService.Instance.Log( exp, "2CheckOut(" + order.CartNumber + ") - Process callback" );
              }

              return callbackInfo;
        }
コード例 #51
0
ファイル: Element.cs プロジェクト: slgrobotics/Win10Bot
		internal void SignalEvent(
			HardwareComponentEventHandler callback, ElementComponent componenet)
		{
			// enqueue the info about the callback for later use
			CallbackInfo ci = new CallbackInfo();
			ci.callback = callback;
			ci.component = componenet;
			lock (callbacks)
			{
				if(!callbacks.Contains(ci))
				{
					callbacks.Enqueue(ci);
				}
			}

			// if asyncCallbacks are enabled, then go ahead and run them 
			// on this thread - otherwise they wait for a explicit call to
			// PumpEvents() by the user (or the run loop)
			if (asyncCallbacks)
			{
				PumpEvents();
			}
			else
			{
				// this signals the Run() loop that there are 
				// events to be run
				eventsReady.Set();
			}
		}
コード例 #52
0
        public override CallbackInfo ProcessCallback( Order order, HttpRequest request, IDictionary<string, string> settings )
        {
            CallbackInfo callbackInfo = null;

              if ( request != null && !string.IsNullOrEmpty( request.Form[ "StatusCode" ] ) ) {
            //First callback from PaymentSense - server to server callback

            HttpContext.Current.Response.Clear();
            try {
              order.MustNotBeNull( "order" );
              settings.MustNotBeNull( "settings" );

              //Write data when testing
              if ( settings.ContainsKey( "Testing" ) && settings[ "Testing" ] == "1" ) {
            LogRequest<PaymentSense>( request, logPostData: true );
              }

              List<string> keysToHash = new List<string>();
              keysToHash.Add( "PreSharedKey" );
              keysToHash.Add( "MerchantID" );
              keysToHash.Add( "Password" );
              keysToHash.Add( "StatusCode" );
              keysToHash.Add( "Message" );
              keysToHash.Add( "PreviousStatusCode" );
              keysToHash.Add( "PreviousMessage" );
              keysToHash.Add( "CrossReference" );
              if ( !string.IsNullOrEmpty( request.Form[ "AddressNumericCheckResult" ] ) ) keysToHash.Add( "AddressNumericCheckResult" );
              if ( !string.IsNullOrEmpty( request.Form[ "PostCodeCheckResult" ] ) ) keysToHash.Add( "PostCodeCheckResult" );
              if ( !string.IsNullOrEmpty( request.Form[ "CV2CheckResult" ] ) ) keysToHash.Add( "CV2CheckResult" );
              if ( !string.IsNullOrEmpty( request.Form[ "ThreeDSecureCheckResult" ] ) ) keysToHash.Add( "ThreeDSecureCheckResult" );
              if ( !string.IsNullOrEmpty( request.Form[ "CardType" ] ) ) keysToHash.Add( "CardType" );
              if ( !string.IsNullOrEmpty( request.Form[ "CardClass" ] ) ) keysToHash.Add( "CardClass" );
              if ( !string.IsNullOrEmpty( request.Form[ "CardIssuer" ] ) ) keysToHash.Add( "CardIssuer" );
              if ( !string.IsNullOrEmpty( request.Form[ "CardIssuerCountryCode" ] ) ) keysToHash.Add( "CardIssuerCountryCode" );
              keysToHash.Add( "Amount" );
              keysToHash.Add( "CurrencyCode" );
              keysToHash.Add( "OrderID" );
              keysToHash.Add( "TransactionType" );
              keysToHash.Add( "TransactionDateTime" );
              keysToHash.Add( "OrderDescription" );
              keysToHash.Add( "CustomerName" );
              keysToHash.Add( "Address1" );
              keysToHash.Add( "Address2" );
              keysToHash.Add( "Address3" );
              keysToHash.Add( "Address4" );
              keysToHash.Add( "City" );
              keysToHash.Add( "State" );
              keysToHash.Add( "PostCode" );
              keysToHash.Add( "CountryCode" );
              if ( !string.IsNullOrEmpty( request.Form[ "EmailAddress" ] ) ) keysToHash.Add( "EmailAddress" );
              if ( !string.IsNullOrEmpty( request.Form[ "PhoneNumber" ] ) ) keysToHash.Add( "PhoneNumber" );

              string hashDigest = CreateHashDigest( keysToHash, settings, request.Form.AllKeys.ToDictionary( k => k, k => request.Form[ k ] ) );

              if ( order.CartNumber == request.Form[ "OrderID" ] && hashDigest == request.Form[ "HashDigest" ] ) {
            if ( request.Form[ "StatusCode" ] == "0" || ( request.Form[ "StatusCode" ] == "20" && request.Form[ "PreviousStatusCode" ] == "0" ) ) {
              callbackInfo = new CallbackInfo( decimal.Parse( request.Form[ "Amount" ], CultureInfo.InvariantCulture ) / 100M, request.Form[ "CrossReference" ], request.Form[ "TransactionType" ] != "SALE" ? PaymentState.Authorized : PaymentState.Captured );
              HttpContext.Current.Response.Write( "StatusCode=0" );
            } else {
              HttpContext.Current.Response.Write( "StatusCode=" + request.Form[ "StatusCode" ] + "&Message=" + request.Form[ "Message" ] );
            }
              } else {
            string message = "PaymentSense(" + order.CartNumber + ") - Digest check failed - calculated: " + hashDigest + " PaymentSense: " + request.Form[ "HashDigest" ];
            LoggingService.Instance.Warn<PaymentSense>( message );
            HttpContext.Current.Response.Write( "StatusCode=30&Message=" + message );
              }
            } catch ( Exception exp ) {
              string message = "PaymentSense(" + order.CartNumber + ") - Process callback failed";
              LoggingService.Instance.Error<PaymentSense>( message, exp );
              HttpContext.Current.Response.Write( "StatusCode=30&Message=" + message );
            }
              } else {
            //Second callback from PaymentSense - redirect the user to the continue or cancel url
            HttpContext.Current.Response.Redirect( order != null && order.IsFinalized ? GetContinueUrl( order, settings ) : GetCancelUrl( order, settings ) );
              }

              return callbackInfo;
        }
コード例 #53
0
ファイル: SagePay.cs プロジェクト: jizepi/Payment-providers
        public override CallbackInfo ProcessCallback( Order order, HttpRequest request, IDictionary<string, string> settings )
        {
            CallbackInfo callbackInfo = null;

              try {
            order.MustNotBeNull( "order" );
            request.MustNotBeNull( "request" );
            settings.MustNotBeNull( "settings" );
            settings.MustContainKey( "Vendor", "settings" );

            //Write data when testing
            if ( settings.ContainsKey( "testMode" ) && ( settings[ "testMode" ] == "SIMULATOR" || settings[ "testMode" ] == "TEST" ) ) {
              LogRequest( request, logPostData: true );
            }

            string transaction = request.Form[ "VPSTxId" ];
            string status = request.Form[ "Status" ];
            string cartNumber = request.Form[ "VendorTxCode" ];
            string txAuthNo = request.Form[ "TxAuthNo" ];
            string cardType = request.Form[ "CardType" ];
            string last4Digits = request.Form[ "Last4Digits" ];

            string md5CheckValue = string.Empty;
            md5CheckValue += transaction;
            md5CheckValue += cartNumber;
            md5CheckValue += status;
            md5CheckValue += txAuthNo;
            md5CheckValue += settings[ "Vendor" ].ToLowerInvariant();
            md5CheckValue += HttpUtility.UrlDecode( request.Form[ "AVSCV2" ] );
            md5CheckValue += order.Properties[ "securityKey" ];
            md5CheckValue += HttpUtility.UrlDecode( request.Form[ "AddressResult" ] );
            md5CheckValue += HttpUtility.UrlDecode( request.Form[ "PostCodeResult" ] );
            md5CheckValue += HttpUtility.UrlDecode( request.Form[ "CV2Result" ] );
            md5CheckValue += request.Form[ "GiftAid" ];
            md5CheckValue += request.Form[ "3DSecureStatus" ];
            md5CheckValue += request.Form[ "CAVV" ];
            md5CheckValue += HttpUtility.UrlDecode( request.Form[ "AddressStatus" ] );
            md5CheckValue += HttpUtility.UrlDecode( request.Form[ "PayerStatus" ] );
            md5CheckValue += cardType;
            md5CheckValue += last4Digits;

            string calcedMd5Hash = GenerateMD5Hash( md5CheckValue ).ToUpperInvariant();
            string vpsSignature = request.Form[ "VPSSignature" ];

            if ( order.CartNumber == cartNumber && calcedMd5Hash == vpsSignature ) {

              Dictionary<string, string> inputFields = new Dictionary<string, string>();

              if ( status == "OK" || status == "AUTHENTICATED" || status == "REGISTERED" ) {
            callbackInfo = new CallbackInfo( order.TotalPrice.Value.WithVat, transaction, request.Form[ "TxType" ] != "PAYMENT" ? PaymentState.Authorized : PaymentState.Captured, cardType, last4Digits );

            if ( status == "OK" ) {
              order.Properties.AddOrUpdate( new CustomProperty( "txAuthNo", txAuthNo ) { ServerSideOnly = true } );
            }
            order.Properties.AddOrUpdate( new CustomProperty( "vendorTxCode", cartNumber ) { ServerSideOnly = true } );
            order.Save();

            inputFields[ "Status" ] = "OK";
            inputFields[ "RedirectURL" ] = order.Properties[ "teaCommerceContinueUrl" ];
            inputFields[ "StatusDetail" ] = "OK";

              } else {
            LoggingService.Instance.Log( "Sage Pay(" + order.CartNumber + ") - Error  in callback - status: " + status + " | status details: " + request.Form[ "StatusDetail" ] );

            if ( status == "ERROR" )
              inputFields[ "Status" ] = "INVALID";
            else
              inputFields[ "Status" ] = "OK";

            inputFields[ "RedirectURL" ] = order.Properties[ "teaCommerceCancelUrl" ];
            inputFields[ "StatusDetail" ] = "Error: " + status;
              }

              HttpContext.Current.Response.Clear();
              HttpContext.Current.Response.Write( string.Join( Environment.NewLine, inputFields.Select( i => string.Format( "{0}={1}", i.Key, i.Value ) ).ToArray() ) );
            } else {
              LoggingService.Instance.Log( "Sage Pay(" + order.CartNumber + ") - VPSSignature check isn't valid - Calculated signature: " + calcedMd5Hash + " | SagePay VPSSignature: " + vpsSignature );
            }
              } catch ( Exception exp ) {
            LoggingService.Instance.Log( exp, "Sage Pay(" + order.CartNumber + ") - Process callback" );
              }

              return callbackInfo;
        }
コード例 #54
0
        public override CallbackInfo ProcessCallback( Order order, HttpRequest request, IDictionary<string, string> settings )
        {
            CallbackInfo callbackInfo = null;

              try {
            order.MustNotBeNull( "order" );
            request.MustNotBeNull( "request" );
            settings.MustNotBeNull( "settings" );
            settings.MustContainKey( "privateKey", "settings" );

            string orderName = order.CartNumber;
            while ( orderName.Length < 4 )
              orderName = "0" + orderName;

            string checkSum = request.Headers[ "QuickPay-Checksum-Sha256" ];

            byte[] bytes = new byte[ request.InputStream.Length ];
            request.InputStream.Read( bytes, 0, bytes.Length );
            request.InputStream.Position = 0;

            string streamContent = Encoding.ASCII.GetString( bytes );

            Result result = JsonConvert.DeserializeObject<Result>( streamContent );

            if ( orderName == result.OrderId && GetChecksum( streamContent, settings[ "privateKey" ] ) == checkSum ) {
              Operation lastAuthorize = result.Operations.LastOrDefault( o => o.Type == "authorize" );

              if ( lastAuthorize != null ) {
            if ( lastAuthorize.QpStatusCode == "20000" ) {
              decimal amount = decimal.Parse( lastAuthorize.Amount, CultureInfo.InvariantCulture ) / 100M;

              callbackInfo = new CallbackInfo( amount, result.Id, PaymentState.Authorized, result.Metadata.Type, result.Metadata.Last4 );
            } else {
              LoggingService.Instance.Warn<QuickPay10>( "Quickpay10(" + order.CartNumber + ") - Error making API request - error code: " + lastAuthorize.QpStatusCode + " | error message: " + lastAuthorize.QpStatusMsg );
            }
              } else {
            LoggingService.Instance.Warn<QuickPay10>( "QuickPay10(" + order.CartNumber + ") - No authorize found" );
              }
            } else {
              LoggingService.Instance.Warn<QuickPay10>( "QuickPay10(" + order.CartNumber + ") - Checksum security check failed" );
            }
              } catch ( Exception exp ) {
            LoggingService.Instance.Error<QuickPay10>( "QuickPay10(" + order.CartNumber + ") - Process callback", exp );
              }

              return callbackInfo;
        }
コード例 #55
0
ファイル: LocalCacheBase.cs プロジェクト: christrotter/NCache
        /// <summary>
        /// Registers either an update or remove callback with an existing item.
        /// </summary>
        /// <param name="key">for which notificatin is to be registered</param>
        /// <param name="updateCallback">ItemUpdate callback to be registered.</param>
        /// <param name="removeCallback">ItemRemove callback to be registered.</param>
        public override void RegisterKeyNotification(string key, CallbackInfo updateCallback, CallbackInfo removeCallback, OperationContext operationContext)
        {
            CacheEntry entry = Get(key, operationContext);

            if (entry != null)
            {

                entry.AddCallbackInfo(updateCallback, removeCallback);
            }
        }
コード例 #56
0
ファイル: WorldPay.cs プロジェクト: EtchUK/Payment-providers
        public override CallbackInfo ProcessCallback( Order order, HttpRequest request, IDictionary<string, string> settings )
        {
            CallbackInfo callbackInfo = null;

              try {
            order.MustNotBeNull( "order" );
            request.MustNotBeNull( "request" );
            settings.MustNotBeNull( "settings" );
            settings.MustContainKey( "paymentResponsePassword", "settings" );

            //Write data when testing
            if ( settings.ContainsKey( "testMode" ) && settings[ "testMode" ] == "100" ) {
              LogRequest<WorldPay>( request, logPostData: true );
            }

            string paymentResponsePassword = settings[ "paymentResponsePassword" ];
            string callbackPw = request.Form[ "callbackPW" ];

            if ( callbackPw == paymentResponsePassword ) {
              if ( request.Form[ "transStatus" ] == "Y" ) {
            decimal totalAmount = decimal.Parse( request.Form[ "authAmount" ], CultureInfo.InvariantCulture );
            string transaction = request.Form[ "transId" ];
            PaymentState paymentState = request.Form[ "authMode" ] == "E" ? PaymentState.Authorized : PaymentState.Captured;
            string cardtype = request.Form[ "cardtype" ];

            callbackInfo = new CallbackInfo( totalAmount, transaction, paymentState, cardtype );
              } else {
            LoggingService.Instance.Warn<WorldPay>( "WorldPay(" + order.CartNumber + ") - Cancelled transaction" );
              }
            } else {
              LoggingService.Instance.Warn<WorldPay>( "WorldPay(" + order.CartNumber + ") - Payment response password check failed - callbackPW: " + callbackPw + " - paymentResponsePassword: "******"WorldPay(" + order.CartNumber + ") - Process callback", exp );
              }

              return callbackInfo;
        }
コード例 #57
0
ファイル: LocalCacheBase.cs プロジェクト: christrotter/NCache
        /// <summary>
        /// Unregisters either an update or remove callback with an existing item.
        /// </summary>
        /// <param name="key">for which notificatin is to be unregistered</param>
        /// <param name="updateCallback">ItemUpdate callback to be unregistered.</param>
        /// <param name="removeCallback">ItemRemove callback to be unregistered.</param>

        public override void UnregisterKeyNotification(string key, CallbackInfo updateCallback, CallbackInfo removeCallback, OperationContext operationContext)
        {
            try
            {

                CacheEntry entry = Get(key, operationContext);
                if (entry != null)
                {
                    entry.RemoveCallbackInfo(updateCallback, removeCallback);
                }
            }
            catch (StateTransferException)
            {
                //ignore state transfer expcetion
            }
        }
コード例 #58
0
 public override void UnregisterKeyNotification(string[] keys, CallbackInfo updateCallback, CallbackInfo removeCallback, OperationContext operationContext)
 {
     object[] obj = new object[] { keys, updateCallback, removeCallback, operationContext };
     if (_cluster.Servers.Count > 1)
     {
         Function fun = new Function((byte)OpCodes.UnregisterKeyNotification, obj, false);
         _cluster.BroadcastToMultiple(_cluster.Servers, fun, GroupRequest.GET_ALL, true);
     }
     else
         handleUnregisterKeyNotification(obj);
 }
コード例 #59
0
ファイル: Payer.cs プロジェクト: jizepi/Payment-providers
        public override CallbackInfo ProcessCallback( Order order, HttpRequest request, IDictionary<string, string> settings )
        {
            CallbackInfo callbackInfo = null;

              try {
            order.MustNotBeNull( "order" );
            request.MustNotBeNull( "request" );
            settings.MustNotBeNull( "settings" );
            settings.MustContainKey( "md5Key1", "settings" );
            settings.MustContainKey( "md5Key2", "settings" );

            //Write data when testing
            if ( settings.ContainsKey( "test_mode" ) && settings[ "test_mode" ] == "true" ) {
              LogRequest( request, logGetData: true );
            }

            //Check for payer IP addresses
            string remoteServerIpAddress = request.ServerVariables[ "REMOTE_ADDR" ];

            if ( remoteServerIpAddress == "217.151.207.84" || remoteServerIpAddress == "79.136.103.5" || remoteServerIpAddress == "79.136.103.9" || remoteServerIpAddress == "94.140.57.180" || remoteServerIpAddress == "94.140.57.181" || remoteServerIpAddress == "94.140.57.184" || remoteServerIpAddress == "192.168.100.1" ) {

              string url = request.Url.Scheme + "://" + request.Url.Host + request.ServerVariables[ "REQUEST_URI" ];
              string urlExceptMd5Sum = url.Substring( 0, url.IndexOf( "&md5sum", StringComparison.Ordinal ) );

              string md5CheckValue = GenerateMD5Hash( settings[ "md5Key1" ] + urlExceptMd5Sum + settings[ "md5Key2" ] ).ToUpperInvariant();

              if ( md5CheckValue == request.QueryString[ "md5sum" ] ) {
            HttpContext.Current.Response.Output.Write( "TRUE" );

            string transaction = request.QueryString[ "payread_payment_id" ];
            string paymentType = request.QueryString[ "payer_payment_type" ];
            string callbackType = request.QueryString[ "payer_callback_type" ];
            PaymentState paymentState = callbackType == "auth" ? PaymentState.Authorized : PaymentState.Captured;

            callbackInfo = new CallbackInfo( order.TotalPrice.Value.WithVat, transaction, paymentState, paymentType );
              } else {
            LoggingService.Instance.Log( "Payer(" + order.CartNumber + ") - MD5Sum security check failed" );
              }
            } else {
              LoggingService.Instance.Log( "Payer(" + order.CartNumber + ") - IP security check failed - IP: " + remoteServerIpAddress );
            }

            HttpContext.Current.Response.Output.Write( "FALSE" );
              } catch ( Exception exp ) {
            LoggingService.Instance.Log( exp, "QuickPay(" + order.CartNumber + ") - Process callback" );
              }

              return callbackInfo;
        }
コード例 #60
0
 private Timer CreateTimerCallback(CallbackInfo info)
 {
     DateTime now = DateTime.UtcNow;
     TimeSpan span = (info.When > now) ? info.When - now : TimeSpan.Zero;
     if (span > fiveMinutes) // never let more than five minutes go by without checking
         span = fiveMinutes;
     return new Timer(timerCallback, info.State, span, infinite);
 }