public override PublicOrder CreateOrder(PublicOrderContext publicOrderContext, PaymentDataHandler paymentHandler)
        {
            var newOrder = this.PrepareOrder(publicOrderContext, paymentHandler);

            this.AddCustomAttributes(newOrder);

            string token = string.Empty;
            var    resellerRootDomain = this.GetResellerRootDomain();

            var createdOrder = BillingApi.CreateOrderWithLoginToken(newOrder, resellerRootDomain, out token);

            if (createdOrder == null)
            {
                throw new InvalidOperationException("Order could not be created.");
            }

            urlProvider.SuccessUrl = GetTokenLoginUrl(createdOrder.Email, token);

            return(createdOrder);
        }
        public void ListingAResource()
        {
            // an example: legacy_listing_resources
            // cloak

            /*
             * // uncloak
             * using Mbed.Cloud.Common;
             * using MbedCloudSDK.Billing.Api;
             * // cloak
             */
            // uncloak
            var billingApi = new BillingApi(new Config());

            foreach (var quotaHistory in billingApi.GetQuotaHistory())
            {
                Console.WriteLine($"Quota change reason: {quotaHistory.Reason}, delta: {quotaHistory.Delta}");
            }
            // end of example
        }
    /// <summary>
    /// 購入通信
    /// </summary>
    private void CallBuyApi(string productId, string receipt, Action <UserBillingData> onSuccess, Action onFailed)
    {
#if false
        //レシート出力
        System.IO.File.WriteAllText(Application.persistentDataPath + "/iap.log", receipt);
#endif

        BillingApi.CallBuyApi(
            productId: productId,
            receipt: receipt,
            onCompleted: (userBillingData) =>
        {
            //課金完了
            this.iap.ConfirmPendingPurchase(productId);
            onSuccess?.Invoke(userBillingData);
        },
            onError: (errorType, errorCode) =>
        {
            if (errorType == BillingApi.BillingBuyErrorType.GooglePurchaseState && errorCode == (int)BillingApi.GoogleBuyResult.PurchaseState.Canceled)
            {
                //キャンセル済みレシートなのでペンディング解消する
                this.iap.ConfirmPendingPurchase(productId);
            }
            else if (errorType == BillingApi.BillingBuyErrorType.ErrorCodeType && errorCode == (int)ErrorCode.AlreadyCheckReceiptId)
            {
                //すでにアイテム付与済みのレシートなのでペンディング解消する
                this.iap.ConfirmPendingPurchase(productId);
            }

            //エラーコード通知
            var dialog  = SharedUI.Instance.ShowSimpleDialog(true);
            var content = dialog.SetAsMessageDialog(string.Format("ERROR_TYPE : {0}\nERROR_CODE : {1}", (int)errorType, errorCode));
            content.buttonGroup.buttons[0].onClick = () =>
            {
                dialog.Close();
                dialog.onClose = onFailed;
            };
        });
    }
 public void Init()
 {
     instance = new BillingApi();
 }
        /// <inheritdoc />
        public Cart CalculatePricing(Cart cart)
        {
            var publicOrder = CreateBasicOrder();

            var publicOrderItems = new List <PublicOrderItem>();
            var itemNo           = 0;

            foreach (var cartItem in cart.CartItems)
            {
                var renewalPeriodId = renewalPeriodProvider.GetRenewalPeriodId(cartItem);

                publicOrderItems.Add(new PublicOrderItem
                {
                    ItemNumber      = cartItem.ArticleNumber,
                    RenewalPeriodId = renewalPeriodId,
                    Quantity        = cartItem.Quantity,
                    ItemNo          = itemNo++
                });
            }
            publicOrder.OrderItems = publicOrderItems.ToArray();

            var publicOrderCustomData = new List <PublicOrderCustomData>();

            if (!string.IsNullOrEmpty(cart.CampaignCode))
            {
                publicOrderCustomData.Add(new PublicOrderCustomData
                {
                    Name  = "CampaignCode",
                    Value = cart.CampaignCode
                });
            }
            if (cart.CustomAttributes != null)
            {
                foreach (Core.CustomAttribute attr in cart.CustomAttributes)
                {
                    publicOrderCustomData.Add(new PublicOrderCustomData {
                        Name = attr.Name, Value = attr.Value
                    });
                }
            }

            publicOrder.CustomData = publicOrderCustomData.ToArray();

            var calculatedPublicOrder = BillingApi.CalculateOrder(publicOrder);

            IEnumerable <Tax> taxes = new List <Tax>();

            if (calculatedPublicOrder.Taxes != null && calculatedPublicOrder.Taxes.Count() > 0)
            {
                taxes = calculatedPublicOrder.Taxes.Select(t => new Tax(t.Name, t.Total, t.Percent));
            }

            var subtotal = this.pricesIncludeVat
                ? calculatedPublicOrder.Total
                : calculatedPublicOrder.Subtotal;

            cart.SetPricing(subtotal, calculatedPublicOrder.Total, taxes);

            var priceCalculator = new PriceCalculator(this.pricesIncludeVat, this.inclusiveTaxCalculationType);

            foreach (var cartItem in cart.CartItems)
            {
                PublicOrderItem calculatedItem;
                var             calcOrderItems = calculatedPublicOrder.OrderItems;

                if (cartItem.RenewalPeriod == null)
                {
                    calculatedItem = calcOrderItems.First(x =>
                                                          x.ItemNumber == cartItem.ArticleNumber &&
                                                          x.RenewalPeriod == 0);
                }
                else
                {
                    calculatedItem = calcOrderItems.First(x =>
                                                          x.ItemNumber == cartItem.ArticleNumber &&
                                                          x.RenewalPeriod == cartItem.RenewalPeriod.Period &&
                                                          x.RenewalPeriodUnit.ToUpper() == cartItem.RenewalPeriod.Unit);
                }

                IEnumerable <Tax> itemTaxes = new List <Tax>();

                if (calculatedItem.Taxes != null && calculatedItem.Taxes.Count() > 0)
                {
                    itemTaxes = calculatedItem.Taxes.Select(t => new Tax(t.Name, calculatedItem.TaxAmount, t.Percent));
                }

                var price    = priceCalculator.CalculatePrice(calculatedItem.Price, calculatedItem.Taxes);
                var discount = priceCalculator.CalculatePrice(calculatedItem.Discount, calculatedItem.Taxes);

                cartItem.SetPricing(price, discount, itemTaxes);
                cartItem.Quantity = calculatedItem.Quantity;
            }

            return(cart);
        }
        public void GetBill_returns_correct_results()
        {
            // arrange
            var mockWebRequestHelper = new Mock<IWebRequestHelper>(MockBehavior.Strict);

            string content;

            // using the sample bill downloaded from:
            // http://safe-plains-5453.herokuapp.com/bill.json
            using (var streamReader = File.OpenText("bill.json"))
            {
                content = streamReader.ReadToEnd();
            }

            var requestResult = new RequestResult
            {
                HttpStatusCode = HttpStatusCode.OK,
                Content = content
            };

            mockWebRequestHelper
                .Setup(x => x.GetRequestResult(It.IsAny<string>(), It.IsAny<string>()))
                .Returns(requestResult);

            var billingApi = new BillingApi(mockWebRequestHelper.Object);

            var call1 = new Call
            {
                Called = "07716393769",
                Cost = 2.13m,
                Duration = new TimeSpan(0, 23, 3)
            };

            var call2 = new Call
            {
                Called = "02074351359",
                Cost = 2.13m,
                Duration = new TimeSpan(0, 23, 3)
            };

            var calls = Enumerable.Repeat(call1, 18).Concat(Enumerable.Repeat(call2, 10)).ToList();

            var expectedBill = new Bill
            {
                Total = 136.03m,
                Statement = new Statement
                {
                    Due = new DateTime(2015, 1, 25),
                    Generated = new DateTime(2015, 1, 11),
                    Period = new Period
                    {
                        From = new DateTime(2015, 1, 26),
                        To = new DateTime(2015, 2, 25)
                    }
                },
                Package = new Package
                {
                    Subscriptions = new List<Subscription>
                    {
                        new Subscription
                        {
                            Cost = 50.00m,
                            Name = "Variety with Movies HD",
                            Type = Subscription.SubscriptionType.Tv
                        },
                        new Subscription
                        {
                            Cost = 5.00m,
                            Name = "Sky Talk Anytime",
                            Type = Subscription.SubscriptionType.Talk
                        },
                        new Subscription
                        {
                            Cost = 16.40m,
                            Name = "Fibre Unlimited",
                            Type = Subscription.SubscriptionType.Broadband
                        }
                    },
                    Total = 71.40m
                },
                CallCharges = new CallCharges
                {
                    Calls = calls,
                    Total = 59.64m
                },
                SkyStore = new SkyStore
                {
                    Rentals = new List<Programme>
                    {
                        new Programme
                        {
                            Title = "50 Shades of Grey",
                            Cost = 4.99m
                        }
                    },
                    BuyAndKeep = new List<Programme>
                    {
                        new Programme
                        {
                            Title = "That's what she said",
                            Cost = 9.99m
                        },
                        new Programme
                        {
                            Title = "Broke back mountain",
                            Cost = 9.99m
                        }
                    },
                    Total = 24.97m
                }
            };

            // act
            var result = billingApi.GetBill();

            // assert
            result.ShouldBeEquivalentTo(expectedBill);
        }
