public void CreateOutgoingInvoice(IOriginalOutgoingInvoice outgoingInvoice)
        {
            if (null == outgoingInvoice)
            {
                throw new ArgumentNullException(nameof(outgoingInvoice));
            }

            var request = new OriginalInvoice(outgoingInvoice.OrderId, (WmId)outgoingInvoice.ClientIdentifier,
                                              Purse.Parse(outgoingInvoice.StorePurse), (Amount)outgoingInvoice.Amount)
            {
                Initializer = Session.AuthenticationService.ObtainInitializer()
            };

            if (null != outgoingInvoice.Description)
            {
                request.Description = (Description)outgoingInvoice.Description;
            }

            if (null != outgoingInvoice.Address)
            {
                request.Address = (Description)outgoingInvoice.Address;
            }

            if (null != outgoingInvoice.ProtectionPeriod)
            {
                request.Period = outgoingInvoice.ProtectionPeriod.Value;
            }

            request.Expiration = outgoingInvoice.ExpirationPeriod;

            try
            {
                request.Submit();
            }
            catch (WmException exception)
            {
                throw new ExternalServiceException(exception.Message, exception);
            }
        }
示例#2
0
        public override GT.BO.Implementation.BillingSystem.Transfer TopUp(decimal amount)
        {
            if (m_TargetWmId == null)
            {
                return null;
            }

            Transfer t = null;

            amount = amount.ToMoney();

            if (amount > 0)
            {
                t = base.TopUp(amount);
                if (t != null)
                {
                    OriginalInvoice oi = new OriginalInvoice((ulong)t.TransferId,
                                                             m_TargetWmId,
                                                             Purse.Parse(Configuration.Purse),
                                                             Amount.Parse(amount.ToString()),
                                                             new Info(TOPUP, false),
                                                             new Info(ADDRESS, false));

                    GT.BO.Implementation.BillingSystem.WebMoneyTransfer wm = new GT.BO.Implementation.BillingSystem.WebMoneyTransfer();
                    wm.TransferId = t.TransferId;
                    wm.TargetPurse = Configuration.Purse;

                    try
                    {
                        RecentInvoice ri = oi.Submit();
                        if (ri != null)
                        {
                            int? msgId = Dictionaries.Instance.GetWebMoneyMessageIdByRetcodeAndType(0, (int)WebMoneyMessagesTypes.X1);
                            if (msgId.HasValue)
                            {
                                wm.RetCode = msgId.Value;
                            }
                            wm.WmInvoiceId = (int)ri.Id;
                            wm.PayerWmid = ri.SourceWmId.ToString();
                            wm.Description = ri.Description;
                            wm.TransDate = ((DateTime)ri.CreateTime).ToUniversalTime();
                            WebMoneyTransferFacade.Add(wm);
                        }
                    }
                    catch (WmException ex)
                    {
                        string note = null;
                        int? messageId = Dictionaries.Instance.GetWebMoneyMessageIdByRetcodeAndType(ex.Number, (int)WebMoneyMessagesTypes.X1);
                        if (messageId != null)
                        {
                            wm.RetCode = messageId.Value;
                            wm.Description = ex.Message;
                            note = Dictionaries.Instance.GetWebMoneyMessageById(messageId.Value);
                        }
                        else
                        {
                            wm.Description = String.Format("retcode = {0}; {1}", ex.Number, ex.Message);
                            note = Dictionaries.Instance.GetWebMoneyDefaultSystemErrorMessage();
                        }

                        WebMoneyTransferFacade.Add(wm);
                        BillingSystemFacade.RefuseTransfer(t.TransferId, note);
                    }
                }
            }

            return t;
        }