2017-05-01 61 views
0

我下面的PayPal的REST教程這裏:https://code.tutsplus.com/articles/paypal-integration-part-2-paypal-rest-api--cms-22917貝寶.NET MVC CORS錯誤

我在控制器方法(下),我相信這是造成問題的重定向行有這樣的,前行伸出paypal獲得一個沒有問題的ID。 payment.GetApprovalUrl()檢索錯誤信息中列出的網址:

public ActionResult CreatePayment() 
{ 
var userId = _userRepository.LoggedInUserId(); 
var cart = _cartRepository.GetCart(userId); 
var payment = PayPalRepository.CreatePayment(GetBaseUrl(), 
"sale",cart); 
return Redirect(payment.GetApprovalUrl()); 
} 

此操作方法是從PayPal按鈕的javascript調用:

payment: function(resolve, reject) { 
    // Set up the payment here, when the buyer clicks on the button 
    var env = this.props.env; 
    var client = this.props.client; 

    var CREATE_PAYMENT_URL = 'http://localhost:3259/Payment/CreatePayment'; 
    return paypal.request.post(CREATE_PAYMENT_URL) 
     .then(function (data) { 
      console.log('data: ' + data); 
      resolve(data.paymentID); 
     }) 
     .catch(function (err) { reject(err); }) 

的執行console.log語句根本不會執行,瀏覽器控制檯顯示此錯誤: XMLHttpRequest無法加載https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=EC-7EL20553GB692634H。請求的資源上沒有「Access-Control-Allow-Origin」標題。

我已經標有AllowCrossSiteJson屬性控制器(在計算器中,將參照作者更新)如下:

public override void OnActionExecuting(ActionExecutingContext filterContext) 
     { 
      var ctx = filterContext.RequestContext.HttpContext; 
      var origin = ctx.Request.Headers["Origin"]; 
      var allowOrigin = !string.IsNullOrWhiteSpace(origin) ? origin : "*"; 
      ctx.Response.AddHeader("Access-Control-Allow-Origin", allowOrigin); 
      ctx.Response.AddHeader("Access-Control-Allow-Headers", "*"); 
      ctx.Response.AddHeader("Access-Control-Allow-Credentials", "true"); 
      base.OnActionExecuting(filterContext); 

     } 

什麼我做錯了,或者沒有做,爲了得到通過這個錯誤?

+1

錯誤說失敗是因爲來自https://www.sandbox.paypal.com/cgi-bin/webscr?cmd = _express-checkout&token = EC-7EL20553GB692634H'的響應沒有'Access- Control-Allow-Origin'響應標題。您對自己的服務器端代碼所做的任何更改都不會解決該問題。無論您將自己的服務器配置爲發送什麼標題都無關緊要 - 問題是,Paypal不會發送正確的標題,並且您不能讓Paypal發送任何其他響應標題。 – sideshowbarker

+0

因此,您的選擇是從後端代碼向PayPal發出請求或設置CORS代理https://stackoverflow.com/questions/20035101/no-access-control-allow-origin-header-is-present-on -the-requested-resource/42744707#42744707 – sideshowbarker

+0

我一定在做錯事......本教程:https://www.codeproject.com/Articles/870870/Using-Paypal-Rest-API-with-ASP-NET -MVC具有相同的基本範例和完全相同的代碼行:return Redirect(paypalRedirectUrl); – user1202839

回答

0

解決方案是,服務器端代碼應該只返回payment.id作爲json,而不是授權url。