티스토리 뷰
1. 조건
- 카드 등록시에는 결제창을 통해 빌링키를 생성할것.
- 카드 등록 후 해당 카드로 계속 결제 요청 보낼것.
- 결제/취소 시, 우리쪽에 저장된 아임포트쪽 고유아이디로 결제/취소 요청할것.
- 만약 아임포트 콘솔에서 결제 취소를 할 경우, 우리쪽에도 해당 데이터를 저장해서 맞춰줄것.
- 카드 삭제시에 아임포트의 빌링키도 함께 삭제 할것.
- 결제 수단은 카드외에는 없는 것으로 함.
2. 미리 알아야할 것.
- 빌링키 생성시에 아임포트에서 원하는 customer_uid, merchant_id는 우리쪽에서 생성해서 주는 데이터임.
- 우리는 customer_uid로 해당 유저의 아임포트쪽 빌링키를 관리할 수 있음.
- 이말은 한 유저가 여러개의 결제 수단을 가지고 있으면 각각의 customer_uid가 필요하다는 이야기임.
- 아임포트와 통신시에는 베어러 토큰으로 인증과정을 거쳐야함.
3. 시작해볼까.
- https://api.iamport.kr/#/ 여기는 필수. 여기에 Response까지 다나와서 엄청 유용함!
- 토큰 가져오기
- 먼저 아임포트쪽 api에 접근하기 위해서는 먼저 token값을 가져와야함
- 아임포트쪽 가입후 받은 키와 시크릿 값을 보냄. 헤더 Content-Type : application/json 추가
- POST https://api.iamport.kr/users/getToken {'imp_key':env('IMP_KEY'), 'imp_secret':env('IMP_SECRET')}
- response
- { "code": 0, "message": "string", "response": { "access_token": "string", "expired_at": 0, "now": 0 } }
- response의 access_token값을 이제부터 결제/취소시 헤더에 Authorization : Bearer access_token 으로 요청 하면 됨.
- payment
- POST /subscribe/payments/again
- 헤더에 content-type, token값 잊지말고 챙겨주고
- 미리 생성해둔 customer_uid, merchant_uid, amount(결제금액), name(상품명? 결제명?)은 필수값이므로 꼭 입력해주자.
- buyer_name 주문자명도 입력해줌. 우리쪽 결제테이블에 추가해둬서 추가함.
- response
- http status, response로 온 code값을 비교해서 해당 결제가 잘 이뤄졌는지 확인.
- 우리쪽 payment쪽에 저장함. (우리는 결제 리스트가 필요해서 log식으로 쌓음)
- 주요 저장데이터는 merchant_uid, amount
- cancel
- POST /payments/cancel
- 헤더 챙기고
- payment시에 저장해둔 merchant_uid, amount, reason을 전달해줌.
4. 빌링키 생성해보자.
- 프론트쪽에서 결제창으로 카드를 등록하면, request_pay 메소드 쓰면 됨.
- pc의 경우 response값을 그대로 백쪽에 저장. (작성하다보니 얘도 모바일처럼 확인해야하는거 아닌가...)
- 모바일의 경우 response값이 성공/실패로만 나오므로(심지어 customer_uid도 없음)
- 캐시에 customer_uid를 저장해두고 해당 요청이 들어왔을 경우에 캐시에서 해당 값을 가져온 다음
- 아임포트쪽에 빌링키가 등록되었는지 확인해서 가져오는 response값으로 저장.
- GET https://api.iamport.kr/subscribe/customers/{customer_uid}
5. 삭제
- DELETE /subscribe/customers/{customer_uid}
- 헤더 챙기고
6. 웹훅
- 아임포트 콘솔에서 취소하면 이쪽
- 아임포트에 받을 웹훅 도메인 주소 입력해주고
- 요청온 클라이언트 아이피가 ['52.78.100.19', '52.78.48.223', '52.78.5.241'] 에 속해있는지 확인 (아임포트쪽 아이피)
- 콘솔에서 결제 취소되었을때에만 데이터 새로 생성해서 저장. (나는 있던 데이터 replicate하고 데이터 변경함)
몰라서 공부하면서 할땐 개 거지같이 짜증나더니
지금보니 별거 없네......
트랜젝션 잘쓰고, 예외처리 잘 챙겨서 하면 된당.
'Laravel' 카테고리의 다른 글
[laravel 8] laravel, php upgrade (0) | 2023.01.27 |
---|---|
[laravel8] 슬랙 알림 보내기 (0) | 2023.01.16 |
[laravel8] (내기준) 자주 쓰는 콜렉션 메소드를 알아보자. (0) | 2022.11.09 |
[laravel8] $model->unsetRelation() (0) | 2022.11.01 |
[laravel8] sail로 여러개 프로젝트를 띄워보자. (0) | 2022.10.27 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 엘라스틱서치한글성공!
- xml로도
- 배열을_이쁘게
- gcp
- PhpStorm
- 프로그래밍은디버거부터시작이다
- 테스팅
- fmf
- 테스팅환경
- UTF8
- 더미데이터도유형이있어요
- Testing
- twoserven.kr/0410
- JSON으로도
- twoseven.kr/0410
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함