oof 多么美好的一天,试图找出动态注入 sdk.js 并使用 src = some url 创建按钮标签。
我已将所有 js 代码添加到文件脚本中,以基于参数注入 sdk 并保存在 wwwroot 下,但由于某种原因,我的函数无法被 server.js 检测到
得到的异常是 - 错误:Microsoft.JSInterop.JSException:在“窗口”中找不到“initializeSDK”。
这是我的js代码
window.initializeSDK = {
ejectInjectSdk: function (action, environment) {
var script = document.createElement('script');
if (action == "inject") {
if (self === top) {
var antiClickjack = document.getElementById("antiClickjack");
antiClickjack.parentNode.removeChild(antiClickjack);
} else {
top.location = self.location;
}
if (environment == 'Sandbox') {
script.type = 'text/javascript';
script.src = "https://sandbox-assets.secure.checkout.visa.com/checkout-widget/resources/js/integration/v1/sdk.js";
document.body.append(script);
} else if (environment == 'live') {
script.type = 'text/javascript';
script.src = "https://assets.secure.checkout.visa.com/checkout-widget/resources/js/integration/v1/sdk.js";
document.body.append(script);
}
} else if (action == "eject") {
if (environment == 'Sandbox') {
$("script[src='https://sandbox-assets.secure.checkout.visa.com/checkout-widget/resources/js/integration/v1/sdk.js']").remove();
} else if (environment == 'live') {
$("script[src='https://assets.secure.checkout.visa.com/checkout-widget/resources/js/integration/v1/sdk.js']").remove();
}
}
$("#vcoholder").hide();
},
ejectInjectBtn: function (initpayload) {
$("#vcoholder").append("<img alt='Visa Checkout' class='v-button' role='button' src='https://sandbox.secure.checkout.visa.com/wallet-services-web/xo/button.png' />");
onVisaCheckoutReady(initpayload);
$("#vcoholder").show();
},
onVisaCheckoutReady: function (initpayload) {
console.log(initpayload);
V.init(initpayload);
V.on("payment.success", function (payment) {
console.log(payment);
var obj = {};
obj.isLive = false;
obj.apikey = $.trim($("#apikey").val());
obj.sharedsecretkey = $.trim($("#sharedsecretkey").val());
obj.encapikey = $.trim($("#encapikey").val());
obj.encsharedsecretkey = $.trim($("#encsharedsecretkey").val());
obj.encKey = payment.encKey;
obj.encPaymentData = payment.encPaymentData;
obj.vInitRequest = payment.vInitRequest;
obj.callid = payment.callid;
console.log("Payload sending to server " + JSON.stringify(obj));
$.ajax({
type: "POST",
url: '../api/Restful/Getresultsv2',
data: JSON.stringify(obj),
dataType: "json",
success: function (result) {
console.log(result);
$("#displayJson").jsonViewer(result, {
collapsed: false,
withQuotes: true
})
}
});
});
V.on("payment.cancel", function (payment) {
console.log(JSON.stringify(payment));
});
V.on("payment.error", function (payment, error) {
console.log(JSON.stringify(error));
});
}
};
并在下面完成剃须刀页面-
@page "/ClicktoPay"
@using Microsoft.AspNetCore.Authorization
@using Zapy.Server.ViewModels
@using Zapy.Server.Servcies
@using Zapy.Server.Models.Clicktopay;
@using Newtonsoft.Json;
@inject CheckoutService Checkoutservice
@inject IJSRuntime JSRuntime
@using Microsoft.Extensions.Configuration
@inject IConfiguration Configuration
<h3>Component1</h3>
<div id="nonsegmentedkeys" class="row">
<div class="col">
<div class="card" style="height: 560px;">
<div class="card-body">
<EditForm Model="@clicktoPayViewModel">
<div id="segmentedkeys">
<div class="form-group">
<label for="encryptionapikey">Encryption's Apikey</label>
<InputText class="form-control form-control-sm" id="encryptionapikey" @bind-Value="clicktoPayViewModel.EncryptionKey" />
</div>
<div class="form-group">
<label for="encryptionsharedsecretkey">Encryptions's Sharedsecret</label>
<InputText class="form-control form-control-sm" id="encryptionsharedsecretkey" @bind-Value="clicktoPayViewModel.EncryptionSharedsecret" />
</div>
<div class="form-group ">
<label for="inboundapikey">Inbound Apikey</label>
<InputText class="form-control form-control-sm" id="inboundapikey" @bind-Value="clicktoPayViewModel.InboundApikey" />
</div>
<div class="form-group">
<label for="inboundsharedsecret">Inbound Sharedsecret</label>
<InputText class="form-control form-control-sm" id="inboundsharedsecret" @bind-Value="clicktoPayViewModel.InboundSharedsecret" />
</div>
</div>
</EditForm>
<div id="vcoholder">
</div>
</div>
<div class="card-footer">
<button class="btn btn-primary" @onclick="CreateClicktopay">Initialize ClicktoPay</button>
</div>
</div>
</div>
<div class="col">
<div class="card">
<div class="card-body">
<h5 class="card-title">Initialize parameters here</h5>
<textarea id="displayJson" value="@clicktoPayViewModel.InitParameters" style="width: 550px; height: 480px;" rows="10"></textarea>
</div>
</div>
</div>
</div>
@code {
private ClicktoPayViewModel clicktoPayViewModel = new ClicktoPayViewModel();
protected override async Task OnInitializedAsync()
{
clicktoPayViewModel = await Checkoutservice.GetClicktoPayDefaultAsync();
}
public async Task CreateClicktopay()
{
await JSRuntime.InvokeVoidAsync("initializeSDK.ejectInjectSdk", "inject", "Sandbox");
await JSRuntime.InvokeVoidAsync("initializeSDK.ejectInjectBtn", clicktoPayViewModel.InitParameters);
}
}
