河南农信移动支付解析

重点:

1.C#和JAVA 的UrlEncode结果不同,不能使用C#自带的UrlEncode。

2.http header 和 body 里的键值对都参与签名,transCode不参与。

 3.RSA with SHA256 算出的值byte[] ,转字符串时为16进制字符串,小写。

 4.测试环境和生产环境的channelId、ChannelNbr 是一样的,channelId=45、ChannelNbr=03。

 

说明:

不能使用C#自带的UrlEncode,C#  JAVA urlencode  结果不兼容。C# 需要encode的部分是小写。JAVA 需要encode的部分是大写。

使用下面这个方法处理。

/// <summary>
        /// java UrlEncode 特点是:需要UrlEncode字符,UrlEncode后要大写。
        /// </summary>
        /// <param name="str"></param>
        /// <param name="charSet"></param>
        /// <returns></returns>
        public static string CSharpToJavaUrlEncode(string str,string charSet)
        {
            Encoding enc = Encoding.GetEncoding(charSet);

            StringBuilder stringBuilder = new StringBuilder();
            for (int i = 0; i < str.Length; i++)
            {
                string t = str[i].ToString();
                string k = HttpUtility.UrlEncode(t, enc);
                if (t == k)
                {
                    stringBuilder.Append(t);
                }
                else
                {
                    stringBuilder.Append(k.ToUpper());
                }
            }
            return stringBuilder.ToString();
        }

 

上一篇:.NET Core(C#)html和url字符串编解码方法(HtmlDecode、HtmlEncode、UrlDecode、UrlEncode)


下一篇:python的post 表单