Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#JSON与Chargify API_C#_Json_Chargify - Fatal编程技术网

C#JSON与Chargify API

C#JSON与Chargify API,c#,json,chargify,C#,Json,Chargify,我是C#新手,我正在尝试转换一个PHP脚本,该脚本在Chargify()中创建订阅。下面是我正在使用的代码。出于测试目的,我硬编码了JSON字符串。经过一天的努力,我终于找到了一个422的错误点,但我一辈子都搞不清楚是什么原因造成的。我读过几篇关于JSON和C的堆栈溢出的文章,但没有任何帮助。希望有更多经验的人能看到这一点,并指出我缺少的东西。提前非常感谢您对此事的了解 [HttpPost] public ActionResult Register(SignupViewModel

我是C#新手,我正在尝试转换一个PHP脚本,该脚本在Chargify()中创建订阅。下面是我正在使用的代码。出于测试目的,我硬编码了JSON字符串。经过一天的努力,我终于找到了一个422的错误点,但我一辈子都搞不清楚是什么原因造成的。我读过几篇关于JSON和C的堆栈溢出的文章,但没有任何帮助。希望有更多经验的人能看到这一点,并指出我缺少的东西。提前非常感谢您对此事的了解

   [HttpPost]
    public ActionResult Register(SignupViewModel regInfo)
    {

        string user = "xxxxxxxxxxxx";
        string password = "x";

        string jsonData = "{\"subscription\":{\"product_handle\":\"149-package\", \"coupon_code\" : \"\", \"customer_attributes\":{\"first_name\":\"Jerry\",\"last_name\":\"Jenkins\",\"email\":\"joe@example.com\"},\"credit_card_attributes\":{\"full_number\":\"1\",\"expiration_month\":\"10\",\"expiration_year\":\"2020\"}, \"components\" : [{\"component_id\" : 80012, \"enabled\" : false}, {\"component_id\" : 80014, \"enabled\" : true}]}}";

        var httpWebRequest = (HttpWebRequest)WebRequest.Create("https://o-asandbox.chargify.com/subscriptions.json");            
        var encodedStr = Convert.ToBase64String(Encoding.Default.GetBytes(string.Format("{0}:{1}", user, password)));            
        var authorizationKey = "Basic" + " " + encodedStr;    // Note: Basic case sensitive

        httpWebRequest.Headers.Add("Authorization", authorizationKey);
        httpWebRequest.Method = "POST";
        httpWebRequest.ContentType = "Content-Type: application/json";

        byte[] byteArray = Encoding.UTF8.GetBytes(jsonData);

        httpWebRequest.ContentLength = byteArray.Length;

        Stream dataStream = httpWebRequest.GetRequestStream();
        dataStream.Write(byteArray, 0, byteArray.Length);
        dataStream.Close();

        var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();

        return View();
    }

您的代码用于发送JSON是正确的。 错误代码422是因为无法处理的数据

在他们的文档中搜索“422” 他们指出,除了错误代码外,还有JSON格式的错误响应,如:

{"errors":[
    "Memo: cannot be blank.",
    "Amount: is not a number."
  ]}

更正提及的结束错误,您应该会没事。

请阅读文档,其中说明当无法创建费用时,将返回
422不可处理实体
,错误详细信息为
备注:不能为空。金额:不是一个数字。金额:必须大于或等于0。此订阅没有资格收取费用。[Gateway response if a Gateway fail]([Your original memo])
问题在于,我不知道如何读取错误消息的正文,直到经过进一步挖掘之后。从那以后,我抓到了这个,看起来我的JSON没有被发送出去,因为错误是说产品是必需的,客户也是必需的。流是否有任何错误导致它无法发送?问题是,在进一步挖掘之后,我才知道如何读取错误消息的主体。从那以后,我抓到了这个,看起来我的JSON没有被发送出去,因为错误是说产品是必需的,客户也是必需的。我对这条流做了什么错事,使它不能被发送出去吗?