0

我需要通过条带 API 创建一个 SKU。

问题出在库存领域。Stripe api 响应是:

'error' => [
    'message' => 'Invalid hash',
    'param' => 'inventory',
    'type' => 'invalid_request_error'
]

我的PHP代码是:

    $endPoint = 'https://api.stripe.com/v1/skus';
    $APIKEY_TEST = 'my_api_key';
    $headers = array('Authorization: Bearer '.$APIKEY_TEST);

    $sku = [
        'active' => 'true',
        'inventory' => ['quantity' => 10000000 ,'type' => 'infinite', 'value' => null],
        "currency" => "eur",
        "price" => $price,
        "product" => $stripe_product_id
    ];

    $array_string ='';
    foreach($sku as $key => $value) {
        $array_string .= $key.'='.$value.'&';
    }
    rtrim($array_string, '&');

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_URL, $endPoint);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $array_string);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    $output = curl_exec($ch);
    curl_close($ch);

在条带 api 文档中,库存是哈希类型字段。我试过 json_encode() 没有运气。也许问题在于发送数组而不是哈希。在 $sku 数组中,inventory 字段也是一个嵌套的关联数组。也许问题也在那里。

有没有办法发送包含库存的 CURLOPT_POSTFIELDS 以便条纹接受它?

编辑:在条纹仪表板中,我可以看到我的请求:

  {
  "active": "true",
  "inventory": "Array",
  "currency": "eur",
  "price": "3",
  "product": "prod_F6ipvfYFvOxxQq"
}

库存字段没有数据,而是“数组”。

4

1 回答 1

1

在尝试了很多可能的解决方案后,我找到了答案:

$post_array = http_build_query($sku);

并且知道 stripe 接受带有嵌套库存数组的 $sku 数组。

值得注意的是,stripe 不接受请求中的 JSON。

请求必须是 url 编码的。

于 2019-05-21T11:40:31.557 回答