मैं ब्रेनट्री के भुगतान ड्रॉपिनयूआई का उपयोग करने की कोशिश कर रहा हूं, और इसे कॉन्फ़िगर करने के लिए मेरे पृष्ठ में जावास्क्रिप्ट फ़ंक्शन पर जेनरेट टोकन भेजने की आवश्यकता है। मेरे रेजर पेज में मेरे पास निम्न मार्कअप है:

<div id="dropin-container"></div>
<button id="submit-button">Request payment method</button>
<script>
    function configureBraintreeClient(clientToken) {
        var button = document.querySelector('#submit-button');

        braintree.dropin.create({
            authorization: clientToken,
            container: '#dropin-container'
        }, function (createErr, instance) {
            button.addEventListener('click', function () {
                instance.requestPaymentMethod(function (requestPaymentMethodErr, payload) {
                    // Submit payload.nonce to your server
                });
        });
    });
}
</script>

Div #dropin-container फंक्शन configBraintreeClient के परिणाम से भर जाता है। इसलिए, जब पृष्ठ लोड होता है तो मुझे क्लाइंट टोकन में पास करने की आवश्यकता होती है।

क्लाइंट टोकन जेनरेट करने के लिए मेरा पेज मॉडल:

public class IndexModel : PageModel
    {
        private readonly IJSRuntime _jsRuntime;

        public IndexModel(IJSRuntime jsRuntime)
        {
            _jsRuntime = jsRuntime;
        }

        public IActionResult OnGet()
        {
            // Create gateway
            var gateway = new BraintreeGateway
            {
                Environment = Environment.SANDBOX,
                MerchantId = "xxxxxxx",
                PublicKey = "xxxxxxx",
                PrivateKey = "xxxxxxx"
            };

            var clientToken = gateway.ClientToken.Generate();

            JSRuntimeExtensions.InvokeVoidAsync(_jsRuntime, "configureBraintreeClient", clientToken);

            // Not sure if this is needed, doesn't work with return type of 
            // void and this line removed either.
            Page();
        }
    }

यह काम नहीं करता। Div कभी आबादी नहीं है।

मैं क्लाइंट टोकन को सीधे मार्कअप में सम्मिलित कर सकता हूं और यह पूरी तरह से चलता है, इसलिए इसका क्लाइंट टोकन पास करने से कुछ लेना-देना है पेज मॉडल से पेज पर। क्या मुझे JSRuntime एक्सटेंशन का उपयोग नहीं करना चाहिए?

मैंने क्लाइंट टोकन को मॉडल प्रॉपर्टी के रूप में सेट करने और इसे रेज़र सिंटैक्स के साथ फ़ंक्शन में डालने का प्रयास किया है जैसे authorization: @Model.ClientToken लेकिन यह काम नहीं करता।

मैंने पृष्ठ जीवन चक्र को बेहतर ढंग से समझने के लिए चारों ओर खुदाई करने की कोशिश की है, लेकिन मुझे जो कुछ भी नहीं मिला है, उसने मुझे इस मुद्दे को समझने में मदद की है।

मुझे अपने ब्राउज़र के डेवलपर कंसोल या विजुअल स्टूडियो में कोई त्रुटि नहीं दिखती है, लेकिन मुझे ASP .NET कोर में जावास्क्रिप्ट डीबग करने के बारे में बहुत कुछ पता नहीं है।

एक जावास्क्रिप्ट फ़ंक्शन में पैरामीटर पास करने का उचित तरीका क्या है जो इस तरह एक div को अद्यतन करता है?

1
Collin Brittain 31 अक्टूबर 2019, 01:37

1 उत्तर

सबसे बढ़िया उत्तर

क्योंकि हमारे पास merchant ID,Public key और Private key नहीं हैं, सुनिश्चित करें कि आपने सही टोकन जेनरेट किया है, तो आप इसे आजमा सकते हैं:

1. इंडेक्स मॉडल ():

private readonly IJSRuntime _jsRuntime;

public IndexModel(IJSRuntime jsRuntime)
{
    _jsRuntime = jsRuntime;
}

[BindProperty]
public string clientToken { get; set; }

public void OnGet()
{
    // Create gateway
    var gateway = new BraintreeGateway
    {
        Environment = Braintree.Environment.SANDBOX,
        MerchantId = "xxxxxxx",
        PublicKey = "xxxxxxx",
        PrivateKey = "xxxxxxx"
    };

    clientToken = gateway.ClientToken.Generate();

    JSRuntimeExtensions.InvokeVoidAsync(_jsRuntime, "configureBraintreeClient", clientToken);
}

2. रेजर पेज (फ़ंक्शन का उपयोग करने की आवश्यकता नहीं है):

<div id="dropin-container"></div>
<button id="submit-button">Request payment method</button>

<script src="https://js.braintreegateway.com/web/dropin/1.20.4/js/dropin.min.js">
</script>
    <script>
            var button = document.querySelector('#submit-button');
            braintree.dropin.create({
                authorization: '@Model.clientToken',
                container: '#dropin-container'
            }, function (createErr, instance) {
                button.addEventListener('click', function () {
                    instance.requestPaymentMethod(function (requestPaymentMethodErr, payload) {
                        // Submit payload.nonce to your server
                    });
            });
        });
    </script>

3. टेस्ट (आप देख सकते हैं कि टोकन जेएस में भर गया है): यहां छवि विवरण दर्ज करें संदर्भ:

https://developers.braintreepayments.com/start/hello-client/javascript/v3

मैं सीधे मार्कअप में क्लाइंट टोकन डाल सकता हूं और यह पूरी तरह से चलता है, इसलिए पेज मॉडल से पेज पर क्लाइंट टोकन पास करने के साथ इसका कुछ संबंध है। क्या मुझे JSRuntime एक्सटेंशन का उपयोग नहीं करना चाहिए?

इसके लिए, यदि आप क्लाइंट टोकन का उपयोग करना चाहते हैं, तो मेरा सुझाव है कि आप इसका उल्लेख कर सकते हैं: https://developers.braintreepayments.com/start/tutorial-drop-in- नोड

प्राधिकरण के लिए, आप tokenization key का भी उपयोग कर सकते हैं।

1
Rena 31 अक्टूबर 2019, 03:28