Ejemplo n.º 1
0
        /// <summary>
        /// 验签(排序验签)
        /// </summary>
        /// <param name="sArrary">待签名数组</param>
        /// <param name="signedString">签名(支付宝返回sign)</param>
        /// <param name="publickey">支付宝公钥</param>
        /// <param name="input_charset">编码格式</param>
        /// <returns>返回验签结果,true(相同),false(不相同)</returns>
        public static bool Verify(SortedDictionary <string, string> sArrary, string signedString, string publickey,
                                  string input_charset)
        {
            Dictionary <string, string> sPara = Function.FilterPara(sArrary);
            string content = Function.CreateLinkString(sPara);
            bool   b       = RSAFromPkcs8.verify(content, signedString, publickey, input_charset);

            return(b);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 签名
        /// </summary>
        /// <param name="dicArrayPre">待签名字符串</param>
        /// <param name="privatekey">商户私钥</param>
        /// <param name="input_charset">编码格式</param>
        /// <returns>经过UrlEncode转码后的签名字符串</returns>
        public static string BuildMysign(SortedDictionary <string, string> dicArrayPre, string privatekey, string input_charset)
        {
            Dictionary <string, string> dicArray = FilterPara(dicArrayPre);
            string prestr = CreateLinkString(dicArray);
            string mysign = RSAFromPkcs8.sign(prestr, privatekey, input_charset);

            mysign = HttpUtility.UrlEncode(mysign, Encoding.GetEncoding(input_charset)); //此处需要对签名进行Encode,否则出现+号等特殊字符,通过base64转换并post提交给支付宝服务器会丢失,变成空格
            return(mysign);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// 解密
        /// </summary>
        /// <param name="content">待解密字符串</param>
        /// <param name="privateKey">商户私钥</param>
        /// <param name="input_charset">编码格式</param>
        /// <returns>返回明文</returns>
        public static string Decrypt(string content, string privateKey, string input_charset)
        {
            string strDecryptData = RSAFromPkcs8.decryptData(content, privateKey, input_charset);

            return(strDecryptData);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// 验签(不排序 Notify验签用这个)
        /// </summary>
        /// <param name="content">待验签字符串</param>
        /// <param name="signedString">签名(支付宝返回sign)</param>
        /// <param name="publickey">支付宝公钥</param>
        /// <param name="input_charset">编码格式</param>
        /// <returns>返回验签结果,true(相同),false(不相同)</returns>
        public static bool Verify(string content, string signedString, string publickey, string input_charset)
        {
            bool b = RSAFromPkcs8.verify(content, signedString, publickey, input_charset);

            return(b);
        }
Ejemplo n.º 5
0
        /// <summary>
        /// 返回token字符串
        /// </summary>
        /// <param name="strResult">创建订单返回信息</param>
        /// <param name="sellprivatekey">商户私钥</param>
        /// <param name="input_charset">编码格式</param>
        /// <returns>token字符串</returns>
        public static string Res_dataDecrypt(string strResult, string sellprivatekey, string input_charset)
        {
            //分解返回数据 用&拆分赋值给result
            string[] result = strResult.Split('&');

            //提取res_data参数
            string res_data = string.Empty;

            for (int i = 0; i < result.Length; i++)
            {
                string data = result[i];
                if (data.IndexOf("res_data=") >= 0)
                {
                    res_data = data.Replace("res_data=", string.Empty);

                    //解密(用"商户私钥"对"res_data"进行解密)
                    res_data = Function.Decrypt(res_data, sellprivatekey, input_charset);

                    //res_data 赋值 给 result[0]
                    result[i] = "res_data=" + res_data;
                }
            }

            //创建待签名数组
            SortedDictionary <string, string> sd = new SortedDictionary <string, string>();
            int    count  = 0;
            string sparam = "";
            string key    = "";
            string value  = "";

            for (int i = 0; i < result.Length; i++)
            {
                sparam = result[i];
                count  = sparam.IndexOf('=');
                key    = sparam.Substring(0, count);
                value  = sparam.Substring(count + 1, sparam.Length - (count + 1));
                sd.Add(key, value);
            }

            string sign = sd["sign"];

            //配置待签名数据
            Dictionary <string, string> dicData = Function.FilterPara(sd);
            string req_Data = Function.CreateLinkString(dicData);

            //验签,使用支付宝公钥
            bool vailSign = RSAFromPkcs8.verify(req_Data, sign, Config.Alipaypublick, input_charset);

            if (vailSign)//验签通过
            {
                //得到 request_token 的值
                string token = string.Empty;
                try
                {
                    token = Function.GetStrForXmlDoc(res_data, "direct_trade_create_res/request_token");
                }
                catch
                {
                    //提示 返回token值无效
                    return(string.Empty);
                }
                return(token);
            }
            else
            {
                //验签不通过,这里商户自己写逻辑
                return(string.Empty);
            }
        }