我在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");
}
}
答案 0 :(得分:2)
我不相信CyberSource端点允许AJAX呼叫。鉴于不支持AJAX调用,CyberSource端点没有配置CORS,因此在进行AJAX调用时会出现错误。
根据documentation for Silent Order POST,应提交表单并重定向用户。处理完付款后,CyberSource会将用户重定向到相应的页面。这与用于CyberSource安全接受Web / Mobile的流程非常相似,与Adyen,Braintree或Stripe使用的流程完全不同(做进行AJAX调用,其响应应由您的处理服务器)。
答案 1 :(得分:0)
CyberSource安全接受无声订单帖子是一种HTTP FORM POST,就像您点击表单上的提交按钮并将其POST到端点一样。它不支持通过AJAX发布数据。
此处使用的正确API是CyberSource Flex API。这是为类似于Stripe的AJAX调用而设计的。您可以在Visa Developer Portal上找到此API的文档 - Visa拥有CyberSource。