Exemplo n.º 1
0
        /*
         * Build signature for the pingback received
         *
         * @param Dictionary<string, string> parameters
         * @param string secret Paymentwall Secret Key
         * @param int version Paymentwall Signature Version
         * @return string
         */
        public string calculateSignature(Dictionary <string, string> signatureParamsToSign, string secret, int version)
        {
            string baseString = "";

            signatureParamsToSign.Remove("sig");

            if (version == Paymentwall_Pingback.SIGNATURE_VERSION_2 || version == Paymentwall_Pingback.SIGNATURE_VERSION_3)
            {
                signatureParamsToSign = signatureParamsToSign.OrderBy(d => d.Key, StringComparer.Ordinal).ToDictionary(d => d.Key, d => d.Value);
            }

            foreach (KeyValuePair <string, string> kvp in signatureParamsToSign)
            {
                baseString += kvp.Key + "=" + kvp.Value;
            }
            baseString += secret;

            if (version == Paymentwall_Pingback.SIGNATURE_VERSION_3)
            {
                return(Paymentwall_Pingback.getHash(baseString, "sha256"));
            }
            else
            {
                return(Paymentwall_Pingback.getHash(baseString, "md5"));
            }
        }
Exemplo n.º 2
0
        /**
         * @return bool
         */
        public bool isParametersValid()
        {
            int           errorsNumber   = 0;
            List <string> requiredParams = new List <string>();

            if (Paymentwall_Pingback.getApiType() == Paymentwall_Pingback.API_VC)
            {
                requiredParams.AddRange(new string[] { "uid", "currency", "type", "ref", "sig" });
            }
            else if (Paymentwall_Pingback.getApiType() == Paymentwall_Pingback.API_GOODS)
            {
                requiredParams.AddRange(new string[] { "uid", "goodsid", "type", "ref", "sig" });
            }
            else
            { //API_CART
                requiredParams.AddRange(new string[] { "uid", "goodsid[0]", "type", "ref", "sig" });
            }

            foreach (string field in requiredParams)
            {
                if (!this.parameters.ContainsKey(field) || String.IsNullOrWhiteSpace(this.parameters[field]))
                {
                    this.appendToErrors("Parameter " + field + " is missing");
                    errorsNumber++;
                }
            }

            return(errorsNumber == 0);
        }
Exemplo n.º 3
0
        /**
         * @return bool
         */
        public bool isSignatureValid()
        {
            string signature = "";
            Dictionary <string, string> signatureParamsToSign = new Dictionary <string, string>();

            if (this.parameters.ContainsKey("sig"))
            {
                signature = this.parameters["sig"];
            }
            else
            {
                signature = null;
            }

            List <string> signatureParams = new List <string>();

            if (Paymentwall_Pingback.getApiType() == Paymentwall_Pingback.API_VC)
            {
                signatureParams.AddRange(new string[] { "uid", "currency", "type", "ref" });
            }
            else if (Paymentwall_Pingback.getApiType() == Paymentwall_Pingback.API_GOODS)
            {
                signatureParams.AddRange(new string[] { "uid", "goodsid", "slength", "speriod", "type", "ref" });
            }
            else
            { //API_CART
                signatureParams.AddRange(new string[] { "uid", "goodsid", "type", "ref" });
                this.parameters["sign_version"] = Paymentwall_Pingback.SIGNATURE_VERSION_2.ToString();
            }

            if (!this.parameters.ContainsKey("sign_version")) //Check if signature version 1
            {
                foreach (string field in signatureParams)
                {
                    if (this.parameters[field] != null)
                    {
                        signatureParamsToSign.Add(field, this.parameters[field]);
                    }
                    else
                    {
                        signatureParamsToSign.Add(field, null);
                    }
                }
                this.parameters["sign_version"] = Paymentwall_Pingback.SIGNATURE_VERSION_1.ToString();
            }
            else
            {
                signatureParamsToSign = this.parameters;
            }

            string signatureCalculated = this.calculateSignature(signatureParamsToSign, Paymentwall_Pingback.getSecretKey(), Convert.ToInt32(this.parameters["sign_version"]));

            return(signatureCalculated == signature);
        }