你好,这里是我所有的加密,发送XML,post发送函数的代码,一直报签名错误,实在是不明白,我签名字符串在网页上的验证工具都是通过的。麻烦看看 谢谢!
谢谢!
string stringA =
"appid=wxa399bf4e1c381af6&body=JSAPICS&device_info=WEB&mch_id=1548163301&nonce_str=463522714640538891";
string stringSignTemp = stringA +
"&key=wzszyy1923lhqyq0625xxgck15231336";
string aa = EncryptWithMD5(stringSignTemp);
string sa = "<xml>"
+ "<appid>wxa399bf4e1c381af6</appid>"
+ "<body>JSAPICS</body>"
+ "<mch_id>1548163301</mch_id>"
+ "<device_info>WEB</device_info>"
+ "<nonce_str>463522714640538891</nonce_str>"
+ "<notify_url>pay.guahao.com</notify_url>"
+
"<openid>ox6DtjoDOqR4Lc_icAhcnrvCG-YQ</openid>"
+ "<out_trade_no>1415659990</out_trade_no>"
+ "<total_fee>1</total_fee>"
+ "<trade_type>JSAPI</trade_type>"
+ "<sign_type>MD5</sign_type>"
+ "<sign>DEB073245D4B821089CCFE3B3713745C</sign>"
+ "</xml>";
string tt = Post(sa, "https://api.mch.weixin.qq.com/pay/unifiedorder",
false, 6);
public static string Post(string xml, string url, bool isUseCert, int
timeout)
{
System.GC.Collect();//垃圾回收,回收没有正常关闭的http连接
string result = "";//返回结果
HttpWebRequest request = null;
HttpWebResponse response = null;
Stream reqStream = null;
try
{
//设置最大连接数
ServicePointManager.DefaultConnectionLimit = 200;
//设置https验证方式
//if (url.StartsWith("https",
StringComparison.OrdinalIgnoreCase))
//{
// ServicePointManager.ServerCertificateValidationCallback
=
// new
RemoteCertificateValidationCallback(CheckValidationResult);
//}
/**************************************************************
* 下面设置HttpWebRequest的相关属性
*
************************************************************/
request = (HttpWebRequest)WebRequest.Create(url);
//request.UserAgent = USER_AGENT;
request.Method = "POST";
request.Timeout = timeout * 1000;
//设置代理服务器
//WebProxy proxy = new WebProxy();
//定义一个网关对象
//proxy.Address = new Uri(WxPayConfig.PROXY_URL);
//网关服务器端口:端口
//request.Proxy = proxy;
//设置POST的数据类型和长度
request.ContentType = "text/xml";
byte[] data = System.Text.Encoding.UTF8.GetBytes(xml);
request.ContentLength = data.Length;
//是否使用证书
if (isUseCert)
{
}
//往服务器写入数据
reqStream = request.GetRequestStream();
reqStream.Write(data, 0, data.Length);
reqStream.Close();
//获取服务端返回
response = (HttpWebResponse)request.GetResponse();
//获取服务端返回数据
StreamReader sr = new
StreamReader(response.GetResponseStream(), Encoding.UTF8);
result = sr.ReadToEnd().Trim();
sr.Close();
}
catch (System.Threading.ThreadAbortException e)
{
}
catch (WebException e)
{
}
catch (Exception e)
{
//Log.Error("HttpService", e.ToString());
//throw new WxPayException(e.ToString());
}
finally
{
//关闭连接和流
if (response != null)
{
response.Close();
}
if (request != null)
{
request.Abort();
}
}
return result;
}
public static string EncryptWithMD5(string source)
{
var md5 = MD5.Create();
var bs = md5.ComputeHash(Encoding.UTF8.GetBytes(source));
var sb = new StringBuilder();
foreach (byte b in bs)
{
sb.Append(b.ToString("x2"));
}
//所有字符转为大写
return sb.ToString().ToUpper();
}
你好,这里是我所有的加密,发送XML,post发送函数的代码,一直报签名错误,实在是不明白,我签名字符串在网页上的验证工具都是通过的。
网友回复
1、签名sign字段是动态变化的,根据随机字符串而动态生成的。
2、nonce_str参数也是要随机变化的。
3、认真,静下心阅读官方文档
【微信支付】JSAPI支付开发者文档
https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1