kokbee-Hive
article thumbnail

회사에서 결제 쪽을 리팩토링 하면서 중국 쪽 결제수단인 알리페이 결제를 했던 내용을 적어보고자 한다.

결제는 안드로이드 앱으로 주로 하게 되므로, 안드로이드팀과 얘기를 하면서 진행했다. 
원래 알리페이는 연동되어 사용하고 있엇지만, 알리페이 결제 수단 갱신과
늘 그렇다싶이 기존에 하던 사람이 없으면 새롭게 하게 되는 법 ㅎㅎ..
그래서 회사에서 했던 내용을 기록차 짧게 적어본다. 


개발자 문서는 아래 링크로 들어가면 된다. (중국어..)
https://opendocs.alipay.com/common/02np8r

 

小程序文档 - 支付宝文档中心

opendocs.alipay.com


 

 

 

 

 

수정전 결제 직접 결제 테스트 및 플로우

테스트가 되는지 여쭤보고 플로우를 정리했다.
 

플로우는 위와 같이 되고 내가 해야하는 부분은 기존 플로우에서 알리 페이 결제에 대한 부분이다.
 
 

 


 

앱 결제를 하기 위한 사전 작업

전제조건
1. 중국계좌, 중국폰
2. 알리페이 가입
3. 알리페이 결제를 위한 API 토큰 발급
 
1 번은 회사 및 개인 재량이기에... ,2 번은 인터넷에 퍼져있고
3번만 설명하겠다.
아래 링크로 들어가면 app용 설정을 따로 할 수 있다.
https://opendocs.alipay.com/isv/03l740?pathHash=8d712d50

 

小程序文档 - 支付宝文档中心

opendocs.alipay.com


참고로 한글로 번역하면 이상하니 영어로 번역해서 보는 걸 추천!
 
 
툴을 자기 OS 맡게 다운로드한다.

 
 
 
다운받았다면 아래와 같은 이미지의 창이 보일 거다.

 
저렇게 보인다면 아래와 문서대로 키를 발급받으면 된다.
https://opendocs.alipay.com/common/02khjq?pathHash=67b919d7

 

小程序文档 - 支付宝文档中心

opendocs.alipay.com

 
 

 

 


 

앱 결제 코드 작성

const fs = require('fs')
const qs = require('querystring')
const crypto = require('crypto')

const APP_ID = '12312312313123123' // 앱팀 appId
const URL = '결제 결과 받을 URL'
const PRIVATE_KEY = fs.readFileSync('alipay-private.pem', 'ascii').replace(/\\n/gm, '\\n')

getBizContentParams (options) {
    return {
      timeout_express: '30m',
      product_code: 'QUICK_MSECURITY_PAY',
      total_amount: 10000
      subject: options.subject || '',
      body: 'Purchase',
      out_trade_no: options.order_id
    }
}

createRSA2Sign (params) {
    const privateKey = `-----BEGIN PRIVATE KEY-----\n${PRIVATE_KEY}-----END PRIVATE KEY-----`
    const sortedParams = Object.keys(params).sort().reduce((result, key) => {
      result[key] = params[key]
      return result
    }, {})

    const query = Object.keys(sortedParams).map((key) => {
      return `${key}=${params[key]}`
    }).join('&')

    return crypto.createSign('RSA-SHA256')
      .update(query)
      .sign(privateKey, 'base64')
}

getCommonParams () {
    return {
      app_id: APP_ID,
      charset: 'utf-8',
      format: 'JSON',
      sign_type: 'RSA2',
      method: 'alipay.trade.app.pay',
      version: '1.0',
      timestamp: '결제날짜',
      notify_url: URL,
      biz_content: JSON.stringify({ ...this._getBizContentParams(options) })
    }
}

getPaymentParams (options) {
    const params = this.getCommonParams(options)
    const sign = this.createRSA2Sign(params)
    // 앱팀에서는 서버에서 만들어준 옵션과 쿼리들로 바로 결제시를 시도함
    const alipayUrlQuery = `${qs.stringify(params)}&sign=${encodeURIComponent(sign)}`

    return { ...params, sign, alipayUrlQuery }
}

 
사실 코드는 그렇게 어렵지 않다.
위에 내용이 끝... 회사마다 조금씩 차이는 잇겠지만
결제 정보의 키값들을 가지고 sign -> 쿼리스트링 -> 앱 전달 
이렇게 하면 최종적으로 앱에서는 위 내용을 가지고 결제를 alipay로 쏘고 업데이트를 시도한다.
 
 
 

 

 

 

앱 결제 결과

⭐️ 상용에서도 잘작동됨

 
 
 
 
 
 
참고 - 알리페이 웹에서의 로그인 
https://authstl.alipay.com/login/index.htm

 

登录 - 支付宝

authstl.alipay.com

- 가입한 아이디로 로그인

로그인 후 인증

 
중국폰으로 인증 번호 확인

profile

kokbee-Hive

@콕비

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!