Пример #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 == PWPingback.SIGNATURE_VERSION_2 || version == PWPingback.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 == PWPingback.SIGNATURE_VERSION_3)
            {
                return(PWPingback.getHash(baseString, "sha256"));
            }
            else
            {
                return(PWPingback.getHash(baseString, "md5"));
            }
        }
Пример #2
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 (PWPingback.GetApiType() == PWPingback.API_VC)
            {
                signatureParams.AddRange(new string[] { "uid", "currency", "type", "ref" });
            }
            else if (PWPingback.GetApiType() == PWPingback.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"] = PWPingback.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"] = PWPingback.SIGNATURE_VERSION_1.ToString();
            }
            else
            {
                signatureParamsToSign = this.parameters;
            }

            string signatureCalculated = this.CalculateSignature(signatureParamsToSign, PWPingback.GetSecretKey(), Convert.ToInt32(this.parameters["sign_version"]));

            return(signatureCalculated == signature);
        }
Пример #3
0
        /*
         * Get required parameters based on API
         *
         * @return List<string>
         */
        public List <string> GetRequiredParams()
        {
            List <string> requiredParams = new List <string>();

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

            return(requiredParams);
        }