kotlin으로 개발 중이고, 통신은 Retrofit을 이용하고 있습니다.
실행 시 로그는 아래와 같습니다.
D/Response 코드::: 400
D/Response 메시지::: Bad Request
더 자세한 에러 코드를 볼 수 있는 방법을 모르겠고,
포스트맨으로 확인했을 때에는 통신이 잘 되는 것으로 보아 파라미터(필드) 보낼 때의 문제이지 않을까 싶은데
현재 파라미터를 이렇게 보내는 것이 맞는 지에도 확신이 가지 않습니다…ㅠㅠ
어떤 부분에서 틀렸는지 궁금합니다.
- 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
- 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
)
- 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")
}
})
}
}