/** * @param string productId your internal product ID, e.g. product1 * @param float amount product price, e.g. 9.99 * @param string currencyCode ISO currency code, e.g. USD * @param string name product name * @param string productType product type, Paymentwall_Product::TYPE_SUBSCRIPTION for recurring billing, or Paymentwall_Product::TYPE_FIXED for one-time payments * @param int periodLength product period length, e.g. 3. Only required if product type is subscription * @param string periodType product period type, e.g. Paymentwall_Product::PERIOD_TYPE_MONTH. Only required if product type is subscription * @param bool recurring if the product recurring * @param Paymentwall_Product trialProduct trial product, product type should be subscription, recurring should be True */ public PWProduct(string productId, float amount = 0.0f, string currencyCode = null, string name = null, string productType = PWProduct.TYPE_FIXED, int periodLength = 0, string periodType = null, bool recurring = false, PWProduct trialProduct = null) { this.productId = productId; this.amount = amount; this.currencyCode = currencyCode; this.name = name; this.productType = productType; this.periodLength = periodLength; this.periodType = periodType; this.recurring = recurring; if (productType == PWProduct.TYPE_SUBSCRIPTION && this.recurring == true) { this.trialProduct = trialProduct; } else { this.trialProduct = null; } }
/* * Return URL for the widget * * @return string */ public string GetUrl() { Dictionary <string, string> parameters = new Dictionary <string, string>(); parameters["key"] = PWWidget.GetAppKey(); parameters["uid"] = this.userId; parameters["widget"] = this.widgetCode; int productsNumber = this.products.Count; if (PWWidget.GetApiType() == PWWidget.API_GOODS) { if (productsNumber > 0) { if (productsNumber == 1) { PWProduct product = this.products[0]; PWProduct postTrialProduct = null; if (product.GetTrialProduct() is PWProduct) { postTrialProduct = product; product = product.GetTrialProduct(); } parameters.Add("amount", product.GetAmount().ToString()); parameters.Add("currencyCode", product.GetCurrencyCode()); parameters.Add("ag_name", product.GetName()); parameters.Add("ag_external_id", product.GetId()); parameters.Add("ag_type", product.GetProductType()); if (product.GetProductType() == PWProduct.TYPE_SUBSCRIPTION) { parameters.Add("ag_period_length", product.GetPeriodLength().ToString()); parameters.Add("ag_period_type", product.GetPeriodType()); if (product.IsRecurring()) { parameters.Add("ag_recurring", (Convert.ToInt32(product.IsRecurring())).ToString()); if (postTrialProduct != null) { parameters.Add("ag_trial", "1"); parameters.Add("ag_post_trial_external_id", postTrialProduct.GetId()); parameters.Add("ag_post_trial_period_length", postTrialProduct.GetPeriodLength().ToString()); parameters.Add("ag_post_trial_period_type", postTrialProduct.GetPeriodType()); parameters.Add("ag_post_trial_name", postTrialProduct.GetName()); parameters.Add("post_trial_amount", postTrialProduct.GetAmount().ToString()); parameters.Add("post_trial_currencyCode", postTrialProduct.GetCurrencyCode().ToString()); } } } } //end if (productNumber == 1) else { //TODO: Paymentwall_Widget.appendToErrors('Only 1 product is allowed in flexible widget call'); } } //end if (productNumber > 0) } else if (PWWidget.GetApiType() == PWWidget.API_CART) { int index = 0; foreach (PWProduct product in this.products) { parameters.Add("external_ids[" + index.ToString() + "]", product.GetId()); if (product.GetAmount() != -1f) { parameters.Add("prices[" + index.ToString() + "]", product.GetAmount().ToString()); } if (product.GetCurrencyCode() != null) { parameters.Add("currencies[" + index.ToString() + "]", product.GetCurrencyCode()); } index++; } index = 0; } int signatureVersion = this.GetDefaultSignatureVersion(); parameters.Add("sign_version", Convert.ToString(signatureVersion)); if (this.extraParams.ContainsKey("sign_version")) { parameters["sign_version"] = this.extraParams["sign_version"]; signatureVersion = Convert.ToInt32(this.extraParams["sign_version"]); } parameters = MergeDictionaries(parameters, extraParams); parameters["sign"] = PWWidget.CalculateSignature(parameters, PWWidget.GetSecretKey(), signatureVersion); return(PWWidget.BASE_URL + "/" + this.BuildController(this.widgetCode) + "?" + this.BuildQueryString(parameters, "&")); }