与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的详细内容,更多请关注创想鸟其它相关文章!

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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月19日 23:35:56
下一篇 2025年12月19日 09:12:18

相关推荐

  • 为什么在网站中选择seo的nextJ?

    Next.js:提升网站SEO的利器 在当今竞争激烈的网络环境中,拥有一个易于搜索引擎发现的网站至关重要。SEO(搜索引擎优化)是关键,而Next.js正成为许多开发者的首选框架。如果您是自由职业的Web开发者,React开发者,或正计划雇佣自由职业者进行网站开发,那么了解Next.js对SEO的益…

    好文分享 2025年12月19日
    000
  • 在不到两分钟的时间内旋转新铁路上的许可证密钥API!

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

    2025年12月19日
    000
  • 您是在犯这些Nodejs安全错误吗?

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

    好文分享 2025年12月19日
    000
  • 掌握get和在API中发布:路由参数与查询参数

    理解GET和POST请求以及如何有效运用查询参数(req.query)和路由参数(req.params)是构建健壮API的关键。 GET请求 GET请求用于从服务器获取数据,类似于提出问题,不会修改服务器状态。 // 客户端请求:fetch(‘https://api.example.com/user…

    2025年12月19日
    000
  • 如何修复“无’访问控制 – 允许孔”标题”错误

    您可能遇到过令人头疼的“无访问控制-允许来源”错误。本文将提供多种解决方案,助您轻松修复此网络开发常见问题。 CORS错误 理解“无访问控制-允许来源”错误 此错误主要分为两种情况: 缺少Access-Control-Allow-Origin CORS头信息:浏览器无法验证是否允许跨域请求。Acce…

    2025年12月19日
    000
  • 承诺解决了

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

    2025年12月19日
    000
  • 双向将信号输入对象值绑定为[(ngmodel)]

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

    2025年12月19日
    000
  • 掌握Rollupjs:从基础到高级

    Rollup.js入门指南:高效的ES模块打包工具 Rollup.js 是一款轻量级的 JavaScript 模块打包器,尤其擅长处理 ES 模块。与Webpack等重量级打包器相比,它配置简单,学习成本低,生成的代码更简洁高效。本文将介绍 Rollup.js 的基本用法,并说明其优势。 一、为什么…

    2025年12月19日
    000
  • 使用我们的业务电子邮件数据库与德国的主要决策者联系

    德国是欧洲经济强国,对寻求拓展业务的企业而言至关重要。ready mailing团队提供的德国企业邮箱数据库,让您的企业能够接触到来自it、金融、医疗、零售等多个行业的数千个已验证联系人。这个全面且符合gdpr的数据库,旨在帮助您精准定位目标受众,与决策者建立联系,从而加速德国市场的业务增长。 什么…

    2025年12月19日
    000
  • 为您的React应用程序选择正确的CSS方法

    React应用的样式化方法多种多样,选择哪种方法取决于个人喜好、项目需求和团队协作。以下列举了五种常见的React应用CSS方法。 1. 标准CSS 在独立的.css文件中编写CSS代码,然后导入到React组件中。 /* styles.css */.button { background-colo…

    2025年12月19日
    000
  • 反应性组件热加载与状态保存

    现代网络开发追求快速、流畅的用户体验。然而,传统的全页刷新机制在应用代码更改时会清除用户输入、身份验证数据和导航历史,迫使开发者每次更新后都重新搭建测试环境。热重载技术应运而生,它在保持应用状态的同时实时更新代码,显著提升了开发效率。 热重载允许开发者实时查看UI更改并进行测试,无需重置应用。Rea…

    2025年12月19日
    000
  • 医生旅程:恢复在线交易中损失的资金

    我叫Patrick Bonneau,在洛杉矶行医已有15年。我对比特币和其他加密货币平台并不了解,因此不幸掉入了一个在线交易骗局,损失近150万美元。起初,该平台看起来很正规,有专业的视频和诱人的收益截图。投资后,初期一切顺利,骗子还会定期更新信息。但很快,平台就失联了,我无法访问账户或提取资金,身…

    2025年12月19日
    000
  • JS中的简单内存数据库

    大家好! 我最近完成了一个很有趣的项目:一个基于JavaScript的简易内存数据库。这个项目的目标是提升我对对象回收机制的理解,并深入学习数据库底层运作原理。 我特别想实现一种直观的查询功能,能够进行数据过滤操作,这在很多项目中都非常实用。 我的设计灵感来源于Prisma ORM,力求打造一个简洁…

    2025年12月19日
    000
  • JavaScript对象魔术

    本文探讨JavaScript对象赋值的特性及其潜在问题,并提供解决方案。 对象赋值与引用: 以下代码片段演示了JavaScript对象赋值的机制: const person = { firstname: ‘ajay’, lastname: ‘kumar’, hobbies: [‘cricket’, …

    2025年12月19日
    000
  • 第三方图书馆的隐藏成本:当&#don&#t重新发明车轮&#错误

    程序员奉为圭臬的信条之一是“不要重复造轮子”。然而,如同软件开发中的许多绝对性断言一样,实际情况远比这复杂。本文将探讨引入看似便捷的npm包时,其成本可能远高于自行编写代码的情况。 免费代码的陷阱 我们都经历过:需要实现某个功能,恰好有一个npm包能完美胜任。它很流行,维护良好,只需npm inst…

    2025年12月19日
    000
  • 容器安全市场将达到2美元

    全球市场研究机构CrediculousResearch®发布的报告《集装箱安全市场——全球机遇分析与行业预测(2025-2032)》指出,到2032年,集装箱安全市场规模预计将达到127.5亿美元,2025年至2032年的复合年增长率为23.6%。 AI和ML技术在容器安全解决方案中的广泛应用、对云…

    2025年12月19日
    000
  • js怎么截取指定字符串方法

    字符串截取方法:substring(startIndex, endIndex): 不包含 endIndex,startIndex 大于 endIndex 时会自动交换。slice(startIndex, endIndex): 不包含 endIndex,可接受负数表示从尾部开始倒数。substr(st…

    2025年12月19日
    000
  • js判断字符串是否包含某个字符方法

    是的,JavaScript 中存在多种方法可以判断字符串是否包含某个字符:indexOf():返回子字符串的第一个索引(如果未找到,则返回 -1)。正则表达式:使用正则表达式匹配任何复杂的模式,包括多个匹配项。includes():ES6 方法,专门用于判断字符串是否包含子字符串。 JS 字符串包含…

    2025年12月19日
    000
  • 最终的Web开发入门工具包

    这份资源合集旨在帮助您快速入门Web开发。它涵盖了学习资源、开发工具、框架库、设计素材、测试调试工具、API集成以及网站分析工具等多个方面。 一、学习资源 资源 说明 W3SchoolsWeb开发初学者友好的教程和参考文档。freeCodeCamp免费的、自定进度的编程教程,适合初学者。Udemy提…

    2025年12月19日
    000
  • 使用开放的Web服务发布订阅消息传递

    本文将演示如何利用eyevinn开源云提供的开放式web服务构建一个发布/订阅消息传递(pub/sub)应用程序。pub/sub是一种异步通信模型,是构建可扩展和分布式系统的重要组成部分。我们将使用valkey,一个基于eyevinn开源云的开放式web服务,来实现此功能。 本教程将指导您完成以下步…

    2025年12月19日
    000

发表回复

登录后才能评论
关注微信