日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Vue+SpringBoot實現支付寶沙箱支付的示例代碼

瀏覽:217日期:2022-06-09 09:42:14

首先去下載支付寶沙箱的一系列東西,具體的配置什么的我就不說了,有很多博客都講了,還有螞蟻金服官方也說的很詳細,我就直接說怎么樣把后端的支付頁面顯示到Vue前端來:

在你配置好AlipayConfig這個文件后,就可以寫前端的邏輯了,前端是采用支付寶的頁面如下:

下面展示一些 內聯代碼片。

/* 以下是支付確認html */ <div style='text=#000000 bgColor=#ffffff leftMargin=0 topMargin=4'><header class='am-header'> <h1>支付確認</h1></header><div id='main'> <!-- <form name='alipayment' :model='payObject' target='_blank'> --> <div name='divcontent'> <dl class='content'> <dt>商戶訂單號 :</dt> <dd><input name='WIDout_trade_no' readonly='true' :value='payObject.WIDout_trade_no'/> </dd> <hr /> <dt>訂單名稱 :</dt> <dd><input name='WIDsubject' readonly='true' :value='payObject.WIDsubject'/> </dd> <hr /> <dt>付款金額 :</dt> <dd><input name='WIDtotal_amount' readonly='true' :value='payObject.WIDtotal_amount'/> </dd> <hr /> <dt>商品描述:</dt> <dd><input name='WIDbody' readonly='true' :value='payObject.WIDbody' /> </dd> <hr /> <dd id='btn-dd'><span class='new-btn-login-sp'> <button @click='paySub()'>付 款</button></span><span class='note-help'>如果您點擊“付款”按鈕,即表示您同意該次的執行操作。</span> </dd> </dl> </div> <!-- </form> --></div> </div>

我再加上這個頁面的css

