与NextJS集成的Redsys介绍15

与nextjs集成的redsys介绍15

如今,众多企业寻求在线盈利途径,例如SaaS、电商或其他网络应用。虽然Stripe和PayPal等全球支付平台普及,但不同国家/地区偏好各有不同。在西班牙,Redsys几乎主导所有在线银行交易。Redsys是一个基于SOAP API的平台,旨在简化和保障西班牙银行网络的数字支付。尽管功能强大,但其独特的集成需求也带来挑战。本教程将指导您如何使用Next.js 15和服务器端操作,快速有效地构建基于重定向的Redsys支付流程。

一、设置Next.js 15和安装Redsys-Easy

创建Next.js 15项目:

npx create-next-app@latest my-redsys-projectcd my-redsys-project

登录后复制安装依赖项:

npm install redsys-easy

登录后复制

二、配置环境变量

在项目根目录下创建.env.local文件,并添加以下环境变量(确保这些变量在服务器端保持安全):

NEXT_PUBLIC_redsys_merchant_code=YOUR_MERCHANT_CODENEXT_PUBLIC_redsys_terminal=YOUR_TERMINALNEXT_PUBLIC_redsys_secret_key=YOUR_SECRET_KEYNEXT_PUBLIC_url=YOUR_APP_URL //你的应用URL

登录后复制

三、创建Redsys客户端 (src/lib/redsys.ts)

import { createredsysapi, sandbox_urls } from 'redsys-easy';export const { createredirectform, processrestnotification } = createredsysapi({  secretkey: process.env.NEXT_PUBLIC_redsys_secret_key!,  urls: sandbox_urls});

登录后复制

createredirectform 用于生成重定向表单;processrestnotification 用于处理Redsys的支付通知(后续步骤)。

四、创建支付服务器操作 (src/app/api/pay/route.ts)

'use server';import { currencies, transaction_types, randomtransactionid } from 'redsys-easy';import { createredirectform } from '@/lib/redsys';import Decimal from 'decimal.js';const merchantInfo = {  ds_merchant_merchantcode: process.env.NEXT_PUBLIC_redsys_merchant_code!,  ds_merchant_terminal: process.env.NEXT_PUBLIC_redsys_terminal!,  ds_merchant_transactiontype: transaction_types.authorization};export async function POST(req: Request) {  try {    const { orderId, amount } = await req.json();    const currencyInfo = currencies['eur'];    const redsysAmount = new Decimal(amount).mul(10 ** currencyInfo.decimals).toFixed(0);    const redsysCurrency = currencyInfo.num;    const form = createredirectform({      ...merchantInfo,      ds_merchant_order: orderId,      ds_merchant_amount: redsysAmount,      ds_merchant_currency: redsysCurrency,      ds_merchant_urlok: `${process.env.NEXT_PUBLIC_url}/success`,      ds_merchant_urlko: `${process.env.NEXT_PUBLIC_url}/failure`,      ds_merchant_transactiondate: new Date().toISOString()    });    return new Response(JSON.stringify(form));  } catch (error) {    console.error("Error initiating payment:", error);    return new Response(JSON.stringify({ error: 'Payment initiation failed' }), { status: 500 });  }}

登录后复制

五、前端实现 (pages/checkout.tsx)

