簡體   English   中英

將JSON添加到Parse.Cloud.httpRequest“application / x-www-form-urlencoded”

[英]Add JSON to Parse.Cloud.httpRequest “application/x-www-form-urlencoded”

我一直在嘗試將Stripe的托管帳戶實施到我的雲代碼功能中。 到目前為止,我設法使其工作,但現在我遇到了一個我似乎無法解決的問題。

歸結為:使用'content_type': 'application/x-www-form-urlencoded'如何發送JSON?

由於Stripe期望使用form-urlencoded,因此無法將content_type更改為application/JSON 我試圖將JSON字符串化,但是當我這樣做時,Stripe也會抱怨。 它期望一個'哈希',我假設它是一個JSON。

是否可以url編碼JSON,以便我可以發送它,同時仍然將content_type設置為form-urlencoded?

Parse說我的當前代碼不起作用:

未捕獲錯誤:無法形成編碼對象

var secret_key = stripeKeys.stripeSecretKey;
var cardTokenId = "tok_...";
var country = "BE";
var currency = "EUR";
var email = "test@test.org";
var firstName = "test";
var lastName = "tester";
var dobDay = 1;
var dobMonth = 1;
var dobYear = 1950;
var addressCity = "City";
var addressCountry = "Country";
var addressLine = "Address line";
var addressZIP = "ZIP";
var addressProvince = "Province";       

var createAccountPromise = function()
{
    var params = 
        {
            url: "https://api.stripe.com/v1/accounts",
            method: "POST",
            headers: 
            {
                "Authorization": "Basic " + new Buffer(secret_key + ":").toString("base64"),
                "content_type": "application/x-www-form-urlencoded"
            },
            body: 
            {   
                "country": country,
                "default_currency": currency,
                "email": email,
                "managed": true,
                "legal_entity":
                    {
                        "first_name": firstName,
                        "last_name": lastName,
                        "type": "individual",
                        "dob":
                            {
                                "day": dobDay,
                                "month": dobMonth,
                                "year": dobYear
                            },
                        "personal_address":
                            {
                                "city": addressCity,
                                "country": addressCountry,
                                "line1": addressLine,
                                "postal_code": addressZIP,
                                "state": addressProvince
                            }
                    },
                "external_account": cardTokenId
            }
        };
    return Parse.Cloud.httpRequest(params);
}

createAccountPromise()
    .then(function(result)
    {
        console.log("SUCCESS: " + result.text);
        response.success("Account Created");
    },
    function(errorReason)
    {
        console.log("ERROR: " + errorReason.text);
        response.error("Account NOT Created because: " + errorReason.text);
    });

問題來自於application/x-www-form-urlencoded Content-Type導致屬性的“flat” key=value列表,而您傳遞的是具有多個級別的分層對象。 JSON知道如何對這樣的對象進行編碼, application/x-www-form-urlencoded不會(有幾種不同的方法,用點表示法,括號等)。

你應該做的是“展平”你的JSON對象,使它只有一個級別,並使用“擴展”名稱作為鍵。 即不是擁有包含first_namelegal_entity ,而是直接設置legal_entity[first_name] (以匹配Stripe使用的格式)。

所以,你的身體將是:

body: 
{   
    "country": country,
    "default_currency": currency,
    "email": email,
    "managed": true,
    "legal_entity[first_name]": firstName,
    "legal_entity[last_name]": lastName,
    "legal_entity[type]": "individual",
    "legal_entity[dob][day]": dobDay,
    "legal_entity[dob][month]": dobMonth,
    "legal_entity[dob][year]": dobYear
    "legal_entity[personal_address][city]": addressCity,
    "legal_entity[personal_address][country]": addressCountry,
    "legal_entity[personal_address][line1]": addressLine,
    "legal_entity[personal_address][postal_code]": addressZIP,
    "legal_entity[personal_address][state]": addressProvince
    "external_account": cardTokenId
}

當然,如果你有更復雜的對象,可以在代碼中“扁平化”而不是手動完成。

此外,您應該使用Content-Type ,而不是content_type

使用encodeURIComponent將json轉換為x-www-form-urlencoded。 然后發送請求。

return Parse.Cloud.httpRequest(encodeURIComponent(params));

要么

return Parse.Cloud.httpRequest(encodeURIComponent(JSON.stringify(params)));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM