You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决C#调用支付API时出现的400‘存在验证错误’问题?

调用支付API出现400验证错误的排查方案

以下是针对你遇到问题的几个排查方向和解决方法:

  • 数据类型不匹配
    支付API通常要求amount为数值类型,但你的代码里将其定义为string并传入字符串"1000"。如果Postman中传的是数字1000,就会导致代码请求的格式不符合API验证规则。
    解决:把Root类的amount字段改为decimal或int类型,赋值时直接用数值(比如1000)而非字符串。

  • RestSharp请求体处理不当
    手动用Newtonsoft序列化对象后通过AddParameter添加请求体,可能导致RestSharp对JSON进行额外编码,或者格式处理出错。RestSharp本身支持直接序列化对象,不需要手动处理。
    解决:删掉手动序列化的代码,用request.AddJsonBody(rootObj)替代AddParameter,让RestSharp自动完成JSON序列化和请求头设置。

  • 字段值有效性问题

    • 检查EmailV变量:如果它是空值、格式错误(比如缺少@符号),会触发API的验证错误。
    • 确认transaction_ref是否唯一:很多支付API要求交易号不能重复,如果你多次用同一个transaction_ref发起请求,会被拦截。可以用Guid.NewGuid().ToString()生成唯一值。
    • 验证callback_url:确保它符合API要求,比如必须是HTTPS链接、没有特殊字符等。
  • 冗余请求头导致冲突
    使用AddJsonBody时,RestSharp会自动添加Content-Type: application/json请求头,手动添加可能导致格式冲突,建议移除手动设置的该请求头。

修改后的示例代码

public class Root
{          
    public decimal amount { get; set; } // 改为数值类型
    public string email { get; set; }
    public string currency { get; set; }
    public string initiate_type { get; set; }
    public string transaction_ref { get; set; }
    public string callback_url { get; set; }
}

var client = new RestClient("https://sandbox-api-d.squadco.com/transaction/initiate");

var rootObj = new Root
{
    amount = 1000, // 直接传入数值
    email = EmailV,
    currency = "NGN",
    initiate_type = "inline",
    transaction_ref = Guid.NewGuid().ToString("N"), // 生成唯一交易参考号
    callback_url = "https://samplesite.com"                        
};

var request = new RestRequest();
request.Method = Method.Post;
request.AddHeader("Authorization", "sandbox_sk_3fae7c45922315aa8cb2a16db028f50a596d5fbdf351");
request.AddJsonBody(rootObj); // 自动处理JSON序列化和Content-Type
RestResponse response = client.Execute(request);

内容的提问来源于stack exchange,提问作者Emeka Okoye

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 17:01:23