WxPayData内部含有值为null的字段!

string buff = "";
foreach (KeyValuePairpair in m_values)
{
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();

内容来源与ChatGpt4及newbing和百度:


首先,需要对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的字段了。


祝您问题迎刃而解