Exemple #7
0
    /// <summary>
    /// Start
    /// </summary>
    private void Start()
    {
        Queue <Action> queue = new Queue <Action>();

        //通信で課金商品情報を取得
        queue.Enqueue(() => BillingApi.CallListApi(queue.Dequeue()));

        //IAP初期化
        queue.Enqueue(() =>
        {
            this.iap.Initialize(
                onSuccess: () =>
            {
                //次の処理へ
                queue.Dequeue().Invoke();
            },
                onFailed: () =>
            {
                //TODO:初期化エラー。ダイアログ出してHOMEにでも戻すか。
                queue.Dequeue().Invoke();
            }
                );
        });

        //通信で商品情報を取得
        queue.Enqueue(() =>
        {
            ShopApi.CallNowShopApi((tShops) =>
            {
                //ショップページ情報初期化
                this.InitPageData(tShops);

                //次の処理へ
                queue.Dequeue().Invoke();
            });
        });

        //リソースの読み込み
        queue.Enqueue(() =>
        {
            // Coin id 修得
            this.coinId = Masters.ShopItemDB.GetList()
                          .Where(x => x.itemType == (uint)ItemType.Coin)
                          .Select(x => x.id)
                          .ToList();

            // Gem id 修得
            this.gemId = Masters.BillingDB.GetList()
                         .Select(x => x.id)
                         .ToList();

            //ペンディング数通知バッジ
            int pendingProductsCount = this.iap.GetPengingProductsCount();
            this.pendingCountBadge.SetActive(pendingProductsCount > 0);
            this.pendingCountText.text = pendingProductsCount.ToString();

            //タブセットアップ
            this.mainTabGroup.Setup();
            this.subTabGroup.Setup();

            //おすすめ商品が無い場合
            if (this.pageDataList[(int)PageType.Recommend].products.Length == 0)
            {
                //おすすめタブをグレーアウト
                var recommendTab = this.mainTabGroup.Find(x => (x as ShopMainTab).tabType == PageType.Recommend);
                recommendTab.SetGrayout(true);

                if (this.firstOpenPage == PageType.Recommend)
                {
                    //初期ページとしておすすめは開けないのでコインに変更
                    this.firstOpenPage = PageType.Coin;
                }
            }

            //リソースロード
            this.Load(queue.Dequeue());
        });

        //リソースロード完了時
        queue.Enqueue(() =>
        {
            //ローディング表示消す
            SharedUI.Instance.HideSceneChangeAnimation();
            //BGM再生
            SoundManager.Instance.PlayBgm(BgmName.HOME);
            //タブ開く
            this.OpenMainTab(this.firstOpenPage);
        });

        queue.Dequeue().Invoke();
    }
