[ 디장고 ] 카카오페이 api연결시 에러

아래와 같이 연결을 했는데…
결과 : {‘extras’: None, ‘error_message’: ‘invalid param(null has invalid value)’, ‘error_code’: -400}
결과가 이렇게 리턴이 됩니다.
시간은 12-13 오후6:19

def prepare_payment(request):
KAKAO_API_KEY=‘DEV09ED661AF03847802D5A5F38EC59AC086****’
KAKAOPAY_BASE_URL = ‘https://open-api.kakaopay.com/online/v1/payment/ready

headers = {
“Authorization”:f"SECRET_KEY {KAKAO_API_KEY}",
“Content-Type”:“application/json”,
}

print("headers : ",headers)
data = {
“cid”: “TC0ONETIME”, # 테스트용 CID, 상용은 발급받은 CID 사용
“partner_order_id”: “order_id_12345”, # 고유 주문 ID
“partner_user_id”: “user_id_67890”, # 고유 사용자 ID
“item_name”: “Test Product”, # 상품명
“quantity”: “1”, # 수량 (0이 아닌 양수)
“total_amount”: “1000”, # 총 결제 금액 (0보다 커야 함)
“vat_amount”: “100”, # 부가세 금액 (총 금액보다 작거나 같아야 함)
“tax_free_amount”: “0”, # 비과세 금액 (생략 가능)
“approval_url”: “http://127.0.0.1:8000/payment/paySuccess”,
“cancel_url”: “http://127.0.0.1:8000/payment/payFail”,
“fail_url”: “http://127.0.0.1:8000/payment/payCancel”,

}

print("data : ",data)
print("KAKAOPAY_BASE_URL : ",KAKAOPAY_BASE_URL)
response = requests.post(KAKAOPAY_BASE_URL, headers=headers, data=data)
result = response.json()
print("결과 : ",result)

request.session[“tid”] = result[“tid”]

if response.status_code == 200:
return JsonResponse({“next_redirect_pc_url”: result[“next_redirect_pc_url”]})
else:
return JsonResponse({“error”: result}, status=400)

안녕하세요. 카카오페이입니다.

정확한 확인을 하기 위해선 사용된 DEV SECRET_KEY 정보가 필요합니다.

단순 문의내용과 응답으로 봐서는 카카오페이로 유입되어야하는 필드가 정상적으로 인식되지 않았을때 오류입니다.

타가맹점들의 사례의 경우 각 필드값에 [] 값이 있어 필드인식을 못하는 케이스가 있었습니다.

카카오페이 전달 필드값 확인 부탁드립니다.

감사합니다.

DEV SECRET_KEY 입니다.
DEV09ED661AF03847802D5A5F38EC59AC08698DD

안녕하세요. 카카오페이입니다.
공유주신 DEV SECRET_KEY로 확인해보니 request.body 값이 정상적으로 유입되지 않앗던것으로 보여집니다.
가장최근 유입된 정보의 경우 정상처리 된것으로 보여지는데 조치된부분인지 확인바랍니다.
감사합니다.

data를 json.dumps(data) 변환해서 보내니, 제대로 값이 넘어 왔습니다.

[ 질문사항 ]
질문1.
카카오페이 단건결제 문서에서는
POST /online/v1/payment/ready HTTP/1.1
Host: open-api.kakaopay.com
Authorization: SECRET_KEY ${SECRET_KEY}
Content-Type: application/json

되어 있는데,
headers = {
“Authorization”: f"KakaoAK {KAKAOPAY_API_KEY}",
“Content-Type”: “application/x-www-form-urlencoded;charset=utf-8”,
}
해도 현재 된다고 하는 사람이 있어서, 이렇게 해도 되는지?
아니면 변경된것인지 궁금합니다.

질문2.
최종완료후 이렇게 에러가 뜹니다.
넘어온 데이터를 출력하면
pg_token : db203e8b5e7715c3e08c
tid : T76122e1592f43375c12
값이 제대로 넘어 오고 있습니다.

{“error”: {“msg”: “wrong appKey(DEV09ED661AF03847802D5A5F38EC59AC08698DD) format”, “code”: -401}}

[[ body 해결 ]]

  • json.dumps(data, ensure_ascii=False) 제대로 데이터 넘어감.

response = requests.post(KAKAOPAY_BASE_URL, headers=headers, data=json.dumps(data, ensure_ascii=False))

result = response.json()

print("결과 : ",result)

안녕하세요. 카카오페이입니다.

1답변
구api 를 사용하시다가 신api 로 전환하시는거라면 아래 링크 참고하여 변경해주시기 바랍니다.

2답변
401 거절은 구api 를 사용하는데 신api 의 정보값인 SECRET_KEY를 입력하여 오류가 발생한 부분입니다.
기존 kapi.kakao.com 도메인을 통한 api 는 아래 링크 참고해주시면 됩니다.
카카오페이 | 개발자센터

기존 카카오페이 사용하는 중이시라면 kakaopay_pg@kakaopaycorp.com 으로 문의주시면 CID 설정 등의 세팅 확인 후 안내드릴 수 있으니 참고부탁드립니다. 문의주실때 CID, 사업자번호, 가맹점명 정보와 함께 포럼 링크 url 전달부탁드립니다.

감사합니다.

안녕하세요. 카카오페이입니다.
질문2의 대하여 추가 확인을 해보니 ready api 는 신api 를 통해 유입되었으나 결제창 비밀번호 인증 후 리다이렉트 후 받은 pg_token 값으로 approve api 유입되었을때는 구api 를 통해 유입되었습니다.
헌데 구 api 에서 SECRET_KEY 값을 넣어 오류가 발생한 부분입니다.

ready api 와 approve api 모두 신api 로 전환진행 부탁드립니다.
감사합니다.