asynchronize redirect after payment

master
yixian 7 years ago
parent 447e8bd7ef
commit afb9586017

@ -4,16 +4,18 @@
$(document).ready(function () { $(document).ready(function () {
'use strict'; 'use strict';
decode(); decode();
function decode() { function decode() {
var redirect = window.redirect; var redirect = window.redirect;
while(redirect.indexOf('://')<0){ while (redirect.indexOf('://') < 0) {
redirect = decodeURIComponent(redirect); redirect = decodeURIComponent(redirect);
if(redirect==window.redirect){ if (redirect == window.redirect) {
break; break;
} }
window.redirect = redirect; window.redirect = redirect;
} }
} }
var dataCache = {paying: false}; var dataCache = {paying: false};
$('#key_P').bind('touchstart', startPay); $('#key_P').bind('touchstart', startPay);
if (window.paydata) { if (window.paydata) {
@ -21,6 +23,7 @@ $(document).ready(function () {
invokePay(window.paydata); invokePay(window.paydata);
}) })
} }
function startPay() { function startPay() {
$('#wdiv').show(); $('#wdiv').show();
if (dataCache.paying) { if (dataCache.paying) {
@ -33,13 +36,13 @@ $(document).ready(function () {
method: 'get', method: 'get',
dataType: 'json', dataType: 'json',
success: function (pay) { success: function (pay) {
if('SUCCESS'!=pay.return_code){ if ('SUCCESS' != pay.return_code) {
alert(pay.return_msg); alert(pay.return_msg);
$('#wdiv').hide(); $('#wdiv').hide();
dataCache.paying = false; dataCache.paying = false;
return; return;
} }
if(pay.direct_paid){ if (pay.direct_paid) {
dataCache.paying = false; dataCache.paying = false;
location.href = window.redirect + (window.redirect.indexOf('?') < 0 ? '?' : '&') + 'success=true'; location.href = window.redirect + (window.redirect.indexOf('?') < 0 ? '?' : '&') + 'success=true';
} }
@ -67,7 +70,7 @@ $(document).ready(function () {
}, function (res) { }, function (res) {
dataCache.paying = false; dataCache.paying = false;
if (res.err_msg == 'get_brand_wcpay_request:ok') { if (res.err_msg == 'get_brand_wcpay_request:ok') {
location.href = window.redirect + (window.redirect.indexOf('?') < 0 ? '?' : '&') + 'success=true'; startCheckOrder(window.client_moniker, window.merchant_orderid);
} else { } else {
if (res.err_msg != 'get_brand_wcpay_request:cancel' && res.err_msg != 'get_brand_wcpay_request:fail') { if (res.err_msg != 'get_brand_wcpay_request:cancel' && res.err_msg != 'get_brand_wcpay_request:fail') {
alert('WeChat Error:' + res.err_msg); alert('WeChat Error:' + res.err_msg);
@ -81,6 +84,25 @@ $(document).ready(function () {
}) })
} }
function startCheckOrder(clientMoniker, merchantOrderId) {
function checkOrderStd() {
$.ajax({
url: '/api/v1.0/payment/clients/' + clientMoniker + '/orders/' + merchantOrderId + '/status',
method: 'GET',
dataType: 'json',
success: function (res) {
if (res.paid) {
location.href = window.redirect + (window.redirect.indexOf('?') < 0 ? '?' : '&') + 'success=true';
} else {
setTimeout(checkOrderStd, 500);
}
}
})
}
checkOrderStd();
}
function waitForPaymentSuccess(orderId) { function waitForPaymentSuccess(orderId) {
var sock = new SockJS('/register'); var sock = new SockJS('/register');
var client = Stomp.over(sock); var client = Stomp.over(sock);
@ -91,7 +113,7 @@ $(document).ready(function () {
if (window.redirect.indexOf('?') > 0) { if (window.redirect.indexOf('?') > 0) {
concat = '&'; concat = '&';
} }
location.href = window.redirect + concat + 'time=' + json.time + '&nonce_str=' + json.nonce_str + '&sign=' + json.sign+'&success=true'; location.href = window.redirect + concat + 'time=' + json.time + '&nonce_str=' + json.nonce_str + '&sign=' + json.sign + '&success=true';
}) })
}) })
} }

@ -256,7 +256,7 @@ $(function () {
return; return;
} }
if (pay.direct_paid) { if (pay.direct_paid) {
window.location = '/api/payment/v1.0/wechat_jsapi_payment/partners/' + window.client_moniker + '/orders/' + pay.order_id; location.href = '/api/payment/v1.0/wechat_jsapi_payment/partners/' + window.client_moniker + '/orders/' + pay.order_id;
return; return;
} }
var paydata = pay.jsapi; var paydata = pay.jsapi;
@ -270,7 +270,8 @@ $(function () {
}, function (res) { }, function (res) {
dataCache.paying = false; dataCache.paying = false;
if (res.err_msg == 'get_brand_wcpay_request:ok') { if (res.err_msg == 'get_brand_wcpay_request:ok') {
window.location = '/api/payment/v1.0/wechat_jsapi_payment/partners/' + window.client_moniker + '/orders/' + pay.order_id; startCheckOrder(pay.order_id);
} else { } else {
if (res.err_msg != 'get_brand_wcpay_request:cancel' && res.err_msg != 'get_brand_wcpay_request:fail') { if (res.err_msg != 'get_brand_wcpay_request:cancel' && res.err_msg != 'get_brand_wcpay_request:fail') {
weuiAlert('WeChat Error:' + res.err_msg); weuiAlert('WeChat Error:' + res.err_msg);
@ -289,6 +290,24 @@ $(function () {
}) })
}); });
function startCheckOrder(orderId) {
function checkOrderStd() {
$.ajax({
url: '/api/v1.0/payment/orders/' + orderId + '/status',
method: 'GET',
dataType: 'json',
success: function (res) {
if (res.paid) {
location.href = '/api/payment/v1.0/wechat_jsapi_payment/partners/' + window.client_moniker + '/orders/' + orderId;
} else {
setTimeout(checkOrderStd, 500);
}
}
})
}
checkOrderStd();
}
function weuiAlert(msg) { function weuiAlert(msg) {
var config = { var config = {
template: msg template: msg
@ -343,7 +362,11 @@ $(function () {
} }
var ft = $('<div class="weui_dialog_ft"></div>').appendTo(dialogBox); var ft = $('<div class="weui_dialog_ft"></div>').appendTo(dialogBox);
if ($.isFunction(config.confirm)) { if ($.isFunction(config.confirm)) {
var yes = $('<a></a>', {class: 'weui_btn_dialog primary', text: 'OK',style:'background: #0bb20c;color: #fff;'}).appendTo(ft); var yes = $('<a></a>', {
class: 'weui_btn_dialog primary',
text: 'OK',
style: 'background: #0bb20c;color: #fff;'
}).appendTo(ft);
yes.click(function () { yes.click(function () {
config.confirm(dialog, true); config.confirm(dialog, true);
dialog.remove(); dialog.remove();
@ -354,7 +377,11 @@ $(function () {
dialog.remove(); dialog.remove();
}) })
} else { } else {
var ok = $('<a></a>', {class: 'weui_btn_dialog primary', text: 'OK',style:'background: #0bb20c;color: #fff;'}).appendTo(ft); var ok = $('<a></a>', {
class: 'weui_btn_dialog primary',
text: 'OK',
style: 'background: #0bb20c;color: #fff;'
}).appendTo(ft);
ok.click(function () { ok.click(function () {
dialog.remove(); dialog.remove();
}) })

@ -56,7 +56,7 @@ $(document).ready(function () {
}, function (res) { }, function (res) {
dataCache.paying = false; dataCache.paying = false;
if (res.err_msg == 'get_brand_wcpay_request:ok') { if (res.err_msg == 'get_brand_wcpay_request:ok') {
location.href = window.redirect + (window.redirect.indexOf('?') < 0 ? '?' : '&') + 'success=true'; startCheckOrder(window.order_id)
} else { } else {
if (res.err_msg != 'get_brand_wcpay_request:cancel' && res.err_msg != 'get_brand_wcpay_request:fail') { if (res.err_msg != 'get_brand_wcpay_request:cancel' && res.err_msg != 'get_brand_wcpay_request:fail') {
alert('WeChat Error:' + res.err_msg); alert('WeChat Error:' + res.err_msg);
@ -69,4 +69,22 @@ $(document).ready(function () {
$('#wdiv').hide(); $('#wdiv').hide();
}) })
} }
function startCheckOrder(orderId) {
function checkOrderStd() {
$.ajax({
url: '/api/v1.0/payment/orders/' + orderId + '/status',
method: 'GET',
dataType: 'json',
success: function (res) {
if (res.paid) {
location.href = window.redirect + (window.redirect.indexOf('?') < 0 ? '?' : '&') + 'success=true';
} else {
setTimeout(checkOrderStd, 500);
}
}
})
}
checkOrderStd();
}
}); });
Loading…
Cancel
Save