コード例 #1
0
        private async Task <ClientSignedResponse> SignWrapper <T>(ServerSignedRequest <T> request, Func <T, Task <ClientResponse> > func) where T : IClientCallback
        {
            ServerResponse <T> sins = new ServerResponse <T>();

            try
            {
                PaymentGatewayClient cl = PaymentGatewayClientFactory.GetClient(request.Object.Object.Client);
                if (cl == null)
                {
                    throw new ResultCodeException(ResultCodes.ClientServerError, ("en", $"Unable to locate PaymentGatewayClient for client '{request.Object.Object.Client}'."), ("es", $"No puedo encontrar una clase que defina a PaymentGatewayClient con el client '{request.Object.Object.Client}'."));
                }
                using (var scope = new FlowingOperationContextScope(cl.InnerChannel))
                {
                    sins = await cl.UnwrapRequest(request).ContinueOnScope(scope);
                }
                if (sins.ResultCode != ResultCodes.Ok)
                {
                    return(GenerateError(sins, request.Object.Object.Client));
                }
                if (CallbackImplementation == null)
                {
                    throw new ResultCodeException(ResultCodes.ClientServerError, ("en", "Callback message lost.There is no ICallback implementation"), ("es", "Mensaje del callback pedido. No hay implementacion de ICallback"));
                }
                ClientResponse cr = await func(sins.Response);

                cr.Client = request.Object.Object.Client;
                return(CertificateHelperFactory.Instance.SignClient <ClientSignedResponse, ClientResponse>(cr.Client, cr));
            }
            catch (Exception e)
            {
                sins.PopulateFromException(e, Logger);
                return(GenerateError(sins, request.Object.Object.Client));
            }
        }
コード例 #2
0
        internal async Task <ServerResponse <T> > UnwrapRequest <T>(ServerSignedRequest <T> resp)
        {
            ServerResponse <T> response = new ServerResponse <T>();

            try
            {
                SignatureHelper c = await GetSignatureHelper(resp.Object.Fingerprint, response);

                T obj = c.Verify <ServerSignedRequest <T>, T>(resp);
                return(new ServerResponse <T> {
                    ResultCode = ResultCodes.Ok, Response = obj
                });
            }
            catch (Exception e)
            {
                response.PopulateFromException(e, Logger);
                return(response);
            }
        }
コード例 #3
0
 public async Task <ClientSignedResponse> Payment(ServerSignedRequest <TransactionCallback> transaction)
 {
     return(await SignWrapper(transaction, t => CallbackImplementation.Payment(t)));
 }
コード例 #4
0
 public async Task <ClientSignedResponse> Instrument(ServerSignedRequest <IntrumentCallback> instrument)
 {
     return(await SignWrapper(instrument, i => CallbackImplementation.Instrument(i)));
 }