URL QueryString中返回的cardIdentifier而非隐藏字段

时间:2019-08-05 23:59:13

标签: asp.net sagepay

我已经将SagePay的“ Drop In Checkout”集成到了测试解决方案中。问题是,当我为“ cardIdentifier”提交表单时,根据文档,表单以QueryString而不是隐藏字段的形式在URL中返回。

http://integrations.sagepay.co.uk/content/getting-started-integrate-using-drop-checkout

“一旦客户启动表单提交,付款明细便会被验证,标记并作为一个名为cardIdentifier的隐藏字段传递,然后与其余表单内容一起过帐”

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="CustomPayment.aspx.cs" Async="true" Inherits="SagePayDropInTest.CustomPayment" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
    <script src="https://pi-test.sagepay.com/api/v1/js/sagepay-dropin.js"></script>

  </head>
  <body>

    <div id="main">
      <h1>My Test Shop</h1>
      <form id ="checkout-form">
        <h2>Payment Details</h2>
        <div id="payment-details"></div>
        <div id="submit-container">
         <input type="submit"/>
        </div>
      </form>
    </div>

<script>
sagepayCheckout({
merchantSessionKey: '<%=MerchID%>',
containerSelector: '#payment-details'
}).form({
formSelector: '#checkout-form'
});
</script>

</body>
</html>

C#代码隐藏

namespace SagePayDropInTest
{
public partial class CustomPayment : System.Web.UI.Page
{
    public string MerchID = "";
    protected void Page_Load(object sender, EventArgs e)
    {
        MerchID = GetMerchSessionID();
}}}

它确实返回cardIdentifier,但只是作为QueryString,但是我宁愿将它作为隐藏字段来获取,如所记录。集成的其余部分均按文档所述进行工作,只是这一步使我感到困惑。

毫无疑问,我缺少明显的东西,任何指导将不胜感激。

1 个答案:

答案 0 :(得分:1)

尝试更改<form>标签以包含method="post"属性。这应该意味着cardIdentifier是作为发布字段而不是在查询字符串中发送的。表单的默认方法通常是GET请求,SagePay JS可能不会对此进行更改。

此外,<form id ="checkout-form">标记中似乎还有一个额外的空间。我建议您删除此内容,因为一些不太宽容的浏览器可能无法正确解析此内容,从而破坏了JS中的CSS选择器。