【问题标题】:Implement cybersource silent order post with ajax使用 ajax 实现网络源静默订单发布
【发布时间】:2016-08-21 12:30:20
【问题描述】:

我在 magento 一页结帐中使用网络资源静默订单发布。我想做 ajax 发布到“https://testsecureacceptance.cybersource.com/silent/pay/”。但它给了我以下错误: - “XMLHttpRequest 无法加载 https://testsecureacceptance.cybersource.com/silent/pay/。请求的资源上没有 'Access-Control-Allow-Origin' 标头。因此不允许访问 Origin。响应的 HTTP 状态代码为 403”

我想要特定于网络资源的答案。让我知道除了 ajax 是否还有其他选择

请在下面找到我的代码:-

var url = jQuery("#post_url").val();
var access_key=jQuery("#access_key").val();
var profile_id=jQuery("#profile_id").val();
var signed_field_names=jQuery("#signed_field_names").val();
var unsigned_field_names=jQuery("#unsigned_field_names").val();
var bill_to_forename=jQuery("#bill_to_forename").val();
var bill_to_surname=jQuery("#bill_to_surname").val();
var bill_to_email=jQuery("#bill_to_email").val();
var bill_to_phone=jQuery("#bill_to_phone").val();
var bill_to_address_line1=jQuery("#bill_to_address_line1").val();
var bill_to_address_city=jQuery("#bill_to_address_city").val();
var bill_to_address_state=jQuery("#bill_to_address_state").val();
var bill_to_address_country=jQuery("#bill_to_address_country").val();
var bill_to_address_postal_code=jQuery("#bill_to_address_postal_code").val();
var signed_date_time=jQuery("#signed_date_time").val();
var locale=jQuery("#locale").val();
var card_type=jQuery("#cybersource_cc_type").val();
var card_number=jQuery("#cybersource_cc_number").val();
var card_expiry_date=jQuery("#cybersource_expiration").val();
var params ='access_key='+access_key+ '&profile_id='+profile_id+ '&signed_field_names='+signed_field_names+ '&bill_to_forename='+bill_to_forename+ '&bill_to_surname='+bill_to_surname+ '&bill_to_email='+bill_to_email+'&bill_to_phone='+bill_to_phone+'&bill_to_address_line1='+bill_to_address_line1+'&bill_to_address_city='+bill_to_address_city+'&bill_to_address_state='+bill_to_address_state+'&bill_to_address_country='+bill_to_address_country+'&bill_to_address_postal_code='+bill_to_address_postal_code+'&signed_date_time='+signed_date_time+'&locale='+locale+'&card_type='+card_type+'&card_number='+card_number+'&card_expiry_date='+card_expiry_date;
//alert(url);
var http= new XMLHttpRequest();
http.open("POST", url, true);
http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
http.send(params);
//Send the proper header information along with the request

http.onreadystatechange = function() {//IT NEVER COMES BACK TO THIS SECTION
    if(http.readyState == 4) {
        alert(http.responseText);
        console.log("I came back");
    }
}

【问题讨论】:

标签: javascript ajax magento payment-gateway


【解决方案1】:

Cyber​​Source Secure Acceptance Silent Order Post 是一种 HTTP FORM POST,就像您点击表单上的提交按钮并将其 POST 到端点时一样。它不支持通过 AJAX 发布数据。

此处使用的正确 API 是 Cyber​​Source Flex API。这是为类似于 Stripe 的 AJAX 调用而设计的。您可以在 Visa Developer Portal 上找到此 API 的文档 - Visa 拥有 Cyber​​Source。

【讨论】:

    【解决方案2】:

    我认为 Cyber​​Source 端点不允许 AJAX 调用。鉴于不支持 AJAX 调用,Cyber​​Source 端点没有配置 CORS,因此您在进行 AJAX 调用时会看到错误。

    根据documentation for Silent Order POST,应该提交表单并重定向用户。处理完付款后,Cyber​​Source 会将用户重定向到相应的页面。这与 Cyber​​Source Secure Acceptance Web/Mobile 使用的流程非常相似,与 Adyen、Braintree 或 Stripe 使用的流程完全不同(它们确实发出 AJAX 调用,其响应应由您的服务器)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-09
      • 1970-01-01
      • 2011-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-15
      • 1970-01-01
      相关资源
      最近更新 更多