caimei-weisapay.js 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336
  1. /**
  2. *Created by ZHJY on 2020/7/14.
  3. */
  4. // var _WS_SERVICE = 'http://192.168.2.67:8010'; //维沙网银支付本地联调
  5. // var _WS_SERVICE = 'http://192.168.2.68:8010'; //维沙网银支付本地联调
  6. var _WS_SERVICE = 'https://mall2b-b.caimei365.com';//维沙网银支付测试联调
  7. // var _WS_SERVICE = 'https://mall2b.caimei365.com';//维沙网银支付正式联调
  8. var payContainer = new Vue({
  9. el:"#payContainer",
  10. data: {
  11. isSubMitStatus:false,
  12. payInfo:{
  13. PAY_BANK_NUM:'ICBC_B2B',//银行网管信息
  14. PAY_CODE:'',//链接状态
  15. PAY_ORDERID:'',//主订单ID
  16. PAY_UNPAIDAMOUNT:0,//本次支付金额
  17. PAY_TIME:'',//链接失效时间
  18. PAY_LINKLOGO:'',
  19. PAY_PAYLINKTYPE:'',
  20. PAY_USERTYPE:'',//网银支付类型
  21. PAY_PAYLINKTYPETEXT:''//文案
  22. },
  23. B2BbankData:[
  24. {imgUrl:'/img/pay/iconbank-01@2x.png',bankName:'中国工商银行',B2bNum:'ICBC_B2B',B2cNum:'ICBC_B2C'},
  25. {imgUrl:'/img/pay/iconbank-02@2x.png',bankName:'招商银行',B2bNum:'CMBCHINA_B2B',B2cNum:'CMBCHINA_B2C'},
  26. {imgUrl:'/img/pay/iconbank-03@2x.png',bankName:'中国建设银行',B2bNum:'CCB_B2B',B2cNum:'CCB_B2C'},
  27. {imgUrl:'/img/pay/iconbank-05@2x.png',bankName:'兴业银行',B2bNum:'CIB_B2B',B2cNum:'CIB_B2C'},
  28. {imgUrl:'/img/pay/iconbank-06@2x.png',bankName:'中国民生银行',B2bNum:'CMBC_B2B',B2cNum:'CMBC_B2C'},
  29. {imgUrl:'/img/pay/iconbank-07@2x.png',bankName:'中国光大银行',B2bNum:'CEB_B2B',B2cNum:'CEB_B2C'},
  30. {imgUrl:'/img/pay/iconbank-08@2x.png',bankName:'中国银行',B2bNum:'BOC_B2B',B2cNum:'BOC_B2C'},
  31. {imgUrl:'/img/pay/iconbank-09@2x.png',bankName:'平安银行',B2bNum:'SZPA_B2B',B2cNum:'SZPA_B2C'},
  32. {imgUrl:'/img/pay/iconbank-10@2x.png',bankName:'中信银行',B2bNum:'ECITIC_B2B',B2cNum:'ECITIC_B2C'},
  33. {imgUrl:'/img/pay/iconbank-11@2x.png',bankName:'上海浦东发展银行',B2bNum:'SPDB_B2B',B2cNum:'SPDB_B2C'},
  34. {imgUrl:'/img/pay/iconbank-12@2x.png',bankName:'华夏银行',B2bNum:'HXB_B2B',B2cNum:'HXB_B2C'},
  35. {imgUrl:'/img/pay/iconbank-13@2x.png',bankName:'北京银行',B2bNum:'BCCB_B2B',B2cNum:'BCCB_B2C'},
  36. {imgUrl:'/img/pay/iconbank-14@2x.png',bankName:'中国农业银行',B2bNum:'ABC_B2B',B2cNum:'ABC_B2C'},
  37. {imgUrl:'/img/pay/iconbank-15@2x.png',bankName:'中国邮政储蓄银行',B2bNum:'PSBC_B2B',B2cNum:'PSBC_B2C'},
  38. {imgUrl:'/img/pay/iconbank-16@2x.png',bankName:'徽商银行',B2bNum:'HSB_B2B',B2cNum:'HSB_B2C'},
  39. {imgUrl:'/img/pay/iconbank-17@2x.png',bankName:'青岛银行',B2bNum:'QDYH_B2B',B2cNum:'QDYH_B2C'},
  40. {imgUrl:'/img/pay/iconbank-18@2x.png',bankName:'浙商银行',B2bNum:'CZ_B2B',B2cNum:'CZ_B2C'},
  41. {imgUrl:'/img/pay/iconbank-19@2x.png',bankName:'齐鲁银行',B2bNum:'QLYH_B2B',B2cNum:'QLYH_B2C'},
  42. {imgUrl:'/img/pay/iconbank-20@2x.png',bankName:'上海银行',B2bNum:'SHB_B2B',B2cNum:'SHB_B2C'},
  43. {imgUrl:'/img/pay/iconbank-21@2x.png',bankName:'莱商银行',B2bNum:'ISBC_B2B',B2cNum:null},
  44. {imgUrl:'/img/pay/iconbank-22@2x.png',bankName:'厦门银行',B2bNum:'XMCCB_B2B',B2cNum:null},
  45. {imgUrl:'/img/pay/iconbank-23@2x.png',bankName:'晋商银行',B2bNum:null,B2cNum:'JSHB_B2C'}
  46. ],
  47. B2CbankData:[
  48. {imgUrl:'/img/pay/iconbank-01@2x.png',bankName:'中国工商银行',B2bNum:'ICBC_B2B',B2cNum:'ICBC_B2C'},
  49. {imgUrl:'/img/pay/iconbank-02@2x.png',bankName:'招商银行',B2bNum:'CMBCHINA_B2B',B2cNum:'CMBCHINA_B2C'},
  50. {imgUrl:'/img/pay/iconbank-03@2x.png',bankName:'中国建设银行',B2bNum:'CCB_B2B',B2cNum:'CCB_B2C'},
  51. {imgUrl:'/img/pay/iconbank-05@2x.png',bankName:'兴业银行',B2bNum:'CIB_B2B',B2cNum:'CIB_B2C'},
  52. {imgUrl:'/img/pay/iconbank-06@2x.png',bankName:'中国民生银行',B2bNum:'CMBC_B2B',B2cNum:'CMBC_B2C'},
  53. {imgUrl:'/img/pay/iconbank-07@2x.png',bankName:'中国光大银行',B2bNum:'CEB_B2B',B2cNum:'CEB_B2C'},
  54. {imgUrl:'/img/pay/iconbank-08@2x.png',bankName:'中国银行',B2bNum:'BOC_B2B',B2cNum:'BOC_B2C'},
  55. {imgUrl:'/img/pay/iconbank-09@2x.png',bankName:'平安银行',B2bNum:'SZPA_B2B',B2cNum:'SZPA_B2C'},
  56. {imgUrl:'/img/pay/iconbank-10@2x.png',bankName:'中信银行',B2bNum:'ECITIC_B2B',B2cNum:'ECITIC_B2C'},
  57. {imgUrl:'/img/pay/iconbank-11@2x.png',bankName:'上海浦东发展银行',B2bNum:'SPDB_B2B',B2cNum:'SPDB_B2C'},
  58. {imgUrl:'/img/pay/iconbank-12@2x.png',bankName:'华夏银行',B2bNum:'HXB_B2B',B2cNum:'HXB_B2C'},
  59. {imgUrl:'/img/pay/iconbank-13@2x.png',bankName:'北京银行',B2bNum:'BCCB_B2B',B2cNum:'BCCB_B2C'},
  60. {imgUrl:'/img/pay/iconbank-14@2x.png',bankName:'中国农业银行',B2bNum:'ABC_B2B',B2cNum:'ABC_B2C'},
  61. {imgUrl:'/img/pay/iconbank-15@2x.png',bankName:'中国邮政储蓄银行',B2bNum:'PSBC_B2B',B2cNum:'PSBC_B2C'},
  62. {imgUrl:'/img/pay/iconbank-16@2x.png',bankName:'徽商银行',B2bNum:'HSB_B2B',B2cNum:'HSB_B2C'},
  63. {imgUrl:'/img/pay/iconbank-17@2x.png',bankName:'青岛银行',B2bNum:'QDYH_B2B',B2cNum:'QDYH_B2C'},
  64. {imgUrl:'/img/pay/iconbank-18@2x.png',bankName:'浙商银行',B2bNum:'CZ_B2B',B2cNum:'CZ_B2C'},
  65. {imgUrl:'/img/pay/iconbank-19@2x.png',bankName:'齐鲁银行',B2bNum:'QLYH_B2B',B2cNum:'QLYH_B2C'},
  66. {imgUrl:'/img/pay/iconbank-20@2x.png',bankName:'上海银行',B2bNum:'SHB_B2B',B2cNum:'SHB_B2C'},
  67. {imgUrl:'/img/pay/iconbank-21@2x.png',bankName:'莱商银行',B2bNum:'ISBC_B2B',B2cNum:null},
  68. {imgUrl:'/img/pay/iconbank-22@2x.png',bankName:'厦门银行',B2bNum:'XMCCB_B2B',B2cNum:null},
  69. {imgUrl:'/img/pay/iconbank-23@2x.png',bankName:'晋商银行',B2bNum:null,B2cNum:'JSHB_B2C'}
  70. ],
  71. userName :'',
  72. goodList:'',
  73. freight :'', //运费
  74. discountFee:'',//经理折扣
  75. balancePayFee:'',//余额抵扣
  76. payTotalFee: '', //合计
  77. payableAmount:'',//本次支付金额
  78. payment:'', //剩余支付金额
  79. receiptAmount:'',//已支付金额
  80. discernReceipt:'',//支付记录
  81. discernReceiptList:[],//支付记录列表
  82. orderProductList:[],//商品列表
  83. paySuccessCounter:0,
  84. tabIndex:0,
  85. downHour:'00',//倒计时
  86. downMinute:'00',//倒计分
  87. downSecond:'00',//倒计秒
  88. isSiled:false,
  89. mbOrderId:'',
  90. isRequest:false,
  91. isPayAlert:false,
  92. isErrorShow:false,
  93. iconErrorClass:'',
  94. iconErrorText:'',
  95. iconErrorMsgnone:''
  96. },
  97. filters: {
  98. NumFormat :function(value) {
  99. if(!value) return '0.00';
  100. var intPart = Number(value) - Number(value)%1; //获取整数部分(这里是windy93的方法)
  101. var intPartFormat = intPart.toString().replace(/(\d)(?=(?:\d{3})+$)/g, '$1,'); //将整数部分逢三一断
  102. var floatPart = ".00"; //预定义小数部分
  103. var value2Array = value.toString().split(".");
  104. if(value2Array.length == 2) { //=2表示数据有小数位
  105. floatPart = value2Array[1].toString(); //拿到小数部分
  106. if(floatPart.length == 1) { //补0,实际上用不着
  107. return intPartFormat + "." + floatPart + '0';
  108. } else {
  109. return intPartFormat + "." + floatPart;
  110. }
  111. } else {
  112. return intPartFormat + floatPart;
  113. }
  114. }
  115. },
  116. methods: {
  117. LinkInfoOrderBank:function(linkLogo){//初始化支付订单加密数据
  118. var _self = this;
  119. $.getJSON(_WS_SERVICE+"/PayOrder/linkData",{ linkLogo: linkLogo }).done(function (response) {
  120. if(response.code === 0){
  121. var _data = response.data;
  122. _self.payInfo.PAY_ORDERID = _data.orderPayLink.orderId;
  123. _self.payInfo.PAY_UNPAIDAMOUNT = _data.orderPayLink.unpaidAmount;
  124. _self.payInfo.PAY_TIME = decodeURI(_data.time);
  125. _self.payInfo.PAY_PAYLINKTYPE = _data.orderPayLink.payType;
  126. _self.payInfo.PAY_PAYLINKTYPETEXT = _self.payInfo.PAY_PAYLINKTYPE == '1' ? '企业网银' : '个人网银';
  127. _self.payInfo.PAY_USERTYPE = _self.payInfo.PAY_PAYLINKTYPE == '1' ? 'ENTERPRISE' : 'USER';
  128. if(_data.code === 0){
  129. setTimeout(function () { //支付倒计时
  130. _self.countTime(_self.payInfo.PAY_TIME)
  131. }, 1000);
  132. _self.infoPayOrderCheckoutCounter();
  133. }else{
  134. _self.isErrorShow = true;
  135. _self.isRequest = true;
  136. switch (_data.code) {
  137. case -2:
  138. _self.iconErrorClass = 'offline';
  139. _self.iconErrorText = '订单已通过线下转账方式付款';
  140. _self.iconErrorMsgnone = '不能再使用企业网银支付';
  141. break;
  142. case -3:
  143. _self.iconErrorClass = 'fail';
  144. _self.iconErrorText = '链接超过24小时未完成支付,已失效';
  145. _self.iconErrorMsgnone = '请重新生成支付链接,继续支付';
  146. break;
  147. case 5:
  148. _self.iconErrorClass = 'paid';
  149. _self.iconErrorText = '款项已支付完成,无需重复支付';
  150. _self.iconErrorMsgnone = '';
  151. break;
  152. }
  153. }
  154. }else if(response.code === -1){
  155. _self.isErrorShow = true;
  156. _self.isRequest = true;
  157. _self.iconErrorClass = 'again';
  158. _self.iconErrorText = '链接已更新,请联系业务人员获取最新链接再进行支付';
  159. _self.iconErrorMsgnone = '';
  160. }else{
  161. CAIMEI.Alert(response.msg,'确定',false);
  162. }
  163. });
  164. // PayApi.PayOrderLinkData({linkLogo:linkLogo},function(response){
  165. // });
  166. },
  167. infoPayOrderCheckoutCounter:function(){//初始化订单数据
  168. var _self = this;
  169. $.getJSON(_WS_SERVICE+"/PayOrder/checkoutCounter",{ orderId:_self.payInfo.PAY_ORDERID }).done(function (response) {
  170. if(response.code === 0){
  171. var data = response.data;
  172. _self.discernReceiptList = data.discernReceipt;
  173. _self.orderProductList = data.orderProductList;
  174. _self.userName = data.userName;
  175. _self.freight = _self.freightText(data.order.freight);
  176. _self.discountFee = data.order.discountFee;
  177. _self.balancePayFee = data.order.balancePayFee;
  178. _self.payTotalFee = data.order.payTotalFee;
  179. _self.receiptAmount= data.order.receiptAmount;
  180. _self.payableAmount = _self.payInfo.PAY_UNPAIDAMOUNT;
  181. if(data.order.status === '7'){
  182. _self.payment = _self.toFixedFn(_self.payTotalFee - _self.payableAmount);
  183. }else{
  184. _self.payment = _self.toFixedFn(_self.payTotalFee - _self.receiptAmount - _self.payableAmount - _self.balancePayFee);
  185. }
  186. _self.paySuccessCounter = data.order.paySuccessCounter;
  187. _self.isRequest = true;
  188. }else{
  189. CAIMEI.Alert(response.msg,'确定',false);
  190. }
  191. });
  192. // PayApi.PayOrderCheckoutCounter({orderId:_self.payInfo.PAY_ORDERID},function(response){
  193. // })
  194. },
  195. PaySubmitFn:function(){//立即支付
  196. var _self = this;
  197. if(_self.payInfo.PAY_BANK_NUM == ''){
  198. layer.msg('请选择银行!');
  199. return;
  200. }
  201. var params = {
  202. payWay:'UNIONPAY',
  203. payAmount: _self.payInfo.PAY_UNPAIDAMOUNT*100,
  204. bankCode:_self.payInfo.PAY_BANK_NUM,
  205. returnUrl:'https://www.caimei365.com/',
  206. orderId:_self.payInfo.PAY_ORDERID,
  207. userType:_self.payInfo.PAY_USERTYPE
  208. };
  209. _self.PayOrderPcMallPay(params);
  210. },
  211. PayOrderPcMallPay:function(params){//网银支付请求
  212. var _self = this;
  213. _self.isSubMitStatus=true;
  214. $.ajax({
  215. type: 'post',
  216. url: _WS_SERVICE+'/PayOrder/pcMallPay',
  217. xhrFields: {
  218. withCredentials: true
  219. },
  220. data: JSON.stringify(params),
  221. headers:{
  222. 'Content-Type':'application/json;charset=UTF-8',
  223. },
  224. success : function (response) {
  225. if(response.code == 0){
  226. _self.isPayAlert = true;
  227. _self.mbOrderId = response.data.data.mbOrderId;
  228. window.open(response.data.data.payUrl);
  229. _self.isSubMitStatus=false;
  230. }else{
  231. CAIMEI.Alert(response.msg,'确定',false);
  232. _self.isSubMitStatus=false;
  233. }
  234. },
  235. error : function (res) {
  236. }
  237. });
  238. // PayApi.PayOrderPcMallPay(params,function(response){
  239. // })
  240. },
  241. RefreshBody:function(){//刷新弹窗
  242. var _self = this;
  243. _self.isPayAlert = false;
  244. $.getJSON(_WS_SERVICE+"/PayOrder/findOrderStatus",{ mbOrderId:_self.mbOrderId }).done(function (response) {
  245. _self.isPayAlert = false;
  246. var data = response.data.data;
  247. if(data.status === '1'){
  248. window.location.href = '/pay/success.html?pageType=wechat&type=success&payAmount='+ _self.payInfo.PAY_UNPAIDAMOUNT;
  249. }else{
  250. window.location.href = '/pay/success.html?pageType=wechat&type=error&payAmount='+ _self.payInfo.PAY_UNPAIDAMOUNT;
  251. }
  252. });
  253. },
  254. changeTab:function(index,item){// 选择银行
  255. this.tabIndex = index;
  256. if( this.payInfo.PAY_PAYLINKTYPE == '1'){
  257. this.payInfo.PAY_BANK_NUM = item.B2bNum;
  258. }else{
  259. this.payInfo.PAY_BANK_NUM = item.B2cNum;
  260. }
  261. },
  262. slideToggleContent:function(){
  263. this.isSiled = !this.isSiled;
  264. },
  265. countTime:function(value){//支付链接倒计时
  266. var _self = this;
  267. //获取当前时间
  268. var date = new Date();
  269. var now = date.getTime();
  270. //设置截止时间
  271. var endDate = new Date(value);
  272. var end = endDate.getTime();
  273. //时间差
  274. var differTime = end - now;
  275. //定义变量,h,m,s保存倒计时的时间
  276. var h, m, s;
  277. if (differTime >= 0) {
  278. h = Math.floor(differTime / 1000 / 60 / 60);
  279. m = Math.floor(differTime / 1000 / 60 % 60);
  280. s = Math.floor(differTime / 1000 % 60);
  281. _self.downHour = h < 10 ? ("0" + h) : h;
  282. _self.downMinute = m < 10 ? ("0" + m) : m;
  283. _self.downSecond = s < 10 ? ("0" + s) : s;
  284. //递归调用函数所以是延时器不是定时器
  285. setTimeout(function () {
  286. _self.countTime(value)
  287. }, 1000);
  288. } else {
  289. _self.downHour = '00';
  290. _self.downMinute = '00';
  291. _self.downSecond = '00';
  292. }
  293. },
  294. freightText:function (type) {//处理邮费显示
  295. var text ="";
  296. if(type > 0){
  297. text = '¥'+type.toFixed(2);
  298. }else if(type == -1){
  299. text = '到付';
  300. }else{
  301. text = '包邮';
  302. }
  303. return text
  304. },
  305. payTypeText:function(state){//处理支付记录文字
  306. var stateText = '',
  307. stateTextObject={
  308. 12:'企业网银',
  309. 13:'微信支付',
  310. 14:'支付宝',
  311. 15:'微信支付',
  312. 16:'余额抵扣'
  313. };
  314. Object.keys(stateTextObject).forEach(function(key) {
  315. if(key == state){
  316. stateText = stateTextObject[key]
  317. }
  318. });
  319. return stateText;
  320. },
  321. toFixedFn:function(text){
  322. return Number(text).toFixed(2);
  323. },
  324. },
  325. mounted: function () {
  326. var _self = this;
  327. _self.payInfo.PAY_LINKLOGO= CAIMEI.getUrlParam('linkLogo');
  328. _self.LinkInfoOrderBank(_self.payInfo.PAY_LINKLOGO);
  329. }
  330. });