apple-pay-signature-and-decrypt

[![npm version](https://img.shields.io/npm/dt/apple-pay-signature-and-decrypt.svg?style=flat-square)](https://img.shields.io/npm/dt/apple-pay-signature-and-decrypt.svg) [![npm version](https://img.shields.io/npm/v/apple-pay-signature-and-decrypt.svg?style

Usage no npm install needed!

<script type="module">
  import applePaySignatureAndDecrypt from 'https://cdn.skypack.dev/apple-pay-signature-and-decrypt';
</script>

README

Apple pay payment token signature validation and decryption

npm version npm version

A node app to handle apple pay payment token signature validation and decryption

ref: Payment Token Format Reference

Getting started

npm i --save apple-pay-signature-and-decrypt

You will need to create a merchant id and payment processing certificate on apple developer site. Details described here. After that you will get the merchant certificate and private key.

Usage

const requestToken = {
    "data": "<encryptedData>",
    "version": "EC_v1",
    "signature": "<signature>",
    "header": {
        "ephemeralPublicKey": "<ephemeralPublicKey>",
        "publicKeyHash": "<publicKeyHash>",
        "transactionId": "<transactionId>"
    }
}

const publicCert = fs.readFileSync(path.join(__dirname, './publicCert.pem'), 'utf8') // import your certificate file
const privateKey = fs.readFileSync(path.join(__dirname, './privateKey.pem'), 'utf8') // import your private key file

const token = new applePayPaymentToken(requestToken)
const decryptedToken = token.decrypt(publicCert, privateKey)
decryptedToken.then( ret => {
    console.log(ret)
}).catch( err => {
    console.error(err)
})

Sample output

{
    "applicationExpirationDate": "231231",
    "applicationPrimaryAccountNumber": "4802********4384",
    "currencyCode": "901",
    "deviceManufacturerIdentifier": "0400*****273",
    "paymentDataType": "3DSecure",
    "transactionAmount": 89900,
    "paymentData": {
        "eciIndicator": "7",
        "onlinePaymentCryptogram": "Aj+W784****************MAABAAA="
}