You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何封装Ripple支付JS代码,实现ASP.NET按钮onClientClick调用及文本框取值

解决ASP.NET中Ripple支付JS封装到函数及文本框取值问题

我来帮你梳理下问题并给出修复后的代码,你的核心问题主要有几个点:Node.js API在浏览器环境不兼容、文本框取值时机不对,还有对JS对象单引号使用的疑问,咱们一个个解决:

问题1:封装函数后无法运行的核心原因

你原来的代码里用到了process.exit(),这是Node.js专属的API,浏览器环境根本没有这个方法,所以封装到浏览器端的函数里直接就会报错,这是导致代码无法运行的关键。

问题2:正确获取ASP.NET TextBox的值

你原来的代码是在全局作用域获取文本框的值,这时候页面刚加载,文本框里是初始值,不是用户点击按钮时输入的最新值。必须把取值逻辑放到abc()函数内部,每次点击按钮时才去读取文本框的内容。

问题3:JS对象中使用单引号的逻辑

在JavaScript里,对象字面量的键和值使用单引号是完全合法的,和双引号的作用完全一致,只要你统一风格就行,不用担心语法问题。


修复后的完整代码

ASP.NET前端部分

<asp:TextBox ID="TextBox1" runat="server" PlaceHolder="目标地址"></asp:TextBox>
<asp:TextBox ID="TextBox2" runat="server" PlaceHolder="目标Tag(可选)"></asp:TextBox>
<asp:TextBox ID="TextBox3" runat="server" PlaceHolder="支付金额"></asp:TextBox>
<asp:Button ID="btnPay" runat="server" Text="发起支付" OnClientClick="abc(); return false;" />

JavaScript部分

function abc() {
    // 注意:这里的address和secret请不要直接硬编码在前端!
    // 生产环境必须放在后端处理,前端暴露密钥会导致资产被盗!
    const address = 'rfginNsDt73fZtzp858dT6Y6U67Y1QB7GV';
    const secret = 'sdfdfsdfsdfdsfdsfsdffd';
    var api = new ripple.RippleAPI({ server: 'wss://s1.ripple.com/' });
    const instructions = { maxLedgerVersionOffset: 5 };

    // 每次点击按钮时才获取文本框的最新值
    var destAddress = document.getElementById('<%= TextBox1.ClientID %>').value.trim();
    var destTag = document.getElementById('<%= TextBox2.ClientID %>').value.trim();
    var payAmount = document.getElementById('<%= TextBox3.ClientID %>').value.trim();

    // 先做简单的输入校验
    if (!destAddress || !payAmount) {
        alert('请填写完整的目标地址和支付金额');
        return;
    }

    // 构建支付对象,动态替换文本框的值
    const payment = {
        source: {
            address: address,
            maxAmount: {
                value: payAmount, // 使用文本框输入的金额
                currency: 'XRP'
            }
        },
        destination: {
            address: destAddress, // 使用文本框输入的目标地址
            tag: destTag ? parseInt(destTag) : undefined, // 处理可选的Tag
            amount: {
                value: payAmount,
                currency: 'XRP'
            }
        }
    };

    // 替换Node.js的exit方法为浏览器端的提示
    function quit(message) {
        console.log(message);
        alert('支付提交成功:' + message);
        api.disconnect(); // 记得断开连接
    }

    function fail(message) {
        console.error(message);
        alert('支付失败:' + message);
        api.disconnect();
    }

    // 执行支付流程
    api.connect()
        .then(() => {
            console.log('已连接到Ripple节点');
            return api.preparePayment(address, payment, instructions);
        })
        .then(prepared => {
            console.log('支付交易已准备');
            const { signedTransaction } = api.sign(prepared.txJSON, secret);
            console.log('支付交易已签名');
            return api.submit(signedTransaction);
        })
        .then(quit)
        .catch(fail);
}

重要注意事项

⚠️ 绝对不要在前端代码中硬编码你的Ripple密钥(secret)!这会导致你的XRP资产直接暴露,任何人都能转走你的钱。生产环境中,必须把签名和提交交易的逻辑放到ASP.NET后端,前端只负责收集用户输入,然后调用后端接口完成支付流程。

内容的提问来源于stack exchange,提问作者Jitender

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 09:04:22