<em id="09ttv"></em>
    <sup id="09ttv"><pre id="09ttv"></pre></sup>
    <dd id="09ttv"></dd>

        • vue項(xiàng)目 微信支付 和 支付寶支付

          2019-7-2    seo達(dá)人

          如果您想訂閱本博客內(nèi)容,每天自動(dòng)發(fā)到您的郵箱中, 請(qǐng)點(diǎn)這里

          做了一個(gè)項(xiàng)目,有充值功能,充值方式為 微信和支付寶,效果如下:



          代碼:

          <template>
          <el-card class="box-card">
          <ul class="msg-box">
          <li>
          <h4>我要充值</h4>
          </li>
          <li>
          <h4 style="margin-bottom: 15px;">充值金額</h4>
          <el-radio-group v-model="amountVal" @change="amountChange">
          <el-radio border :label="''+ 100">充值100</el-radio>
          <el-radio border :label="''+ 500">充值500</el-radio>
          <el-radio border :label="''+ 1000">充值1000</el-radio>
          <el-radio border :label="''+ 2000">充值2000</el-radio>
          <el-radio border :label="''+ 5000">充值5000</el-radio>
          <el-radio border :label="''">自定義</el-radio>
          </el-radio-group>
          </li>
          <li>
          <h4 style="margin-bottom: 15px;">充值方式</h4>
          <el-radio-group v-model="rechargeParams.paymentType" @change="paymentTypeChange">
          <el-radio border :label="''+ 0">微信</el-radio>
          <el-radio border :label="''+ 1">支付寶</el-radio>
          </el-radio-group>
          </li>
          <li>
          <h4 style="margin-bottom: 15px;">充值金額</h4>
          <el-input :disabled="disabled" clearable v-model="rechargeParams.totalAmt" placeholder="請(qǐng)輸入金額" style="width: 150px;"></el-input>
          </li>
          </ul>
          <div style="text-align: center; margin-top: 30px;">
          <el-button type="primary" @click="surePay">確認(rèn)支付</el-button>
          </div>
          </el-card>
          </template>
           
          <script>
          export default {
          data() {
          return {
          amountVal: '',
          disabled: false,
          //充值參數(shù)
          rechargeParams: {
          "totalAmt": '', //金額
          "paymentType": "0", //支付方式[0:微信,1:支付寶,2:余額,3:活動(dòng)]
          "transType": "0" //交易類型[0:充值,1:消費(fèi)]
          }
          }
          },
          methods: {
          //充值金額
          amountChange(val) {
          this.rechargeParams.totalAmt = val;
          if (val == '') {
          this.disabled = false
          } else {
          this.disabled = true
          }
          },
          //支付方式
          paymentTypeChange(val) {
          this.rechargeParams.paymentType = val
          },
          //確認(rèn)支付
          async surePay() {
          if (this.rechargeParams.totalAmt == '') {
          this.$message.warning('請(qǐng)輸入金額');
          return;
          }
          const res = await this.$http.post('orderInfo/createOrderInfo', this.rechargeParams)
          const {
          code,
          msg,
          result
          } = res.data
          if (code === '200') {
          //支付方式跳轉(zhuǎn)
          if (this.rechargeParams.paymentType == '0') {
          this.$message.success('微信支付');
          this.wechatPay(result);
          } else if (this.rechargeParams.paymentType == '1') {
          this.$message.success('支付寶支付')
          const payDiv = document.getElementById('payDiv');
          if (payDiv) {
          document.body.removeChild(payDiv);
          }
          const div = document.createElement('div');
          div.id = 'payDiv';
          div.innerHTML = result;
          document.body.appendChild(div);
          document.getElementById('payDiv').getElementsByTagName('form')[0].submit();
          } else if (this.rechargeParams.paymentType == '2') {
          this.$message.success('余額支付成功');
          this.$router.push({
          name: 'order'
          })
          } else {
          this.$message.success('活動(dòng)支付')
          }
          } else if (code === 401) {
          this.$message.error(msg)
          this.$router.push({
          name: 'login'
          })
          } else {
          this.$message.error(msg)
          }
          },
          //微信支付
          wechatPay(result) {
          if (result) {
          const orderParams = JSON.parse(result);
          sessionStorage.qrurl = orderParams.qrurl;
          sessionStorage.amt = orderParams.amt;
          sessionStorage.returnUrl = orderParams.returnUrl;
          sessionStorage.order_id = orderParams.order_id;
          this.$router.push({
          name: 'wechatPay'
          })
          }
          }
          }
          }
          </script>
           
          <style scoped>
          /* 信息列表樣式 */
          .msg-box > li {
          list-style: none;
          border-bottom: 1px solid #c5c5c5;
          padding: 20px 10px;
          }
          </style>
          支付寶方式:后臺(tái)會(huì)返回來一個(gè)form,然后提交form自動(dòng)跳轉(zhuǎn)到支付寶支付頁面。

          微信方式:需要自己根據(jù)后臺(tái)返回的url生成二維碼頁面,如圖所示:



          代碼:

          <template>
          <div class="payBox">
          <div class="img-logo">
          <img src="http://img.huoxingbeidiao.com/public/WePayLogo.png" alt="">
          </div>
          <div class="info-box">
          <div style="padding-bottom: 20px;">
          <qrcode-vue :value="qrurl" :size="200" level="H"></qrcode-vue>
          </div>
          <img src="http://img.huoxingbeidiao.com/public/WePayInfo.png" alt="">
          <p class="price">¥&nbsp;{{amt}}</p>
          </div>
          </div>
          </template>
           
          <script>
          import QrcodeVue from 'qrcode.vue'
          export default {
          data() {
          return {
          amt: 0,
          qrurl: '',
          timer: null
          }
          },
          components: {
          QrcodeVue
          },
          methods: {
          getOrderInfo() {
          if (sessionStorage.qrurl && sessionStorage.amt) {
          this.qrurl = sessionStorage.qrurl;
          this.amt = sessionStorage.amt;
          }
          },
          startLoop() {
          this.timer = setInterval(() => {
          this.isPaySuccess()
          }, 3000)
          },
          async isPaySuccess() {
          const orderId = sessionStorage.order_id;
          const res = await this.$http.get('orderInfo/queryOrder?orderId=' + orderId)
          const {
          code,
          msg,
          resultList
          } = res.data
          if (code === '200') {
          clearInterval(this.timer);
          this.timer = null;
          sessionStorage.removeItem('qrurl');
          sessionStorage.removeItem('amt');
          sessionStorage.removeItem('order_id');
          sessionStorage.removeItem('returnUrl');
          setTimeout(() => {
          this.$router.push({
          name: 'order'
          })
          }, 3000)
          } else if (code === 401) {
          clearInterval(this.timer);
          this.timer = null;
          sessionStorage.removeItem('qrurl');
          sessionStorage.removeItem('amt');
          sessionStorage.removeItem('order_id');
          sessionStorage.removeItem('returnUrl');
          this.$message.error(msg)
          this.$router.push({
          name: 'login'
          })
          } else {
           
          }
          }
          },
          created() {
          this.getOrderInfo()
          this.startLoop()
          },
          beforeDestroy() {
          clearInterval(this.timer)
          this.timer = null
          }
          }
          </script>
           
          <style scoped>
          .payBox {
          width: 1000px;
          margin: 0 auto;
          }
           
          .payBox .img-logo {
          padding: 20px 0;
          text-align: center;
          }
           
          .payBox .img-logo img {
          width: 180px;
          }
           
          .info-box {
          padding: 60px 0;
          border-top: 3px solid #F43B66;
          -webkit-box-shadow: 0 0 32px 0 rgba(0, 0, 0, .18);
          box-shadow: 0 0 32px 0 rgba(0, 0, 0, .18);
          text-align: center;
          }
           
          .info-box .price {
          color: #F43B66;
          font-size: 40px;
          padding-top: 20px;
          padding-bottom: 20px;
          border-bottom: 1px solid #f1f1f1;
          }
          </style>
          需要安裝qrcode.vue

          npm install --save qrcode.vue  或  yarn add qrcode.vue
          藍(lán)藍(lán)設(shè)計(jì)m.sdgs6788.com )是一家專注而深入的界面設(shè)計(jì)公司,為期望卓越的國內(nèi)外企業(yè)提供卓越的UI界面設(shè)計(jì)、BS界面設(shè)計(jì) 、 cs界面設(shè)計(jì) 、 ipad界面設(shè)計(jì) 、 包裝設(shè)計(jì) 、 圖標(biāo)定制 、 用戶體驗(yàn) 、交互設(shè)計(jì)、 網(wǎng)站建設(shè) 平面設(shè)計(jì)服務(wù)

          日歷

          鏈接

          個(gè)人資料

          存檔

          久久影院久久香蕉国产线看观看| 香蕉久久一区二区不卡无毒影院| 97久久精品人人澡人人爽| 久久精品aⅴ无码中文字字幕不卡| 99久久99久久精品国产片果冻| 77777亚洲午夜久久多人| 婷婷久久久亚洲欧洲日产国码AV | 人妻无码αv中文字幕久久| 久久这里只精品99re66| 一本一道久久综合狠狠老| av国内精品久久久久影院| 国产日韩久久久精品影院首页| 一本一道久久a久久精品综合| 久久综合给合久久狠狠狠97色69| 久久狠狠色狠狠色综合| 模特私拍国产精品久久| 国产美女久久久| 亚洲午夜久久久久久久久电影网| 97久久久久人妻精品专区| 日韩美女18网站久久精品| 久久久噜噜噜www成人网| 欧美伊香蕉久久综合类网站| 久久国产精品波多野结衣AV| 午夜精品久久久久久| 99久久婷婷免费国产综合精品| 欧美午夜精品久久久久久浪潮| 国产精品久久久久久久久鸭| 久久精品无码一区二区app| 国产情侣久久久久aⅴ免费| 久久毛片一区二区| 一级a性色生活片久久无少妇一级婬片免费放 | 久久久久波多野结衣高潮| 99久久免费只有精品国产| 亚洲AV无码久久精品狠狠爱浪潮| 99热都是精品久久久久久| 国产亚洲欧美成人久久片| 少妇高潮惨叫久久久久久| 久久人人爽人人爽人人片AV东京热 | 久久久久久av无码免费看大片 | 久久精品夜夜夜夜夜久久| 三级三级久久三级久久|