用ajax实现cybersource silent order post

时间:2016-04-27 09:37:35

标签: javascript ajax magento payment-gateway

我在magento单页结账时使用cybersource无声订单。我想在" https://testsecureacceptance.cybersource.com/silent/pay/"进行ajax发布。但它给了我以下错误: - " XMLHttpRequest无法加载https://testsecureacceptance.cybersource.com/silent/pay/。 No' Access-Control-Allow-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");
    }
}

2 个答案:

答案 0 :(得分:2)

我不相信Cyber​​Source端点允许AJAX呼叫。鉴于不支持AJAX调用,Cyber​​Source端点没有配置CORS,因此在进行AJAX调用时会出现错误。

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

答案 1 :(得分:0)

Cyber​​Source安全接受无声订单帖子是一种HTTP FORM POST,就像您点击表单上的提交按钮并将其POST到端点一样。它不支持通过AJAX发布数据。

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