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); }
/// <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(); }
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); }