Exemple #8
0
        public Instance AddModuleInstance(ModuleEnum module, InstanceConfiguration instanceConfiguration)
        {
            var additionalProperties = instanceConfiguration.GetHashtable();
            var config = new Config(
                apiKey: instanceConfiguration.ApiKey,
                host: instanceConfiguration.Host)
            {
                AutostartNotifications = instanceConfiguration.AutostartDaemon,
                ForceClear             = true,
                LogLevel = LogLevel.ALL,
            };

            var instance = new Instance {
                Id = Guid.NewGuid().ToString(), Module = module, CreatedAt = DateTime.Now
            };

            switch (module)
            {
            case ModuleEnum.AccountManagementApi:
                var accountApi = new AccountManagementApi(config);
                Instances.Add(instance, accountApi);
                break;

            case ModuleEnum.CertificatesApi:
                var certApi = new CertificatesApi(config);
                Instances.Add(instance, certApi);
                break;

            case ModuleEnum.ConnectApi:
                var connectApi = new ConnectApi(config);
                Instances.Add(instance, connectApi);
                break;

            case ModuleEnum.DeviceDirectoryApi:
                var deviceApi = new DeviceDirectoryApi(config);
                Instances.Add(instance, deviceApi);
                break;

            case ModuleEnum.StubAPI:
                var stubApi = new StubApi(config);
                Instances.Add(instance, stubApi);
                break;

            case ModuleEnum.UpdateApi:
                var updateApi = new UpdateApi(config);
                Instances.Add(instance, updateApi);
                break;

            case ModuleEnum.EnrollmentApi:
                var enrollmentApi = new EnrollmentApi(config);
                Instances.Add(instance, enrollmentApi);
                break;

            case ModuleEnum.BootstrapApi:
                var bootstrapApi = new BootstrapApi(config);
                Instances.Add(instance, bootstrapApi);
                break;

            case ModuleEnum.BillingApi:
                var billingApi = new BillingApi(config);
                Instances.Add(instance, billingApi);
                break;
            }

            return(instance);
        }