일부 변수를 기반으로 컬을 사용하여 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)"
대신에 그것을 사용하세요.