현재 카카오 페이 API로 미쳐 있습니다. 카카오 페이 API 준비를 호출할 때 완료버튼을 누를 시 이동할 값을 JSONString으로 만들어서 넣고 있습니다. 하지만 이기능은 테스트 결제하기를 누르지 마자 바로 호출되며 앱으로 이동합니다.
결제가 완료가 되지도 않았는데 이동하는 이유가 무엇입니까?? 왜 이런일이 발생하며 올바른 방법은 무엇입니까??
let url: URL = URL(string: "https://kapi.kakao.com/v1/payment/ready")!
var kakaoDict = [String:String]()
kakaoDict["return_custom_url"] = "kakao12345678dferhroj2t34://"
var kakaoJsonString : String!
let encoder = JSONEncoder()
do {
let jsonData = try encoder.encode(kakaoDict)
kakaoJsonString = String(data: jsonData, encoding: .utf8)!
} catch _ as NSError {
}
var paramString : String! = "cid=TC0ONETIME"
paramString = paramString + "&partner_order_id=partner_order_id"
paramString = paramString + "&partner_user_id=partner_user_id"
paramString = paramString + "&item_name=초코파이"
paramString = paramString + "&quantity=1"
paramString = paramString + "&total_amount=2200"
paramString = paramString + "&vat_amount=200"
paramString = paramString + "&tax_free_amount=0"
paramString = paramString + "&approval_url=\(global.api)"
paramString = paramString + "&fail_url=\(global.api)"
paramString = paramString + "&cancel_url=\(global.api)"
paramString = paramString + "&custom_json=\(kakaoJsonString!)"
post(url: url, paramString, 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: [])
print(json)
guard let jsonArray = json as? [String: Any] else {
return
}
Log.Debug(jsonArray)
guard jsonArray["tid"] as? String != nil else {
return
}
DispatchQueue.main.async {
self.transacationId = jsonArray["tid"] as? String
let nextUrl : String = jsonArray["ios_app_scheme"] as! String
guard let myUrl = URL(string: nextUrl) else {
//report invalid URL
return
}
if UIApplication.shared.canOpenURL(myUrl) {
UIApplication.shared.open(myUrl, options: [:], completionHandler: { (success) in })
}
}
} catch {
print(error)
}
})