예제 #1
0
        /**
         * @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;
            }
        }
예제 #2
0
        /*
         * 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, "&"));
        }