2017-02-09 1 views
0

내가 의 asp.net MVC와 페이팔 익스프레스 체크 아웃 (checkout.js의 V4.0.0)를 사용하고 사용자가 데이터 트랜잭션을 지불 할 수 있도록 클릭 확인 지불 버튼을 수행 할 수 있습니다. 익스프레스 체크 아웃 버튼을 클릭 할 때해야 할 일은 데이터베이스에 대한 일부 검사를 수행하고 PayPal이 처리 할 수 ​​있는지 확인하는 것입니다 (데이터베이스가 잠긴 처리 상태 일 수 있으므로 시간과 관련이 있습니다).페이팔 익스프레스 체크 아웃 :

나는 설정에게 Advanced Server Integration을했습니다 그리고 난 다음 paypal.Button.render에 지불 섹션에서 만들 지불을 컨트롤러를 부르지 만, 이것은 PaymentID 요소와 json 객체가 반환 될 것으로 기대하고있다. 어떤 시점에서 서버 측에서 이러한 점검을 수행하고 PayPal을 계속할 수없는 경우 페이팔 프로세스에서 중단 할 수 있습니까? 검사가 실패하면 서버 측에서도 적절한 오류 페이지 또는 메시지를 반환하여 표시해야합니다.

public async Task<string> PayTransactions() 
{ 
    // check if payment is still necessary or end of month is running 
    var condition = await CheckDatabaseIsUsable(); 

    switch (condition) 
    { 
     case 1: 
      ModelState.AddModelError("error", "some error message"); 
      return RedirectToAction("Index", "Pending"); 

     case 2: 
      ModelState.AddModelError("error", "some other error"); 
      return RedirectToAction("Index", "Pending"); 
    } 

    var paypalPayment = FormPayPalPaymentObject(); 

    return JsonConvert.SerializeObject(new { paymentID = paypalPayment.PaymentId }); 
} 

문제는 내가 지금 ActionResult 및 JSON string 반환 형식을 혼합하고 있다는 것입니다 :

<script src="https://www.paypalobjects.com/api/checkout.js"></script> 
<script> 
    paypal.Button.render({ 
     env: 'sandbox', 
     payment: function (resolve, reject) { 
      var CREATE_PAYMENT_URL = '@Url.Action("PayTransactions","Pending")'; 

     paypal.request.post(CREATE_PAYMENT_URL) 
      .then(function (data) { resolve(data.paymentID); }) 
      .catch(function (err) { reject(err); }); 
     }, 
     onAuthorize: function(data) { 
      var EXECUTE_PAYMENT_URL = 'https://my-store.com/paypal/execute-payment'; 

      paypal.request.post(EXECUTE_PAYMENT_URL, 
      { 
       paymentID: data.paymentID, 
       payerID: data.payerID 
      }) 
       .then(function(data) { /* Go to a success page */ }) 
       .catch(function (err) { /* Go to an error page */ }); 
     }, 
     onCancel: function (data, actions) { 
      return actions.redirect(); 
     }, 
     onError: function (err) { 
      // Show an error page here, when an error occurs 
     } 
    }, '#paypal-button'); 
</script> 

지불 섹션이 호출

이 페이팔 버튼 코드입니다.

답변

0

reject(error)으로 전화를 걸어 지불을 취소 할 수 있습니다.

+0

지금 사용하고있는 코드를 추가 할 기회가 있었지만, mvc 컨트롤러에서'reject (error)'를 호출하여 적절한 오류 메시지가 표시 될지 모르겠습니다. – Ayb4btu

0

redirection 또는 ok 응답 인 경우 json도 리디렉션 응답 및 javascript로 제어 할 수 있습니다.

서버 측 :

return JsonConvert.SerializeObject(new { redirect= Url.Action("Index", "Pending") }); 

자바 스크립트 다음 PayTransactions의 반환 값이 바람직하다으로 또한 고려

public async Task<IActionResult> PayTransactions() 
{ 

    ... 

    return Json(new { paymentID = paypalPayment.PaymentId }); 
} 

IActionResult 객체를 사용

 paypal.request.post(CREATE_PAYMENT_URL) 
      .then(function (data) { 
       if(data.redirect) 
       { 
        //cancel the flow and redirect if needed 
        window.location.href = data.redirect; 
       }else{ 
        resolve(data.paymentID); 
       } 
      }) 
      .catch(function (err) { reject(err); }); 
     }, 

그 modelstate 오류 당신 리디렉션 때문에 추가하는 것은 쓸모가 없습니다.

관련 문제