我使用貝寶快速結賬(checkout.js V4.0.0)與asp.net的MVC以允許用戶支付交易數據來進行。點擊快速結賬按鈕時需要執行的操作是對數據庫執行一些檢查,並確認PayPal可以繼續(這也與時間有關,因爲數據庫可能處於鎖定的處理狀態)。PayPal快速結賬:檢查付款可以點擊鏈接
我設置了Advanced Server Integration,然後我打電話從支付部的創建支付控制器paypal.Button.render
,但預計要返回一個json
對象與PaymentID
元素。如果PayPal無法繼續,我能在什麼時候在服務器端執行這些檢查並從PayPal進程中止?如果檢查失敗,服務器端也需要返回一個適當的錯誤頁面或消息來顯示。
這是PayPal按鈕代碼:
<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>
這在支付部稱此:
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
返回類型。
我現在有機會添加我正在使用的代碼,但我不確定如何從mvc控制器調用'reject(error)',以便顯示相應的錯誤消息。 – Ayb4btu