카카오페이를 적용하기 위해서 테스트 api를 호출하고 있는데요 저한테 에러 메세지를 보여줍니다.
에러메세지는 [“code”: -2, “msg”: cid can’t be null.]
cid 값이 null 이라는것 같은데요. 저는 cid값을 폼데이터에 넣어서 보내고 있는데 왜 이런 메세지가 뜨는지 모르겠습니다.
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
let url: URL = URL(string: "https://kapi.kakao.com/v1/payment/ready")!
var dict = [String:String]()
dict["cid"] = "TC0ONETIME"
dict["partner_order_id"] = "partner_order_id"
dict["partner_user_id"] = "partner_user_id"
dict["item_name"] = "초코파이"
dict["quantity"] = "1"
dict["total_amount"] = "2200"
dict["vat_amount"] = "200"
dict["tax_free_amount"] = "0"
dict["approval_url"] = "https://developers.kakao.com/success"
dict["fail_url"] = "https://developers.kakao.com/fail"
dict["cancel_url"] = "https://developers.kakao.com/cancel"
do {
try Web.postKakao(url: url, dict, encoding: .utf8, completionHandler: { data, response, error in
guard error == nil && data != nil else {
if let err = error {
print(err.localizedDescription)
}
return
}
do {
let json = try JSONSerialization.jsonObject(with: data!, options: [])
Log.Debug(json)
guard let jsonArray = json as? [String: Any] else {
return
}
Log.Debug(jsonArray)
} catch {
Log.Error(error)
}
})
} catch {
Log.Error(error)
}
}
...
func postKakao(url: URL, _ parameters: [String: String], encoding: String.Encoding, completionHandler: @escaping (Data?, URLResponse?, Error?) -> Void) throws {
var postRequest: URLRequest = URLRequest(url: url)
postRequest.httpMethod = "POST"
let makeRandom = { UInt32.random(in: (.min)...(.max)) }
let boundary = String(format: "------------------------%08X%08X", makeRandom(), makeRandom())
let contentType: String = "application/x-www-form-urlencoded;charset=utf-8"
var body = Data()
for (rawName, rawValue) in parameters {
if !body.isEmpty {
body.append("\r\n".data(using: .utf8)!)
}
body.append("--\(boundary)\r\n".data(using: .utf8)!)
guard
rawName.canBeConverted(to: encoding),
let disposition = "Content-Disposition: form-data; name=\"\(rawName)\"\r\n".data(using: encoding) else {
throw IXError.characterSetName
}
body.append(disposition)
body.append("\r\n".data(using: .utf8)!)
guard let value = rawValue.data(using: encoding) else {
throw IXError.characterSetName
}
body.append(value)
}
body.append("\r\n--\(boundary)--\r\n".data(using: .utf8)!)
postRequest.setValue(contentType, forHTTPHeaderField: "Content-Type")
postRequest.setValue("KakaoAK \(Global.kakaoAdminKey)", forHTTPHeaderField: "Authorization")
postRequest.httpBody = body
session.dataTask(with: postRequest, completionHandler: completionHandler).resume()
}
@michael @MJ_ @richard.jeon 도와주세요~~