カールの変数は文字列にバックスラッシュを追加します。

カールの変数は文字列にバックスラッシュを追加します。

一部の変数に基づいてカールを使用してStripeで顧客を作成しようとしていますが、変数にトークンを割り当てるとStripeに存在しないというエラーが発生します。しかし、テキストを直接入力すると機能します。この変数をどのように使用しますか$TOKEN?私が認識しない値の変更はありますか?

Michael$ curl https://api.stripe.com/v1/customers -u $access_token: -d source=tok_1CjvRiDZ5DqZ0yaUVWXXXXXX
{
  "error": {
    "code": "token_already_used",
    "doc_url": "https://stripe.com/docs/error-codes/token-already-used",
    "message": "You cannot use a Stripe token more than once: tok_1CjvRiDZ5DqZ0yaUVWXXXXXX.",
    "type": "invalid_request_error"
  }
}

Michael$ curl https://api.stripe.com/v1/customers -u $access_token: -d source=$TOKEN
{
  "error": {
    "code": "resource_missing",
    "doc_url": "https://stripe.com/docs/error-codes/resource-missing",
    "message": "No such token: \"tok_1CjvRiDZ5DqZ0yaUVWXXXXXX\"",
    "param": "source",
    "type": "invalid_request_error"
  }
}

$TOKENこのように割り当てる

OUTPUT="$(curl https://api.stripe.com/v1/tokens -u $access_token: -d customer=$external_customer_id)"
TOKEN="$(echo $OUTPUT | jq .id)"

ベストアンサー1

jq引用された出力を提供し、これはJSONで動作します。

$ echo '{ "foo": "foobar" }' | jq .foo
"foobar"

引用符は最終的に内容の一部になり、TOKEN変数が展開されても削除されません。 (当時はただの普通のキャラクターでした。)

ただし、特にこの目的のためのオプションがあります。

--raw-output/ -r:

このオプションを使用すると、フィルタ結果が文字列の場合は、引用符付きのJSON文字列形式ではなく標準出力に直接書き込まれます。これは、jqフィルタがJSONベースではなくシステムと通信できるようにするのに役立ちます。

だからTOKEN="$(echo "$OUTPUT" | jq -r .id)"代わりにそれを使用してください。

おすすめ記事