重点:
1.C#和JAVA 的UrlEncode结果不同,不能使用C#自带的UrlEncode。
2.http header 和 body 里的键值对都参与签名,transCode不参与。
3.RSA with SHA256 算出的值byte[] ,转字符串时为16进制字符串,小写。
4.测试环境和生产环境的channelId、ChannelNbr 是一样的,channelId=45、ChannelNbr=03。
5.由于pfx证书文件不方便保存和部署,我这边是把pfx里的私钥导出来,存入数据库,用来签名。公钥证书也是保存的字符串到数据库。
说明:
不能使用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(); }