[kotlin] 카카오페이 결제 준비 단계에서 400 에러로 넘어가질 않습니다

kotlin으로 개발 중이고, 통신은 Retrofit을 이용하고 있습니다.
실행 시 로그는 아래와 같습니다.
D/Response 코드::: 400
D/Response 메시지::: Bad Request

더 자세한 에러 코드를 볼 수 있는 방법을 모르겠고,
포스트맨으로 확인했을 때에는 통신이 잘 되는 것으로 보아 파라미터(필드) 보낼 때의 문제이지 않을까 싶은데
현재 파라미터를 이렇게 보내는 것이 맞는 지에도 확신이 가지 않습니다…ㅠㅠ
어떤 부분에서 틀렸는지 궁금합니다.

  1. RetrofitService에서 카카오페이에 해당하는 코드입니다.

@FormUrlEncoded
@POST("/v1/payment/ready")
fun postRequest(
@Header(“Host”) host:String,
@Header(“Authorization”) appId:String,
@Header(“Content-type”) type:String,
@Field(“cid”, encoded=true) cid:String,
@Field(“partner_order_id”, encoded=true) partnerOrderId:String,
@Field(“partner_user_id”, encoded=true) partnerUserId:String,
@Field(“item_name”, encoded=true) itemName:String,
@Field(“quantity”, encoded=true) quantity:Int,
@Field(“total_amount”, encoded=true) totalAmount:Int,
@Field(“tax_free_amount”, encoded=true) taxFreeAmount:Int,
@Field(“approval_url”, encoded=true) approvalUrl:String,
@Field(“cancel_url”, encoded=true) cancelUrl:String,
@Field(“fail_url”, encoded=true) failUrl:String,
):Call

  1. KakaoPayReadyReosponse 데이터 모델입니다.

data class KakaoPayReadyResponse(
var tid: String,
var next_redirect_app_url: String,
var next_redirect_mobile_url: String,
var next_redirect_pc_url: String,
var android_app_scheme: String,
var ios_app_scheme: String,
var created_at: DateTimeFormatter
)

  1. KakaoPayActivity 입니다.
    package com.sample.gual

import android.os.Bundle
import android.util.Log
import android.webkit.WebView
import androidx.appcompat.app.AppCompatActivity
import com.google.gson.Gson
import com.sample.gual.databinding.ActivityKakaoPayBinding
import okhttp3.OkHttpClient
import retrofit2.Call
import retrofit2.Callback
import retrofit2.Response
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory

class KakaoPayActivity : AppCompatActivity() {

private lateinit var binding: ActivityKakaoPayBinding
private lateinit var webView: WebView

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    binding = ActivityKakaoPayBinding.inflate(layoutInflater)
    setContentView(binding.root)

    webView = binding.webView

    // Retrofit 객체 생성
    val retrofit = Retrofit.Builder()
        .baseUrl("https://kapi.kakao.com")
        .addConverterFactory(GsonConverterFactory.create())
        .build()

    // retrofit 객체를 통해 인터페이스 생성
    val service = retrofit.create(RetrofitService::class.java)

    // Header 및 Body에 담을 데이터 생성
    var host = "https://kapi.kakao.com"
    var appId = "KakaoAK  [---여기는 가리겠습니다---]"
    var type = "application/x-www-form-urlencoded;charset=utf-8"

    var cid = "TC0ONETIME"
    var partnerOrderId = "1001"
    var partnerUserId = "erika"
    var itemName = "넷플릭스"
    var quantity = 1
    var totalAmount = 4000
    var taxFreeAmount = 100
    var approvalUrl = "http://gual.cafe24app.com"
    var cancelUrl = "http://gual.cafe24app.com"
    var failUrl = "http://gual.cafe24app.com"

    service.postRequest(host, appId, type, cid, partnerOrderId, partnerUserId, itemName, quantity, totalAmount, taxFreeAmount, approvalUrl, cancelUrl, failUrl)?.enqueue(object : Callback<KakaoPayReadyResponse> {
        override fun onFailure(call: Call<KakaoPayReadyResponse>, t: Throwable) {
            Log.d("CometChatAPI::", "Failed API call with call: " + call +
                    " + exception: " + t)
        }
        override fun onResponse(call: Call<KakaoPayReadyResponse>, response: Response<KakaoPayReadyResponse>) {
            Log.d("Response 코드:: ", response.code().toString())
            Log.d("Response 메시지:: ", response.message())

            webView.loadUrl("https://kapi.kakao.com/v1/payment/ready")
        }
    })
}

}

1개의 좋아요

해결했습니다.

1개의 좋아요