【问题标题】:Parse Cloud httpRequest Stripe Subscriptions at_period_end param解析 Cloud httpRequest Stripe Subscriptions at_period_end 参数
【发布时间】:2015-07-09 09:43:22
【问题描述】:

在使用 Parse.Cloud.httpRequest 在_period_end 删除订阅时无法正确获取格式。

我能够使用 x-www-form-urlencoded 键成功地向 PostMan 发出此请求,键 'at_period_end' 值为 true。 (由于我的声誉,无法发布截图抱歉)

这是我的云代码:

Parse.Cloud.httpRequest({
    method  : 'DELETE',
    url     : 'https://' + skey + ':@' + 'api.stripe.com/v1' + '/customers/' + request.params.customerId + '/subscriptions/' + request.params.subscriptionId,
    body    : {
      "at_period_end": true
    },
    success: function(httpResponse) {
      if (httpResponse.status === 200) {
        response.success(httpResponse);
      }
      else {
        response.error(httpResponse);
      }
    },
    error: function(httpResponse) {
      response.error(httpResponse);
    }
  });

我尝试过添加一个设置了 Content-Type 的 headers 对象,但没有成功。

我认为这只是一个格式转换问题,从我正确输入 PostMan 的内容到我的 httpRequest 对象中的内容......

我也找不到有关 httpRequest 方法文档的任何重要信息,因此非常令人沮丧:(。

谢谢大家

***** 编辑 ****** 解决方案:

设法使用 url 内联参数解决了这个问题:

  var options = request.params.options,
      url     = 'https://' + skey + ':@api.stripe.com/v1/customers/' + request.params.customerId + '/subscriptions/' + request.params.subscriptionId,
      keys;

  keys = Object.keys(options);

  // This is disgusting, I need to know a better way.
  for (var i = 0; i < keys.length; i++)
  {
    if (i === 0)
    {
      url += '?';
    }
    url += keys[i] + '=' + options[keys[i]];
    if (i !== keys.length - 1)
    {
      url += '&';
    }
  }

  Parse.Cloud.httpRequest({
    method  : 'DELETE',
    url     : url,
    success: function(httpResponse) {
      if (httpResponse.status === 200) {
        response.success(httpResponse);
      }
      else {
        response.error(httpResponse);
      }
    },
    error: function(httpResponse) {
      response.error(httpResponse);
    }
  });

如果有人能告诉我一个更好的方法来写这个,那就太棒了:)

干杯

【问题讨论】:

  • 查看您的 Stripe 日志(在仪表板上)并查看实际发送的内容。 sub会被删除吗?我想知道 parse 是否不理解 method: 'DELETE'
  • 是的,订阅确实被删除了,只是没有使用参数 at_period_end。
  • 我设法用内联样式解决了这个问题,例如 ?at_period_end=true.. 仍然......不得不这样做很烦人。

标签: http parse-platform stripe-payments parse-cloud-code http-request


【解决方案1】:

这个对我来说一直特别棘手,这是我一直在使用的有效方法:

Parse.Cloud.httpRequest({
  method: 'DELETE',
  url: 'https://api.stripe.com/v1/customers/' + request.params.stripeId + '/subscriptions/' + request.params.stripeSubscriptionId,
  headers: {
    'Authorization': 'Basic BASE_64_ENCODE_SECRET_KEY'
  },
  params: {
    at_period_end: true
  },
  success: function(httpResponse) {
    ...
  },
  error: function(httpResponse) {
    ...
  }
});

这里有一些额外的细节。

  • 我最初将“Content-Type: application/json”作为标题之一,但这似乎不正确,尽管(我认为)过去需要它。
  • 您的密钥的 base64 编码可以使用

    生成

    echo -e 'sk_live_ABCDEF123456:' | openssl base64

不要忘记密钥末尾的冒号 (:),这很重要。

不过,这只是一个细节,看起来将密钥直接放在 URL 中也可以。

【讨论】:

    猜你喜欢
    • 2012-04-28
    • 1970-01-01
    • 2015-07-27
    • 2021-08-22
    • 2014-04-17
    • 1970-01-01
    • 1970-01-01
    • 2019-12-10
    • 2019-03-03
    相关资源
    最近更新 更多