import React, { useState } from 'react';const CheckoutForm = () => {  const [paymentForm, setPaymentForm] = useState(null);  const handleSubmit = async (e: React.FormEvent) => {    e.preventDefault();    const response = await fetch('/api/pay', {      method: 'POST',      headers: { 'Content-Type': 'application/json' },      body: JSON.stringify({ orderId: '123', amount: 10 }) // Replace with your order ID and amount    });    const data = await response.json();    setPaymentForm(data);  };  return (                {paymentForm && (                  {Object.entries(paymentForm.body).map(([key, value]) => (                      ))}              )}      );};export default CheckoutForm;

登录后复制

六、成功/失败页面 (pages/success.tsx, pages/failure.tsx) 这部分需要根据实际需求添加处理逻辑。

七、结论

本教程演示了如何使用Redsys-Easy库在Next.js 15中集成Redsys支付网关。 请记住替换占位符值为您自己的商户信息和URL。 生产环境部署时,请将sandbox_urls更改为production_urls,并确保正确处理支付通知。

八、致谢

感谢Javier Tury开发的redsys-easy包。

注意: 本代码示例仅供参考,实际应用中可能需要根据Redsys API规范和您的具体需求进行调整。 请仔细阅读Redsys的官方文档。 错误处理和安全性措施也需要在生产环境中得到充分考虑。

以上就是与NextJS集成的Redsys介绍15的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2640507.html

(0)
上一篇 2025年3月7日 06:19:15
下一篇 2025年3月6日 17:24:28

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 在不到两分钟的时间内旋转新铁路上的许可证密钥API!

    Railway 的新功能特性让部署单文件微服务变得轻而易举,无需管理基础设施或代码库。本文将演示如何使用 Hono、Redis 和 Bun 运行时,在一个文件中构建一个许可证 API。准备开始构建吧! 注意: Railway 功能非常适合处…

    2025年3月7日
    200
  • 您是在犯这些Nodejs安全错误吗?

    介绍 >在2016年,当黑客通过利用私人github存储库中的暴露凭据访问其aws s3服务器时,uber面临严重的安全漏洞。该服务器包含5700万用户和60万驱动程序的敏感数据。违规发生是由于不良的访问控制和凭证管理在其node.j…

    编程技术 2025年3月7日
    200
  • 如何修复“无’访问控制 – 允许孔”标题”错误

    您可能遇到过令人头疼的“无访问控制-允许来源”错误。本文将提供多种解决方案,助您轻松修复此网络开发常见问题。 CORS错误 理解“无访问控制-允许来源”错误 此错误主要分为两种情况: 缺少Access-Control-Allow-Origi…

    2025年3月7日
    200
  • 承诺解决了

    在将Promise集成到工作流程时,并非所有函数都需要是Promise,关键在于保持Promise链的完整性。 谨记:勿断链 正如Fleetwood Mac所唱,“永远不要打破链条”。 在异步工作流程中,避免从外部访问异步操作的结果是至关重…

    2025年3月7日
    200
  • 双向将信号输入对象值绑定为[(ngmodel)]

    最近,我遇到了这一挑战…重构形式成分的角度信号。 旧形式组件的工作原理: > 表单数据来自反应性状态服务>表单数据是对象>在将其传递给form component>之前,将其形式数据克隆到克隆之前表单组件…

    2025年3月7日
    200
  • 具有观察型的国家管理

    将列表渲染到DOM并管理其状态与管理简单变量的状态大相径庭。 一些库使用特殊的标识符,称为“键”,来启用其增量渲染引擎,从而确定发生了哪些更改以及需要移动哪些内容:“`javascript{friends.map(friend …

    2025年3月7日
    200
  • 用尾风CSS构建可扩展和可重复使用的反应组件

    在现代Web开发中,构建可扩展、可复用的组件对于保持代码库的整洁和高效至关重要。React基于组件的架构非常适合此目的。结合Tailwind CSS(一个实用优先的CSS框架),您可以创建高度可定制且易于维护的UI组件。本文将探讨如何使用T…

    2025年3月7日
    200
  • 了解大o符号

    掌握大O符号,先要理解算法的概念。在计算机科学中,大O符号用于分析算法的时间和空间复杂度随输入规模增长的情况。 通过大O符号,我们可以比较不同算法的效率,选择最优解,确保算法在输入规模增大时仍能保持良好的性能。大O符号关注算法的可扩展性,让…

    2025年3月7日
    200
  • 从HTML创建PDF

    从html创建pdf:一种无需php库的简易方法 许多开发者使用PHP库(如tcpdf)从HTML生成PDF,但这些库代码复杂,修改困难且效率低下。本文介绍一种更简洁的方法,利用JavaScript库jspdf和jspdf-autotabl…

    2025年3月7日
    200
  • 在实践中反应:用钩子改善形式

    使用表格 一个常见的情况是处理表格的逻辑,可以为自定义钩提取 // form.tsximport { formeventhandler, usestate } from “react”;function forms() { const [t…

    编程技术 2025年3月7日
    200

发表回复

登录后才能评论