首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Blazer服务器:设置Braintree支付Javascript和.NET开发工具包及应用程序接口

Blazer服务器:设置Braintree支付Javascript和.NET开发工具包及应用程序接口
EN

Stack Overflow用户
提问于 2021-05-24 17:52:44
回答 1查看 68关注 0票数 0

我找不到任何使用Blazer服务器应用程序设置Braintree Javascript.NET SDK的示例。

Brainstree工作流是在客户端收集用户信用卡数据,然后客户端返回一个令牌,Braintree称之为Nonce。这样,用户的信用卡数据就不会通过您的应用程序或存储在您的应用程序中。您将nonce传递给服务器,然后服务器处理付款。

我不确定如何让javascript与Blazer服务器一起工作,然后在服务器端需要做什么。

EN

回答 1

Stack Overflow用户

发布于 2021-05-24 17:52:44

我能够让Brainstree sandbox的支付流程工作。

  1. 将Braintree javascript库添加到_Host.cshtml文件

代码语言:javascript
复制
<!-- braintree-->
<script type="text/javascript" src="https://js.braintreegateway.com/web/dropin/1.29.0/js/dropin.js">
</script>

</head>

  1. 将Braintree函数添加到_Host.cshtml文件(应该放在单独的js文件中)

代码语言:javascript
复制
<script>
window.brainstreePayment = (clientToken, dotNetObject) => {
    //alert(clientToken);
    var button = document.querySelector('#submit-button');
    braintree.dropin.create({
        authorization: clientToken,
        selector: '#dropin-container'
    }, function (err, instance) {
        button.addEventListener('click', function () {
            instance.requestPaymentMethod(function (requestPaymentMethodErr, payload) {
                if (requestPaymentMethodErr) {
                    // No payment method is available.
                    // An appropriate error will be shown in the UI.
                    console.error(requestPaymentMethodErr);
                    return;
                }      
                dotNetObject.invokeMethodAsync('MakePayment', payload.nonce);
            });
        })
    });
}
</script>
</body>

  1. 创建Payment.razor文件

代码语言:javascript
复制
@page "/PaymentSubmit/"

@using Braintree;
@using Microsoft.Extensions.Logging;
@inject IJSRuntime JSRuntime;
@inject ILogger<Counter> logger;


<label for="Amount">In the Amount:</label>
<input id="Amount" name="Amount" type="tel" min="1" @bind="@Amount" />
<br>
<br>

<div id="dropin-container"></div>

<div id="dropin-wrapper">
    <div id="checkout-message"></div>
    <div id="dropin-container"></div>
    <button id="submit-button">Pay</button>
</div>
<br>
PaymentTransactionId: @PaymentTransactionId
<br>

@code {

   
    public string ClientToken { get; set; }   
    public string Nonce { get; set; }   
    public string Amount { get; set; }    
    public string PaymentTransactionId { get; set; }    

    public BraintreeGateway gateway = new BraintreeGateway
    {
        Environment = Braintree.Environment.SANDBOX,
        MerchantId = "GetFromBraintree",
        PublicKey = "GetFromBraintree",
        PrivateKey = "GetFromBraintree"
    };


    protected override async Task OnAfterRenderAsync(bool firstRender)
    {
        if (firstRender)
        {
            ClientToken = gateway.ClientToken.Generate();
            var dotNetReference = DotNetObjectReference.Create(this);        
            await JSRuntime.InvokeVoidAsync("brainstreePayment", ClientToken, dotNetReference);
        }
    }

    [JSInvokable("MakePayment")]
    public void MakePayment(string Nonce)
    {

        logger.LogWarning(Nonce);
        logger.LogWarning(Amount);
        decimal newAmount = Convert.ToDecimal(Amount);
        var request = new TransactionRequest
        {
            Amount = newAmount,
            PaymentMethodNonce = Nonce,
            Options = new TransactionOptionsRequest
            {
                SubmitForSettlement = true
            }
        };

        Result<Transaction> result = gateway.Transaction.Sale(request);
        if (result.IsSuccess())
        {
            Transaction transaction = result.Target;
            logger.LogWarning("transaction success");
            PaymentTransactionId = transaction.Id;
            StateHasChanged();

            @*redirect*@
        }
        else if (result.Transaction != null)
        {
            @*redirect*@
            logger.LogWarning("transaction null");
        }
        else
        {
            string errorMessages = "";
            foreach (ValidationError error in result.Errors.DeepAll())
            {
                errorMessages += "Error: " + (int)error.Code + " - " + error.Message + "\n";
            }
            logger.LogWarning("transaction error");
            logger.LogWarning(errorMessages);
        }
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67669973

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档