最近编写微信企业付款到银行卡
总是返回如下信息:
<xml>
<return_code><![CDATA[SUCCESS]]></return_code>
<return_msg><![CDATA[参数错误,请检查参数]]></return_msg>
<result_code><![CDATA[FAIL]]></result_code>
<err_code><![CDATA[SYSTEMERROR]]></err_code>
<err_code_des><![CDATA[解密真实姓名或银行卡号出错]]></err_code_des>
<mch_id><![CDATA[XXXXXXXX]]></mch_id>
</xml>调用公钥接口也成功返回公钥值PublicKey
开发环境 WIN2003SERVER .NET 4.0 C# 。
加密部分代码:
public string RSAEncrypt(string PublicKey, string EncryptString)
{
PublicKey = @"<RSAKeyValue><Modulus>"+PublickKey+"</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>";
byte[] P;
byte[] C;
string R;
System.Security.Cryptography.RSACryptoServiceProvider rsa = new System.Security.Cryptography.RSACryptoServiceProvider();
rsa.FromXmlString(PublicKey);
P = (new UnicodeEncoding()).GetBytes(EncryptString);
C = rsa.Encrypt(PlainTextBArray, false);
R = Convert.ToBase64String(C);
return Result;
}有调试通过的朋友吗?希望赐教,不胜感激。
总是返回如下信息:
<xml>
<return_code><![CDATA[SUCCESS]]></return_code>
<return_msg><![CDATA[参数错误,请检查参数]]></return_msg>
<result_code><![CDATA[FAIL]]></result_code>
<err_code><![CDATA[SYSTEMERROR]]></err_code>
<err_code_des><![CDATA[解密真实姓名或银行卡号出错]]></err_code_des>
<mch_id><![CDATA[XXXXXXXX]]></mch_id>
</xml>调用公钥接口也成功返回公钥值PublicKey
开发环境 WIN2003SERVER .NET 4.0 C# 。
加密部分代码:
public string RSAEncrypt(string PublicKey, string EncryptString)
{
PublicKey = @"<RSAKeyValue><Modulus>"+PublickKey+"</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>";
byte[] P;
byte[] C;
string R;
System.Security.Cryptography.RSACryptoServiceProvider rsa = new System.Security.Cryptography.RSACryptoServiceProvider();
rsa.FromXmlString(PublicKey);
P = (new UnicodeEncoding()).GetBytes(EncryptString);
C = rsa.Encrypt(PlainTextBArray, false);
R = Convert.ToBase64String(C);
return Result;
}有调试通过的朋友吗?希望赐教,不胜感激。
<xml>
<err_code>SYSTEMERROR</err_code>
<err_code_des>解密真实姓名或银行卡号出错</err_code_des>
<result_code>FAIL</result_code>
<return_code>SUCCESS</return_code>
<return_msg>参数错误,请检查参数</return_msg>
<mch_id>1444739402</mch_id>
</xml>
java的rsa加密结果始终固定,不做动态填充,c#的做动态填充,每次加密结果都在变化。
所以,java的rsa私钥加密我真的不知道和md5有什么区别。算了不聊这个,就跟你说,c#和java的rsa是对接不上的。
解决方案有:
1、用java、php等其他软件写个中间件,c#调用。
2、java服务器端更换加密方式,变为动态。
3、换md5接口。
我发现是Base64 编码的问题,用Java自带的Base64的编码会有这个问题,这个代码里面的Base64应该是修改过的,换成这个Base64接口就成功了!