2015-03-18 7 views
2

Так что я просто закончил с интеграцией Stripe Connect с Parse Cloud Code и веб-приложением Django.Преобразование cURL в Parse.Cloud.httpRequest

В настоящее время Parse не реализовал метод модуля Stripe для создания токенов с использованием токена доступа и идентификатора клиента. Поэтому мне нужно сделать это сам.

Я бег локонов команды, нашивки API предоставляет вам увидеть пример ответ, здесь,

Так я получаю ответ, и все идет хорошо. Но теперь я пытаюсь воспроизвести это поведение в Parse.Cloud.httpRequest.

Вот моя попытка сформировать команду:

var retrieveToken = function(url, accessToken, customerId) { 
    var promise = new Parse.Promise(); 
    Parse.Cloud.httpRequest({ 
     method: 'POST', 
     header : {'access_token' : accessToken}, 
     url: url, 
     body : {'customer':customerId}, 
     success: function(httpResponse) { 
      promise.resolve(httpResponse); 
     }, 
     error: function(httpResponse) { 
      promise.reject(httpResponse); 
     } 
    }); 
    return promise; 
} 

Создание маркера возвращается ответ»с полосой не удалось. Ошибка: [объект Объект] 'сообщение приходит от:

return retrieveToken(tokenURL, accessToken, customerId).then(null, function(error) { 
    console.log('Creating token with stripe failed. Error: ' + error); 
    return Parse.Promise.error('An error has occurred. Your credit card was not charged.'); 
}); 

Моя проблема, как правило, генерирует httpRequest. У кого-нибудь есть идеи о том, как создать правильный httpRequest?

ответ

1

Итак, я решил проблему и хотел бы, чтобы я взглянул на опубликованные ответы, прежде чем приступать к этому. Но эй! это работает:) ...

Так вот как я генерировать HTTPRequest:

var customerId = currentUser.get('stripeCustomerId'); 
var accessToken = vendor.get('stripeAccessToken'); 
var tokenURL = 'https://'+accessToken+':@api.stripe.com/v1/tokens'; 
return retrieveToken(tokenURL, customerId).then(null, function(error) { 
    console.log('Creating token with stripe failed. Error: ' + error); 
    return Parse.Promise.error('An error has occurred. Your credit card was not charged.'); 
}); 

и метод retrieveToken является:

var retrieveToken = function(url, customerId) { 
    var promise = new Parse.Promise(); 
    Parse.Cloud.httpRequest({ 
     method: 'POST', 
     url: url, 
     header: 'content-type: application/json', 
     body: {'customer' : customerId}, 
     success: function(httpResponse) { 
      promise.resolve(httpResponse); 
     }, 
     error: function(error) { 
      promise.error(error); 
     } 
    }); 
    return promise; 
} 

я добавил маркер доступа в качестве заголовка, но, по-видимому , этот способ работает (добавление его перед адресом полосы). Не уверен, насколько это безопасно и будет любить обратную связь! Это последнее, что мне нужно, предъявлено иск за отправку конфиденциальных данных небезопасно или что-то еще.

0

Вы можете использовать команду curl с опцией -v, чтобы узнать, как именно она отправляет запрос. Похоже, что он использует базовую аутентификацию HTTP.

Так что вам нужно, чтобы создать заголовок авторизации, в кодировке base64, что-то вроде этого в коде:

header : { "Authorization" : "Basic "+btoa(accessToken+":") } 
+0

К сожалению, вы не можете использовать 'btoa' в облачном коде Parse - его точная проблема, я пришел сюда, чтобы решить :) –

1

Более типичная формой является возвращение обещания созданного запросом HTTP.

var retrieveToken = function(url, accessToken, customerId) { 
    var params = { method: 'POST', 
        header : {'access_token' : accessToken}, 
        url: url, 
        body : {'customer':customerId} }; 
    // return the promise that is created (and fulfilled) by the httpRequest 
    return Parse.Cloud.httpRequest(params); 
} 

return retrieveToken(tokenURL, accessToken, customerId).then(function(result) { 
    console.log('success ' + JSON.stringify(result)); 
}, function(error) { 
    console.log('Creating token with stripe failed. Error: ' + error.message); 
    return Parse.Promise.error('An error has occurred. Your credit card was not charged.'); 
}); 

Там могут быть некоторые другие вопросы, имеющие отношение к требованиям веб-службы для хорошо сформированным вызова, но это по крайней мере будет сделать вызов и вернуться обещание для результата.

Смежные вопросы