基础理论 苹果支付 JS
用于解密Node.js环境中的 Apple Pay Tokens 工具库.
特征
-
苹果支付 键盘 解密:安全地解密用户授权的Apple Pay交易令牌,使用易交互界面.
加密 地区 支助 RSA v1 请检查url=值 (帮助) 中国 ✅ 欧共体 v1 所有其他国家 ✅ -
付款处理证书旋转: 永远不要担心因为证书旋转不可预测的行为而丢失付款. 只要将两个证书都添加到解密上下文中,并放心在旋转窗口时会同时解密出新和旧的令牌.
-
自动解密策略检测:用于解密苹果的"支付托肯"的透明集成,而不管使用的加密标准如何.
苹果支付设置
使用此软件包的一个先决条件是,您必须完成您的 Merchant Apple Pay 设置 。 这可能是一个耗时的过程,所以下面的指南会帮助您获得分步指示,以获取必要的文件来发布并解密Apple Pay Tokens:
为了在您前端使用 Apple Pay 来收取付款, Apple 有以下特定指南:
安装
使用国家防范机制安装软件包:
npm install @basis-theory/apple-pay-js --save
或者亚恩:
yarn add @basis-theory/apple-pay-js
节点.js
下面的例子显示如何使用来自此寄存器的样本从文件系统将证书加载到缓冲器中. 但你可以从你的KMS,秘密管理器,配置等设备中装入.
如果您需要帮助理解在自己的系统中解密和操纵各种形式的持卡人数据的风险, 联系我们。 。 。 .
import { ApplePaymentTokenContext } from '@basis-theory/apple-pay-js';
import fs from 'fs';
import token from './test/fixtures/ec/token.new.json';
// create the decryption context
const context = new ApplePaymentTokenContext({
// add as many merchant certificates you need
merchants: [
{
// optional certificate identifier
identifier: 'merchant.basistheory.com-old',
// the certificate and the private key are Buffers in PEM format
certificatePem: fs.readFileSync(
'./test/fixtures/ec/apple/apple_pay.new.pem'
),
privateKeyPem: fs.readFileSync(
'./test/fixtures/ec/apple/private.new.key'
),
},
{
identifier: 'merchant.basistheory.com-new',
certificatePem: fs.readFileSync(
'./test/fixtures/ec/apple/apple_pay.new.pem'
),
privateKeyPem: fs.readFileSync(
'./test/fixtures/ec/apple/private.new.key'
),
},
{
identifier: 'merchant.basistheory.china',
certificatePem: fs.readFileSync(
'./test/fixtures/rsa/apple/apple_pay.pem'
),
privateKeyPem: fs.readFileSync('./test/fixtures/rsa/apple/private.key'),
},
],
});
try {
// decrypts Apple's PKPaymentToken paymentData
console.log(context.decrypt(token.paymentData));
} catch (error) {
// couldn't decrypt the token with given merchant certificates
}
反应堆
此软件包可用于 反应堆 上下文。 下面的例子说明如何解密苹果支付符并按规定为DPAN提供保险.
const { Buffer } = require('buffer');
const { ApplePaymentTokenContext } = require('@basis-theory/apple-pay-js');
const {
CustomHttpResponseError,
} = require('@basis-theory/basis-theory-reactor-formulas-sdk-js');
module.exports = async function (req) {
const {
bt,
args: {
applePayToken: { paymentData, ...applePayToken },
},
configuration: {
PRIMARY_CERTIFICATE_PEM,
PRIMARY_PRIVATE_KEY_PEM,
SECONDARY_CERTIFICATE_PEM,
SECONDARY_PRIVATE_KEY_PEM,
},
} = req;
// creates token context from certificates / keys configured in Reactor
const context = new ApplePaymentTokenContext({
merchants: [
{
certificatePem: Buffer.from(PRIMARY_CERTIFICATE_PEM),
privateKeyPem: Buffer.from(PRIMARY_PRIVATE_KEY_PEM),
},
{
certificatePem: Buffer.from(SECONDARY_CERTIFICATE_PEM),
privateKeyPem: Buffer.from(SECONDARY_PRIVATE_KEY_PEM),
},
],
});
try {
// decrypts Apple's PKPaymentToken paymentData
const {
applicationPrimaryAccountNumber,
applicationExpirationDate,
...restPaymentData
} = context.decrypt(paymentData);
// vaults Apple Device PAN (DPAN)
const btToken = await bt.tokens.create({
type: 'card',
data: {
number: applicationPrimaryAccountNumber,
expiration_month: applicationExpirationDate.slice(2, 4),
expiration_year: `20${applicationExpirationDate.slice(-2)}`,
},
});
// returns transaction details and vaulted token without sensitive DPAN
return {
raw: {
btToken,
applePayToken: {
paymentData: restPaymentData,
...applePayToken,
},
},
};
} catch (error) {
throw new CustomHttpResponseError({
status: 500,
body: {
message: error.message,
},
});
}
};