/* 以下是支付確認樣css*/.am-header { display: -webkit-box; display: -ms-flexbox; /* display: flex; */ width: 100%; position: relative; padding: 15px 0; -webkit-box-sizing: border-box; -ms-box-sizing: border-box; box-sizing: border-box; background: #1d222d; height: 50px; text-align: center; -webkit-box-pack: center; -ms-flex-pack: center; box-pack: center; -webkit-box-align: center; -ms-flex-align: center; box-align: center;}.am-header h1 { -webkit-box-flex: 1; -ms-flex: 1; box-flex: 1; line-height: 18px; text-align: center; font-size: 18px; font-weight: 300; color: #fff;}#main { width: 100%; margin: 0 auto; font-size: 14px;}.show { clear: left; display: block;}.content { margin-top: 5px;}.content dt { width: 100px; display: inline-block; float: left; margin-left: 20px; color: #666; font-size: 13px; margin-top: 8px;}.content dd { margin-left: 120px; margin-bottom: 5px;}.content dd input { width: 85%; height: 28px; border: 0; -webkit-border-radius: 0; -webkit-appearance: none; inputoutline: none;}.one_line { display: block; height: 1px; border: 0; border-top: 1px solid #eeeeee; width: 100%; margin-left: 20px;}#btn-dd { margin: 20px; text-align: center;}.new-btn-login-sp { padding: 1px; display: inline-block; width: 75%;}.new-btn-login { background-color: #02aaf1; color: #ffffff; font-weight: bold; border: none; width: 100%; height: 50px; border-radius: 5px; font-size: 16px;}.note-help { color: #999999; font-size: 12px; line-height: 100%; margin-top: 5px; width: 100%; display: block;}

當然,在html頁面的數據是以下這樣定義的:

/*html用的數據*/ payObject: {//支付數據WIDsubject: 0,WIDout_trade_no: '',WIDtotal_amount: '',WIDbody: '' },

當然,在你要打開支付這個頁面時,你得用函數把這些數據進行賦值,就是以下代碼,具體看注釋:

//去往支付頁面函數 payOrder() { //this.payObject.WIDsubject這個我已經在跳轉支付界面時把這個給設為訂單號了 //判斷oid(訂單號)是否是數字 if (typeof this.payObject.WIDsubject != 'string') { //從sessionStorage拿出用戶的數據const usertoken = sessionStorage.getItem('usertoken');const user = JSON.parse(sessionStorage.getItem('user'));// console.log(user)//如果用戶正常(不為空)if (usertoken != null) { if (user != null) { const uname = user.uname; //我在這里去獲取哪個訂單需要支付 dishApi.payConfirm(this.payObject.WIDsubject).then(response => { const resp = response.data; if (resp.code === 200) { //生成這個sNow數據var vNow = new Date();var sNow = '';sNow += String(vNow.getFullYear());sNow += String(vNow.getMonth() + 1);sNow += String(vNow.getDate());sNow += String(vNow.getHours());sNow += String(vNow.getMinutes());sNow += String(vNow.getSeconds());sNow += String(vNow.getMilliseconds());//綁定頁面的data數據this.payObject.WIDout_trade_no = sNow; //綁定tradenothis.payObject.WIDbody = uname;//我這里是綁定的用戶名this.payObject.WIDsubject = resp.oid; //返回現在的訂單號值this.payObject.WIDtotal_amount = resp.totalValue; //返回支付總價 } else {this.$message({ message: resp.message, type: 'warning', duration: 500 // 彈出停留時間}); } }); } else { this.$message({ message: '請先登錄', type: 'warning', duration: 1000 // 彈出停留時間 }); }} else { this.$message({ message: '請先登錄', type: 'warning', duration: 1000 // 彈出停留時間 });} } else {this.$message({ message: '支付錯誤', type: 'warning', duration: 1000 // 彈出停留時間}); } },

然后我在來說當你點擊立即付款后怎么做(就是點擊付款調用paySub()函數)

//支付開始 /給用戶提示 paySub() { this.$message({showClose: true,message: '請在5分鐘內完成支付',duration: 5000 // 彈出停留時間 }); //前往支付 //這里向后端傳入你的支付數據,就是剛才定義的和綁定的數據 dishApi.pay( this.payObject.WIDout_trade_no, this.payObject.WIDtotal_amount, this.payObject.WIDsubject, this.payObject.WIDbody).then(response => {//后臺響應后處理如下 const r = response.data; if (r.code === 200) { //這是后端響應的r,我獲取了它的formaction,至于這里面是什么,我們后面說, //獲取到的數據先存儲在sessionStorage中,為了將來的讀取 sessionStorage.setItem('payaction', r.formaction);//然后就將頁面跳轉到支付的界面 window.open('#pay', '_blank'); } else { this.$message({ message: resp.message, type: 'warning', duration: 500 // 彈出停留時間 }); }}); },

接下來就改springboot后端了:我們來寫上面這個dishApi.pay()訪問的后端是怎么樣的

@ResponseBody @PostMapping('/AliPay') //在這里接收前端傳來的數據payInfo public Object goPay(@RequestBody JSONObject payInfo,HttpServletResponse response,HttpServletRequest request) throws IOException, AlipayApiException { //首先在這里JSONObject jsonObject = new JSONObject();try {//這里是解析前端傳來的數據 String WIDout_trade_no = payInfo.get('WIDout_trade_no').toString(); String WIDtotal_amount = payInfo.get('WIDtotal_amount').toString(); String WIDsubject = payInfo.get('WIDsubject').toString(); String WIDbody = payInfo.get('WIDbody').toString();//System.out.println(WIDout_trade_no);System.out.println(WIDtotal_amount);System.out.println(WIDsubject);System.out.println(WIDbody); //獲得初始化的AlipayClient AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.gatewayUrl, AlipayConfig.app_id, AlipayConfig.merchant_private_key, 'json', AlipayConfig.charset, AlipayConfig.alipay_public_key, AlipayConfig.sign_type); //設置請求參數 AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest(); alipayRequest.setReturnUrl(AlipayConfig.return_url); alipayRequest.setNotifyUrl(AlipayConfig.notify_url);//String out_trade_no = new String(request.getParameter('WIDout_trade_no').getBytes('ISO-8859-1'),'UTF-8');////付款金額,必填//String total_amount = new String(request.getParameter('WIDtotal_amount').getBytes('ISO-8859-1'),'UTF-8');////訂單名稱,必填//String subject = new String(request.getParameter('WIDsubject').getBytes('ISO-8859-1'),'UTF-8');////商品描述,可空//String body = new String(request.getParameter('WIDbody').getBytes('ISO-8859-1'),'UTF-8'); String out_trade_no = WIDout_trade_no; //付款金額,必填 String total_amount = WIDtotal_amount; //訂單名稱,必填 String subject = WIDsubject; //商品描述,可空 String body = WIDbody; // 該筆訂單允許的最晚付款時間,逾期將關閉交易。取值范圍:1m~15d。m-分鐘,h-小時,d-天,1c-當天(1c-當天的情況下,無論交易何時創建,都在0點關閉)。 該參數數值不接受小數點, 如 1.5h,可轉換為 90m。 String timeout_express = '10m'; //例子去官方api找 alipayRequest.setBizContent('{'out_trade_no':'' + out_trade_no + '',' + ''total_amount':'' + total_amount + '',' + ''subject':'' + subject + '',' + ''body':'' + body + '',' + ''timeout_express':'' + timeout_express + '',' + ''product_code':'FAST_INSTANT_TRADE_PAY'}');////請求 String result = alipayClient.pageExecute(alipayRequest).getBody() ; //這里以上都是支付寶的,接下來是我的 //接下來是一系列的字符串操作,總之就是給支付寶返回的result頁面的按鈕屬性設置為非hidden,并且添加了一些好看的屬性,然后取出來<script>標簽(因為前端用v-html不能顯示<script>)最后將整個改造的result發給前端,就有了上面的前端將接收的內容寫入sessionStorage的操作 String befAction = result; StringBuffer aftAction = new StringBuffer(befAction); aftAction = aftAction.reverse(); String midAction = aftAction.substring(68); aftAction = new StringBuffer(midAction).reverse(); aftAction=aftAction.append(' width: 200px; padding:8px; background-color: #428bca; border-color: #357ebd; color: #fff; -moz-border-radius: 10px; -webkit-border-radius: 10px; border-radius: 10px; -khtml-border-radius: 10px;text-align: center; vertical-align: middle; border: 1px solid transparent; font-weight: 900; font-size:125% '> </form>'); jsonObject.put('formaction', aftAction); jsonObject.put('message', StateCode.SUCCESS.getMessage()); jsonObject.put('code', StateCode.SUCCESS.getCode()); return jsonObject;}catch (Exception e){ jsonObject.put('message', StateCode.SERVER_FAILED.getMessage()); jsonObject.put('code', StateCode.SERVER_FAILED.getCode()); return jsonObject;} }

在接下來就又是前端的操作了,由于剛才前端進行了頁面跳轉,所以我們接下來寫的是前端跳轉后的那個頁面:

//這是跳轉到的頁面的全部代碼<template><div class='top'><h1 class='top'>收銀臺</h1> <div v-html='payaction'></div></div></template><script>export default { data() { return { payaction: '' }; }, created() { this.showPayPage(); }, methods: { showPayPage() { this.$nextTick(function() { //我們直接把剛才寫在sessionStorage的頁面顯示在當前頁面this.payaction = sessionStorage.getItem('payaction');//然后刪除sessionStorage的數據sessionStorage.removeItem('payaction'); }); }, }};</script><style scoped>.top{margin-top: 50px;text-align: center;vertical-align: middle;margin-bottom: 100px;}</style>

至此,所有代碼就結束了,你在這個頁面直接點擊支付按鈕就會跳轉到支付寶沙箱支付的界面了。

到此這篇關于Vue+SpringBoot實現支付寶沙箱支付的示例代碼的文章就介紹到這了,更多相關Vue+SpringBoot 支付寶沙箱支付內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: 支付寶
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国语精品一区| 免费视频亚洲| 亚洲二区三区不卡| 成人三级高清视频在线看| 久久一区亚洲| 国产精品久久乐| 国产欧美一区二区三区国产幕精品| 亚洲精品观看| 亚洲精品九九| 久久狠狠亚洲综合| 久久精品凹凸全集| 国产欧美日韩一区二区三区四区| 国产伦精品一区二区三区在线播放| 国产精品porn| 国产传媒av在线| 久久久久久久久丰满| 国精品一区二区| 红桃视频欧美| 蜜桃视频免费观看一区| 97se亚洲| 国产美女高潮在线| 久久中文字幕av一区二区不卡| 1024精品一区二区三区| 亚洲激情av| 欧美视频久久| 日产精品一区二区| 久久精品国产99久久| 亚洲女人av| 欧美日韩亚洲国产精品| 精品国产一级| 亚洲精品2区| 欧美一级全黄| 韩国久久久久久| 亚洲一区观看| 老司机免费视频一区二区三区| 久久久久.com| 视频一区日韩精品| 国内不卡的一区二区三区中文字幕| av亚洲一区二区三区| 蜜桃视频一区二区三区| 麻豆国产精品| 亚洲免费黄色| 国产精品久久久久久妇女| 亚洲h色精品| 日韩在线黄色| 国产精品久久久久久久久久10秀 | 久久午夜影院| 日韩欧美一区二区三区在线视频 | 91久久久精品国产| 国产调教精品| 影视先锋久久| 91福利精品在线观看| 高清av一区| 每日更新成人在线视频| 欧美日韩一区二区三区四区在线观看| 国产中文在线播放| 日韩一区二区三区在线看| 亚洲伊人av| 亚洲精品第一| 色偷偷偷在线视频播放| 亚洲色图网站| аⅴ资源天堂资源库在线| 中文字幕一区二区三区日韩精品 | 久久视频一区| 日韩精品三级| 99热国内精品| 国产毛片精品| 在线亚洲观看| 久久精品国产久精国产| 欧美综合二区| 荡女精品导航| 日韩精品a在线观看91| 亚洲天堂一区二区| 青青草视频一区| 亚洲高清二区| 久久一区欧美| 亚洲视频电影在线| 99久久婷婷| 日本一区二区免费高清| 青青草国产精品亚洲专区无| 99热精品在线观看| 岛国av在线播放| 国产精品久久久久久模特| 免费久久99精品国产| 久久男人天堂| 国产精品a久久久久| 中文字幕一区日韩精品| 激情综合激情| 男人的天堂亚洲一区| 婷婷六月综合| 亚洲福利久久| av在线最新| 麻豆国产一区| 97精品久久| 免费人成在线不卡| 好吊视频一区二区三区四区| 久久久一二三| 国产精品久久久久久久久久10秀 | 国产欧美日韩精品一区二区免费 | 亚洲91在线| 日韩一级精品| 99国产精品一区二区| 丁香婷婷久久| 久久精品国产一区二区| 日本不卡视频一二三区| 亚洲综合国产| 亚洲精品一区二区在线看| 精品国产第一福利网站| 国产精品一区二区av交换| 午夜久久av | 三级小说欧洲区亚洲区| 精品一区视频| 老司机精品视频网| 久久不见久久见中文字幕免费| 日韩欧美中文字幕在线视频| 影音先锋久久精品| 蜜臀av性久久久久蜜臀aⅴ四虎| 午夜久久99| 午夜国产欧美理论在线播放| 国精品一区二区| 激情综合自拍| 免费不卡中文字幕在线| 在线中文字幕播放| 97国产成人高清在线观看| 国内揄拍国内精品久久| 中文在线а√天堂| 日韩欧美网址| 婷婷成人在线| 欧美美女一区| 一本色道精品久久一区二区三区| 老鸭窝毛片一区二区三区| 蜜桃久久久久久| 日韩精品欧美精品| 国产伦精品一区二区三区在线播放| 欧美日韩91| 久久免费精品| 欧美成人a交片免费看| 欧美日韩国产观看视频| 成人小电影网站| 久久亚洲国产| 国产视频一区免费看| 久久国产88| 视频一区日韩精品| 欧美日本二区| 精品少妇一区| 成人在线丰满少妇av| 欧美精选视频一区二区| 欧美日韩国产在线观看网站| av不卡在线| 亚洲ab电影| 免费看一区二区三区| 精品亚洲a∨一区二区三区18| 成人午夜亚洲| 国内亚洲精品| 日韩精品一区二区三区免费视频| 麻豆极品一区二区三区| 欧美日韩在线观看视频小说| 老司机久久99久久精品播放免费| 日韩精品国产欧美| 久久精品系列| 久久精品播放| 视频一区中文字幕精品| 麻豆成人av在线| 久久国产电影| 中文视频一区| 麻豆国产精品777777在线| 一本大道色婷婷在线| 999久久久亚洲| 亚洲理论在线| 韩国女主播一区二区三区| 亚洲欧美日韩高清在线| 日韩精品高清不卡| 成人日韩在线观看| 综合亚洲色图| 精品三级在线观看视频| 伊人影院久久| 国产欧美日韩在线一区二区| 另类中文字幕国产精品| 亚洲精品在线二区| 女生影院久久| 亚洲+小说+欧美+激情+另类| 国产成人在线中文字幕| 欧美成人亚洲| 国产三级精品三级在线观看国产| 亚洲最新无码中文字幕久久| 最新亚洲国产| 色老板在线视频一区二区| 日本免费一区二区视频| 成人免费网站www网站高清| 日本在线成人| 91精品亚洲| 蜜桃视频一区二区三区 | 99久久激情| 国产精品一区二区三区av麻| 不卡中文一二三区| 国产日韩1区| 国产色综合网| 超碰成人av| 国产毛片一区二区三区| 亚洲综合丁香|