2016-04-27 3 views
2

Ich benutze cybersource stillen Bestellung innerhalb Magento eine Seite Kasse. Ich möchte Ajax Post zu "https://testsecureacceptance.cybersource.com/silent/pay/" machen. Aber es gibt mir unten Fehler: - "XMLHttpRequest kann https://testsecureacceptance.cybersource.com/silent/pay/ nicht laden. Kein 'Access-Control-Allow-Origin'-Header ist auf der angeforderten Ressource vorhanden. Herkunft ist daher nicht zulässig. Die Antwort hatte HTTP-Statuscode 403"Implement cybersource stiller Post mit Ajax

Ich möchte spezifische Antwort auf CyberSource. Lassen Sie mich wissen, ob es eine andere Möglichkeit, außer Ajax

Hier finden Sie meinen Code: -

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

Haben Sie etwas darüber gesucht? – Rayon

+0

Mögliches Duplikat von ["Kein 'Access-Control-Allow-Origin'-Header ist auf der angeforderten Ressource vorhanden"] (http://stackoverflow.com/questions/20035101/no-access-control-allow-origin-header- ist-vorhanden-auf-der-angeforderte-Ressource) – Rayon

Antwort

1

Ich glaube nicht, dass die Cybersource-Endpunkte erlauben AJAX aufruft. Vorausgesetzt, dass AJAX-Anrufe nicht unterstützt werden, ist auf dem CyberSource-Endpunkt keine CORS-Funktion konfiguriert, sodass beim Ausführen von AJAX-Anrufen Fehler angezeigt werden.

Nach der documentation for Silent Order POST sollte das Formular übermittelt werden und der Benutzer umgeleitet werden. Sobald die Zahlung verarbeitet wurde, leitet CyberSource den Benutzer zur entsprechenden Seite weiter. Dies ist sehr ähnlich zu dem Flow, der für CyberSource Secure Acceptance Web/Mobile verwendet wird und sich völlig von den von Adyen, Braintree oder Stripe verwendeten Flows unterscheidet (die tun AJAX-Aufrufe machen, deren Antworten von Ihrem Server verarbeitet werden sollten).

0

CyberSource Secure Acceptance Der Silent Order Post ist ein HTTP FORM POST wie beim Drücken der Senden-Schaltfläche in einem Formular und POST an einen Endpunkt. Das Hochladen von Daten in AJAX wird nicht unterstützt.

Die korrekte API, die hier verwendet wird, ist die CyberSource Flex API. Dies ist für ähnliche AJAX-Aufrufe wie Stripe vorgesehen. Die Dokumentation zu dieser API finden Sie unter Visa Developer Portal - Visa besitzt CyberSource.