我正在尝试通过Angular 2更新客户的条带帐户。我没有创建客户的问题。
我的代码目前看起来像这样:
stripeHeaders(headers: Headers) {
headers.append('Content-Type', 'application/x-www-form-urlencoded');
headers.append('Authorization', 'Bearer ' + this.apiKey);
}
updateBilling(customerId, cardNumber, expiryMonth, expiryYear, cvc): Observable<any> {
let headers = new Headers();
this.stripeHeaders(headers);
let jsonParams = {
source: {
object: 'card',
number: cardNumber,
exp_month: expiryMonth,
exp_year: expiryYear,
cvc: cvc
}
}
let stringParams = 'source={"object":"card","number":' + cardNumber + ',"exp_month":' + expiryMonth + ',"exp_year":' + expiryYear + ',"cvc":' + cvc + '}';
return this.http.post('https://api.stripe.com/v1/customers/' + customerId, body, { headers: headers } )
.map(res => res.json());
}
回应是: { 错误:{ 输入:“invalid_request_error”, 消息:“没有这样的标记:{'对象':'卡','数字':4242424242424242,'exp_month':05,'exp_year':20,'cvc':202}”, param:“来源” } }
不幸的是,Stripe不支持传递JSON,我不得不使用application / x-www-form-urlencoded,但我无法弄清楚如何编码对象以成功传递它。您可以看到JSON格式的变量与我尝试将其设置为jsonParams和stringParams之间的字符串。
我可以更新其他属性,但新的cc信息需要在源对象中,如此处所述https://stripe.com/docs/api/php#update_customer
提前感谢您的帮助。
答案 0 :(得分:0)
在研究解决方案时,我偶然发现了jQuery.param()函数,该函数将数据转换为序列化表示。我没有在我的Angular 2项目中使用jQuery,但我将其插入到一个不同的项目中,我利用jQuery并将JSON转换为成功注册Stripe API的字符串。你可以在这里看到两者之间的区别:
let jsonBody = {
source: {
object: 'card',
number: cardNumber,
exp_month: expiryMonth,
exp_year: expiryYear,
cvc: cvc
}
}
let serializedBody = 'source%5Bobject%5D=card&source%5Bnumber%5D=' + cardNumber + '&source%5Bexp_month%5D=' + expiryMonth+ '&source%5Bexp_year%5D=' + expiryYear + '&source%5Bcvc%5D=' + cvc;