@@ -255,7 +256,7 @@
Product
- Wechat Merchant Id Applicaitons
+ Merchant Id Applicaitons
Permissions
diff --git a/src/main/ui/static/payment/partner/templates/partner_new_rate.html b/src/main/ui/static/payment/partner/templates/partner_new_rate.html
index 02f7c1875..c93460d5f 100644
--- a/src/main/ui/static/payment/partner/templates/partner_new_rate.html
+++ b/src/main/ui/static/payment/partner/templates/partner_new_rate.html
@@ -141,7 +141,7 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+ Sub Merchant Id
+ (当前使用){{id_apply.sub_merchant_id}}
+
+ -
+ Apply Time
+
+
+ -
+ Company Short Name
+ {{id_apply.merchant_shortname | cut:true:20:' ...'}}
+
+ -
+ Business Category
+ {{id_apply.business_category | partner_royalpay_industry}}
+
+ -
+ Operator
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/ui/static/templates/payment/payment.css b/src/main/ui/static/templates/payment/payment.css
index e32c60cf9..9d13e26d0 100644
--- a/src/main/ui/static/templates/payment/payment.css
+++ b/src/main/ui/static/templates/payment/payment.css
@@ -433,6 +433,9 @@ input.value:focus {
.keyboard-grids .key.paynow.alipay {
background: #108ee9;
}
+.keyboard-grids .key.paynow.rpay {
+ background: #FF2D55;
+}
.alipay {
color: #108ee9;
@@ -442,6 +445,10 @@ input.value:focus {
color: #09bb07;
}
+.rpay {
+ color: #FF2D55;
+}
+
.keyboard-grids .key.paynow > .label {
display: block;
position: absolute;
diff --git a/src/main/ui/static/templates/payment/v1/payment.css b/src/main/ui/static/templates/payment/v1/payment.css
index c61863f70..5c535ec04 100644
--- a/src/main/ui/static/templates/payment/v1/payment.css
+++ b/src/main/ui/static/templates/payment/v1/payment.css
@@ -366,6 +366,10 @@ input.value:focus {
background-color: #108ee9;
}
+.button_sp_area.alipay .paynow {
+ background-color: #FF2D55;
+}
+
.button_sp_area .remark-btn {
width: 35%;
background: #20C1ED
diff --git a/src/main/ui/static/templates/payment/v2/payment.css b/src/main/ui/static/templates/payment/v2/payment.css
index e2b39f2b5..9564c3027 100644
--- a/src/main/ui/static/templates/payment/v2/payment.css
+++ b/src/main/ui/static/templates/payment/v2/payment.css
@@ -431,6 +431,9 @@ input.value:focus {
.keyboard-grids .key.paynow.alipay {
background: #108ee9;
}
+.keyboard-grids .key.paynow.rpay {
+ background: #FF2D55;
+}
.alipay {
color: #108ee9;
diff --git a/src/main/ui/static/templates/rpay/v1/bill_retail_jsapi.js b/src/main/ui/static/templates/rpay/v1/bill_retail_jsapi.js
new file mode 100644
index 000000000..7e7290d52
--- /dev/null
+++ b/src/main/ui/static/templates/rpay/v1/bill_retail_jsapi.js
@@ -0,0 +1,79 @@
+/**
+ * Created by yixian on 2016-07-15.
+ */
+$(document).ready(function () {
+ 'use strict';
+ decode();
+ function decode() {
+ var redirect = window.redirect;
+ while(redirect.indexOf('://')<0){
+ redirect = decodeURIComponent(redirect);
+ if(redirect==window.redirect){
+ break;
+ }
+ window.redirect = redirect;
+ }
+ }
+ var dataCache = {paying: false};
+ $('#key_P').bind('touchstart', startPay);
+ function startPay() {
+ $('#wdiv').show();
+ if (dataCache.paying) {
+ return;
+ }
+ dataCache.paying = true;
+
+ $.ajax({
+ url: '/api/v1.0/alipay/partners/' + window.client_moniker + '/orders/'+window.order_id+'/order_params',
+ method: 'GET',
+ dataType: 'json',
+ success: function (pay) {
+ if (pay.direct_paid) {
+ location.href = window.redirect;
+ return;
+ }
+ if (window.AlipayJSBridge) {
+ callPayment();
+ } else {
+ // 如果没有注入则监听注入的事件
+ document.addEventListener('AlipayJSBridgeReady', callPayment, false);
+ }
+
+ function callPayment() {
+ try {
+ AlipayJSBridge.call('tradePay', {
+ tradeNO: pay.trade_no
+ }, function (res) {
+ dataCache.paying = false;
+ if (res.resultCode == '9000') {
+ AlipayJSBridge.call('startApp', {
+ appId: '20000056',
+ param: {
+ actionType: 'showSuccPage',
+ payResult: res.result
+ },
+ closeCurrentApp: false
+ });
+ location.href = window.redirect;
+ } else {
+ alert(res.memo);
+ }
+ $('#wdiv').hide();
+ })
+ } catch (err) {
+ alert(err);
+ $('#wdiv').hide();
+ }
+ }
+ },
+ error: function (jqXhr) {
+ alert(jqXhr.responseJSON.message);
+ $('#wdiv').hide();
+ dataCache.paying = false;
+ }
+ })
+
+
+ }
+
+});
\ No newline at end of file
diff --git a/src/main/ui/static/templates/rpay/v1/gateway_jsapi.js b/src/main/ui/static/templates/rpay/v1/gateway_jsapi.js
new file mode 100644
index 000000000..9f876394f
--- /dev/null
+++ b/src/main/ui/static/templates/rpay/v1/gateway_jsapi.js
@@ -0,0 +1,139 @@
+/**
+ * Created by yixian on 2016-07-15.
+ */
+$(document).ready(function () {
+ 'use strict';
+ decode();
+
+ function decode() {
+ if (window.client_moniker == 'PINE') {
+ alert('debug:origin redirect:' + window.redirect);
+ }
+ var redirect = window.redirect;
+ while (redirect.indexOf('://') < 0) {
+ redirect = decodeURIComponent(redirect);
+ if (redirect == window.redirect) {
+ break;
+ }
+ window.redirect = redirect;
+ }
+
+ }
+
+ var dataCache = {paying: false};
+ $('#key_P').bind('touchstart', startPay);
+ if (window.tradeNo) {
+
+ if (window.AlipayJSBridge) {
+ callPayment(window.tradeNo);
+ } else {
+ // 如果没有注入则监听注入的事件
+ document.addEventListener('AlipayJSBridgeReady', function () {
+ callPayment(window.tradeNo);
+ }, false);
+ }
+ }
+
+ function startPay() {
+ $('#wdiv').show();
+ if (dataCache.paying) {
+ return;
+ }
+ dataCache.paying = true;
+
+ $.ajax({
+ url: './preorder',
+ method: 'GET',
+ dataType: 'json',
+ success: function (pay) {
+ if (pay.direct_paid) {
+ location.href = window.redirect + (window.redirect.indexOf('?') < 0 ? '?' : '&') + 'success=true';
+ return;
+ }
+ if (window.AlipayJSBridge) {
+ callPayment(pay.trade_no);
+ } else {
+ // 如果没有注入则监听注入的事件
+ document.addEventListener('AlipayJSBridgeReady', function () {
+ callPayment(pay.trade_no);
+ }, false);
+ }
+
+ },
+ error: function (jqXhr) {
+ alert(jqXhr.responseJSON.message);
+ $('#wdiv').hide();
+ dataCache.paying = false;
+ }
+ })
+
+
+ }
+
+ function callPayment(tradeNo) {
+ try {
+ if (window.client_moniker == 'PINE') {
+ alert('debug:trade no=' + tradeNo)
+ }
+ AlipayJSBridge.call('tradePay', {
+ tradeNO: tradeNo
+ }, function (res) {
+ dataCache.paying = false;
+ if (res.resultCode == '9000') {
+ AlipayJSBridge.call('startApp', {
+ appId: '20000056',
+ param: {
+ actionType: 'showSuccPage',
+ payResult: res.result
+ },
+ closeCurrentApp: false
+ });
+ startCheckOrder(window.client_moniker, window.merchant_orderid);
+ } else {
+ alert(res.memo);
+ if (window.tradeNo) {
+ location.href = window.redirect + (window.redirect.indexOf('?') < 0 ? '?' : '&') + 'success=false';
+ }
+ }
+ $('#wdiv').hide();
+ })
+ } catch (err) {
+ alert(err);
+ $('#wdiv').hide();
+ }
+ }
+
+ 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) {
+ var sock = new SockJS('/register');
+ var client = Stomp.over(sock);
+ client.connect({}, function () {
+ client.subscribe('/app/payment/orders/' + orderId, function (msg) {
+ var json = JSON.parse(msg.body);
+ var concat = '?';
+ if (window.redirect.indexOf('?') > 0) {
+ concat = '&';
+ }
+ location.href = window.redirect + concat + 'time=' + json.time + '&nonce_str=' + json.nonce_str + '&sign=' + json.sign + '&success=true';
+ })
+ })
+ }
+});
\ No newline at end of file
diff --git a/src/main/ui/static/templates/rpay/v1/payment.js b/src/main/ui/static/templates/rpay/v1/payment.js
new file mode 100644
index 000000000..5c5ac358c
--- /dev/null
+++ b/src/main/ui/static/templates/rpay/v1/payment.js
@@ -0,0 +1,473 @@
+/**
+ * Created by yixian on 2017-05-08
+ */
+$(function () {
+ 'use strict';
+ document.querySelector('body').addEventListener('touchmove', function (e) {
+ if (!document.querySelector('.coupons').contains(e.target)) {
+ e.preventDefault();
+ }
+ })
+ var dataCache = {price: '0', coupons: [], coupon_groups: {}};
+ var exchangeRate = parseFloat(window.exchange_rate);
+
+ if (window.AlipayJSBridge) {
+ AlipayJSBridge.call('hideOptionMenu');
+ } else {
+ document.addEventListener('AlipayJSBridgeReady', function () {
+ AlipayJSBridge.call('hideOptionMenu');
+ }, false);
+ }
+ dataCache.paying = false;
+ var ctrl = {};
+
+ $('.ff.key').bind('touchstart', function () {
+ if (dataCache.paying) {
+ return;
+ }
+ var char = $(this).attr('data-char');
+ appendChar(char);
+ });
+
+ $('.coupons .use-check').click(function () {
+ if ($(this).hasClass('disabled')) {
+ return;
+ }
+ var couponId = $(this).attr('data-coupon-id');
+ var couponGroup = $(this).attr('data-coupon-group');
+ if (couponGroup) {
+ var prevCouponId = dataCache.coupon_groups[couponGroup];
+ if (prevCouponId) {
+ var prevIdx = dataCache.coupons.indexOf(prevCouponId);
+ if (prevIdx >= 0) {
+ dataCache.coupons.splice(prevIdx, 1);
+ }
+ if (prevCouponId != couponId) {
+ $('.coupons .use-check[data-coupon-id="' + prevCouponId + '"]').removeClass('checked').addClass('unchecked');
+ dataCache.coupon_groups[couponGroup] = couponId;
+ } else {
+ dataCache.coupon_groups[couponGroup] = null;
+ }
+ } else {
+ dataCache.coupon_groups[couponGroup] = couponId;
+ }
+
+ }
+
+ if ($(this).is('.checked')) {
+ $(this).removeClass('checked').addClass('unchecked');
+ } else {
+ $(this).removeClass('unchecked').addClass('checked');
+ }
+ var checked = $(this).is('.checked');
+ if (checked) {
+ dataCache.coupons.push(couponId);
+ updatePrice();
+ } else {
+ var idx = dataCache.coupons.indexOf(couponId);
+ dataCache.coupons.splice(idx, 1);
+
+ }
+ });
+
+ $('#key_B').bind('touchstart', function () {
+ backspace();
+ });
+
+ function updatePoundage(price) {
+ if (window.extensions.indexOf('customerrate') >= 0 && window.rateValue != null) {
+ if (window.use_customised_rate) {
+ var rate = new Decimal(100).plus(window.rateValue).div(100);
+ var poundageValue = new Decimal(dataCache.price).mul(rate).sub(dataCache.price);
+ } else {
+ var rateRemain = new Decimal(100).sub(window.rateValue).div(100);
+ poundageValue = new Decimal(dataCache.price).div(rateRemain).sub(dataCache.price);
+ }
+ dataCache.poundageValue = poundageValue.toFixed(2, Decimal.ROUND_HALF_UP);
+ return poundageValue.plus(price).toFixed(2, Decimal.ROUND_HALF_UP);
+ }
+ return price;
+ }
+
+ function updatePrice() {
+ $('#audVal').html(dataCache.price);
+ var realPrice = dataCache.price;
+ $('#audValReal').html(realPrice);
+ var surchargeData = calculateSurcharge(realPrice);
+
+ var price = surchargeData.newPrice || realPrice;
+ var priceBeforeDiscount = price;
+ dataCache.discounts = [];
+ dataCache.tax = surchargeData.tax;
+ dataCache.surcharge = surchargeData.surcharge;
+
+ $(window.coupons).each(function () {
+ price = this.handleDiscount(price, dataCache.price, dataCache.discounts, dataCache.coupons);
+ });
+ dataCache.customSurcharge = new Decimal(price).sub(realPrice).toFixed(2,Decimal.ROUND_HALF_UP);
+ dataCache.finalPrice = new Decimal(price).toFixed(2, Decimal.ROUND_FLOOR);
+ var rate = 'CNY' == window.currency ? 1 : exchangeRate;
+ var cnyVal = Decimal.mul(price, rate).toFixed(2, Decimal.ROUND_HALF_UP);
+ $('#cnyVal').html(cnyVal);
+ dataCache.currencyPrice = 'CNY' == window.currency ? Decimal.div(priceBeforeDiscount, exchangeRate).toFixed(2, Decimal.ROUND_FLOOR) : priceBeforeDiscount;
+ }
+
+ function updatePoundageStatus() {
+ $(window.coupons).each(function () {
+ var coupon = this;
+ var couponId = coupon.couponId();
+ if (coupon.isEnable(dataCache.currencyPrice || 0)) {
+ $('.coupons .use-check[data-coupon-id=' + couponId + ']').removeClass('disabled');
+ } else {
+ var dom = $('.coupons .use-check[data-coupon-id=' + couponId + ']').addClass('disabled');
+ var couponGroup = dom.attr('data-coupon-group');
+ if (couponGroup) {
+ if (dataCache.coupon_groups[couponGroup] == couponId) {
+ dataCache.coupon_groups[couponGroup] = null;
+ }
+ }
+ var idx = dataCache.coupons.indexOf(couponId);
+ if (idx >= 0) {
+ dataCache.coupons.splice(idx, 1);
+ }
+ dom.removeClass('checked').addClass('unchecked');
+ }
+ })
+ }
+
+ updatePoundageStatus();
+
+ function backspace() {
+ dataCache.price = dataCache.price.substring(0, dataCache.price.length - 1);
+ if (dataCache.price.length == 0) {
+ dataCache.price = '0';
+ }
+ updatePrice();
+ updatePoundageStatus();
+ }
+
+ function appendChar(char) {
+ var pointLocation = dataCache.price.indexOf('.');
+ if (pointLocation >= 0 || char == '.' || dataCache.price.length < 5) {
+ if (pointLocation >= 0 && char == '.') {
+ return;
+ }
+ if (pointLocation >= 0 && pointLocation <= dataCache.price.length - 3) {
+ return;
+ }
+ if (dataCache.price == '0' && char != '.') {
+ dataCache.price = '';
+ }
+ dataCache.price += char;
+ updatePrice();
+ updatePoundageStatus();
+ }
+ }
+
+ $('#coupon-box-toggle').click(function () {
+ $('.coupons-container').addClass('show');
+ });
+ $('.coupons-container>.coupons-mask,.coupons-container #close-coupon-box').click(function () {
+ $(this).parents('.coupons-container').removeClass('show');
+ });
+
+
+ $('.remark-btn').click(function () {
+ var cfg = {
+ title: '备注 Remark',
+ template: '',
+ initialize: function (dialog) {
+ $('