Nodejs를 사용하는 결제 게이트웨이 Stripe/Paypal의 종속성 역전
14684 단어 solidnodeoopjavascript
종속성 역전
이 정의에서 우리는 말할 수 있습니다
우리는 코드가 우리가 사용하고 있는 종속성의 실제 구현이 아니라 우리가 만든 래퍼에 의존하기를 원할 뿐입니다.
우리가 가진 문제
해결책
몇 가지 코드 스니펫으로 시작하겠습니다.
결제 스토어
여기서 우리는 래퍼를 주입하고 우리가 원하는 누구와도 쉽게 거래할 것입니다.
import PaymentService from "./PaymentService";
class PaymentStore {
constructor(paymentWrapper) {
this.paymentWrapper = paymentWrapper;
this.paymentService = new PaymentService();
}
async makeTransaction(chargeData) {
const charge = await this.paymentWrapper.createCharge(chargeData);
await this.paymentService.addNewCharge(charge);
return charge;
}
}
export default PaymentStore;
스트라이프 래퍼
import Stripe from "stripe";
import mockPayment from "./Stripe/mockPayment";
class StripeServiceWrapper {
constructor() {
this.stripe = new Stripe(process.env.STRIPE_SECRET_KEY);
}
async createCharge() {
const { amount, currency, description, source } = mockPayment;
const charge = await this.stripe.charges.create({
amount,
currency,
description,
source,
});
return charge;
}
async createCustomer(customerData) {
const { name, email, source, address, phone } = customerData;
const customer = await stripe.customers.create({
address,
name,
email,
phone,
source,
});
return customer;
}
}
export default StripeServiceWrapper;
페이팔 래퍼
import paypal from "paypal-rest-sdk";
import "./PayPal/PayPalConfig";
class PayPalServiceWrapper {
createCharge({ payment_object, paymentId }) {
return new Promise(function (resolve, reject) {
paypal.payment.execute(paymentId, payment_object, function (error, payment) {
if (error) reject(error);
else {
const { id, transactions } = payment;
resolve({ id, amount: parseInt(transactions[0].amount.total) });
}
});
});
}
paymentExecutionLink(paymentObject) {
return new Promise(function (resolve, reject) {
paypal.payment.create(paymentObject, function (error, payment) {
if (error) reject(error);
else resolve(payment);
});
});
}
getRedirectLink(links) {
for (let i = 0; i < links.length; i++) {
if (links[i].rel === "approval_url") return links[i].href;
}
}
}
export default PayPalServiceWrapper;
이제 컨트롤러에서 Stripe에서 Paypal로 전환하는 것이 매우 쉬울 것입니다.
const post = async (req, res) => {
const store = new PaymentStore(new StripeServiceWrapper());
await store.makeTransaction();
return res.status(200).send({SUCCESS_MESSAGE});
};
코드와 쉽게 시작하는 방법을 찾을 수 있습니다.
https://github.com/eslamelkholy/Payment-Gateway-Stripe-Paypal-Using-Dependency-Inversion
참조
https://en.wikipedia.org/wiki/Dependency_inversion_principle
https://www.geeksforgeeks.org/dependecy-inversion-principle-solid/
Reference
이 문제에 관하여(Nodejs를 사용하는 결제 게이트웨이 Stripe/Paypal의 종속성 역전), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/eslamelkholy/dependency-inversion-with-payment-gateways-stripe-paypal-using-nodejs-4n1g
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
import PaymentService from "./PaymentService";
class PaymentStore {
constructor(paymentWrapper) {
this.paymentWrapper = paymentWrapper;
this.paymentService = new PaymentService();
}
async makeTransaction(chargeData) {
const charge = await this.paymentWrapper.createCharge(chargeData);
await this.paymentService.addNewCharge(charge);
return charge;
}
}
export default PaymentStore;
import Stripe from "stripe";
import mockPayment from "./Stripe/mockPayment";
class StripeServiceWrapper {
constructor() {
this.stripe = new Stripe(process.env.STRIPE_SECRET_KEY);
}
async createCharge() {
const { amount, currency, description, source } = mockPayment;
const charge = await this.stripe.charges.create({
amount,
currency,
description,
source,
});
return charge;
}
async createCustomer(customerData) {
const { name, email, source, address, phone } = customerData;
const customer = await stripe.customers.create({
address,
name,
email,
phone,
source,
});
return customer;
}
}
export default StripeServiceWrapper;
import paypal from "paypal-rest-sdk";
import "./PayPal/PayPalConfig";
class PayPalServiceWrapper {
createCharge({ payment_object, paymentId }) {
return new Promise(function (resolve, reject) {
paypal.payment.execute(paymentId, payment_object, function (error, payment) {
if (error) reject(error);
else {
const { id, transactions } = payment;
resolve({ id, amount: parseInt(transactions[0].amount.total) });
}
});
});
}
paymentExecutionLink(paymentObject) {
return new Promise(function (resolve, reject) {
paypal.payment.create(paymentObject, function (error, payment) {
if (error) reject(error);
else resolve(payment);
});
});
}
getRedirectLink(links) {
for (let i = 0; i < links.length; i++) {
if (links[i].rel === "approval_url") return links[i].href;
}
}
}
export default PayPalServiceWrapper;
const post = async (req, res) => {
const store = new PaymentStore(new StripeServiceWrapper());
await store.makeTransaction();
return res.status(200).send({SUCCESS_MESSAGE});
};
Reference
이 문제에 관하여(Nodejs를 사용하는 결제 게이트웨이 Stripe/Paypal의 종속성 역전), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/eslamelkholy/dependency-inversion-with-payment-gateways-stripe-paypal-using-nodejs-4n1g텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)