티스토리 뷰

반응형

안녕하십니까 저번에 Inapp서버 개요 이후 이번에는 IOS 인앱 결제를 알아보겠습니다.

 

개요는 이전 글을 참고해주세요.

2019/09/13 - [인앱 결제 서버] - IOS & Android Inapp Server - 개요

 

 

참고로 이 글은 구체적인 소스코드를 제공하지 않으며, 어떻게 구현하는지에 대한 힌트만 제공합니다.

 

IOS는 Client단에서 인앱 결제 로직을 통해 받은 receipt-data를 서버에 넘겨 영수증 검증만 해주면 되는

오히려 Android보다 더 쉽게 구현할 수 있습니다.

 

receipt-data는 웹 상에서 떠돌아다니는 data를 test 할 수 있습니다.

그리고 IOS는 기본적으로 테스트를 할 때는 밑의 url을 base로 사용되며

https://sandbox.itunes.apple.com/verifyReceipt 

 

실 서버에서는 밑의 url이 사용됩니다.

https://buy.itunes.apple.com/verifyReceipt

 

postman으로 test를 하면 

POST /verifyReceipt HTTP/1.1
Host: sandbox.itunes.apple.com
cache-control: no-cache
Postman-Token: ca973415-6ad0-4bd0-9629-187cfed7731f

{"receipt-data":"MIIT5wYJKoZIhvcNAQcCoIIT2DCCE9QCAQExCzAJBgUrDgMC......"}

아래와 같은 결과를 얻을 수 있습니다.

{
"receipt":{
"receipt_type":"ProductionSandbox",
"adam_id":0,
"app_item_id":0,
"bundle_id":"kr.co.cheolcheol.inapp.ios",
"application_version":"1",
"download_id":0,
"version_external_identifier":0,
"receipt_creation_date":"2019-08-05 00:51:31 Etc/GMT",
"receipt_creation_date_ms":"1564966291000",
"receipt_creation_date_pst":"2019-08-04 17:51:31 America/Los_Angeles",
"request_date":"2019-09-05 00:03:19 Etc/GMT",
"request_date_ms":"1567641799618",
"request_date_pst":"2019-09-04 17:03:19 America/Los_Angeles",
"original_purchase_date":"2013-08-01 07:00:00 Etc/GMT",
"original_purchase_date_ms":"1375340400000",
"original_purchase_date_pst":"2013-08-01 00:00:00 America/Los_Angeles",
"original_application_version":"1.0",
"in_app":[
{
"quantity":"1",
"product_id":"kr.co.cheolcheol.inapp.ios.iap.star.100",
"transaction_id":"1000000553487969",
"original_transaction_id":"1000000553487969",
"purchase_date":"2019-08-02 07:07:45 Etc/GMT",
"purchase_date_ms":"1564729665000",
"purchase_date_pst":"2019-08-02 00:07:45 America/Los_Angeles",
"original_purchase_date":"2019-08-02 07:07:45 Etc/GMT",
"original_purchase_date_ms":"1564729665000",
"original_purchase_date_pst":"2019-08-02 00:07:45 America/Los_Angeles",
"is_trial_period":"false"
},
{
"quantity":"1",
"product_id":"kr.co.cheolcheol.inapp.ios.iap.star.300",
"transaction_id":"1000000553512679",
"original_transaction_id":"1000000553512679",
"purchase_date":"2019-08-02 07:41:37 Etc/GMT",
"purchase_date_ms":"1564731697000",
"purchase_date_pst":"2019-08-02 00:41:37 America/Los_Angeles",
"original_purchase_date":"2019-08-02 07:41:37 Etc/GMT",
"original_purchase_date_ms":"1564731697000",
"original_purchase_date_pst":"2019-08-02 00:41:37 America/Los_Angeles",
"is_trial_period":"false"
}
]
},
"status":0,
"environment":"Sandbox"
}

정상적으로 처리가 된다면 status는 0이 내려오며, 그 외에는 참고 url을 통해 error code를 확인할 수 있습니다.

 

그리고중요한 게 있는데, 인앱 검증을 통해 response를 해주고 client가 서버에

response받은 것을 전달하지 않으면

 

in_app key에  처리되지 않은 영수증이 점점 쌓이게 되며 response 처리를 해줘야 사라집니다.

 

저 같은 경우는 실서버와 테스트 처버를 운용을 하기 위해 21006 or 21007 에러를 잡아줬으며, transaction_id를 이용하여 아이템이 중복 지급이 되었는지 체크하는 로직 정도를 넣어줬습니다.

 

로직 자체는 어려운 편이 아니라 프로그래밍하는 것도 쉬울 것이라 생각합니다.

 

그럼 다음에는 AOS 인앱 결제 하는법도 작성해볼게요!

 

 

 

출처 및 참고 

https://developer.apple.com/documentation/appstorereceipts/verifyreceipt

 

https://developer.apple.com/library/archive/releasenotes/General/ValidateAppStoreReceipt/Chapters/ValidateRemotely.html#//apple_ref/doc/uid/TP40010573-CH104-SW2

반응형

'기타 > 인앱 결제 서버 (Old)' 카테고리의 다른 글

AOS 인앱 결제 서버  (0) 2019.10.03
IOS & Android Inapp Server - 개요  (0) 2019.09.13
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함