无法将JSON中更新的信用卡详细信息传递给Angular 2中的Stripe更新客户API端点

时间:2016-08-25 00:58:18

标签: json api post angular stripe-payments

我正在尝试通过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

提前感谢您的帮助。

1 个答案:

答案 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;

资源:http://api.jquery.com/jquery.param/

相关问题