string buff = "";
foreach (KeyValuePair
{
if (pair.Value == null)
{
Log.Error(this.GetType().ToString(), "WxPayData内部含有值为null的字段!");
throw new WxPayException("WxPayData内部含有值为null的字段!");
}
if (pair.Key != "sign" && pair.Value.ToString() != "")
{
buff += pair.Key + "=" + pair.Value + "&";
}
}
buff = buff.Trim('&');
return buff;
然后呢,你的问题是什么?这提示信息不就是你自己写的吗
我查一下,微信支付签名,这个每个值多有
string str = ToUrl();
//在string后加入API KEY
str += "&key=" + WxPayConfig.KEY; 这个值多有。
//MD5加密
var md5 = System.Security.Cryptography.MD5.Create();
var bs = md5.ComputeHash(Encoding.UTF8.GetBytes(str));
var sb = new StringBuilder();
foreach (byte b in bs)
{
sb.Append(b.ToString("x2"));
}
//所有字符转为大写
return sb.ToString().ToUpper();
首先,需要对WxPayData类进行修改,将值为null的字段从字典中删除。可以在ToString()方法中添加以下代码:
foreach (var key in m_values.Keys.ToList()) {
if (m_values[key] == null) {
m_values.Remove(key);
}
}
这样就可以避免在输出WxPayData对象时出现值为null的字段。
另外,也可以在设置WxPayData对象时,判断值是否为null,如果为null则不加入字典中,例如:
public void SetValue(string key, object value) {
if (value != null) {
m_values[key] = value;
}
}
这样就可以确保WxPayData对象中不会含有值为null的字段了。