07小米页面- 确认订单

 

2 订单详情

 订单详情展开,关闭

 

3 支付宝支付

1 切换功能, 支付宝和微信

 <div class="item-pay">
          <h3>选择以下支付方式付款</h3>
          <div class="pay-way">
            <p>支付平台</p>
            <div class="pay pay-ali" :class="{'checked':payType==1}" @click="payType=1"></div>
            <div class="pay pay-wechat" :class="{'checked':payType==2}" @click="payType=2"></div>
          </div>
        </div>


2 点击支付宝,打开新的窗口

调用支付接口,返回一个form表单(支付宝返回)

 <div class="item-pay">
          <h3>选择以下支付方式付款</h3>
          <div class="pay-way">
            <p>支付平台</p>
            <div class="pay pay-ali" :class="{'checked':payType==1}" @click="paySubmit(1)"></div>
            <div class="pay pay-wechat" :class="{'checked':payType==2}" @click="paySubmit(2)"></div>
          </div>
        </div>



   paySubmit(payType){
      if(payType == 1){
        window.open('/#/order/alipay?orderId='+this.orderId,'_blank');
      }
    },
<template>
  <div class="ali-pay">
    <div class="form" v-html="content"></div>
  </div>
</template>
<script>
  export default{
    name:'alipay',
    data(){
      return {
        orderId:this.$route.query.orderId,
        content:'',
        loading:true
      }
    },
    mounted(){
      this.paySubmit();
    },
    methods:{
      paySubmit(){
        this.axios.post('/pay',{
          orderId:this.orderId,
          orderName:'Vue高仿小米商城',
          amount:0.01,//单位元
          payType:1 //1支付宝,2微信
        }).then((res)=>{
          this.content = res.content;
       
        })
      }
    }
  }
</script>


 

 3 添加loading加载组件

  调用接口返回一个 form表单(支付宝吧form表单吐给前端了),前端需要拿到form表单进行渲染

到页面当中(<div class="form" v-html="content"></div>),

渲染进行发现并没有提交,需要我们帮助进行跳转。提交需要一个过程,我们用一个插件 loading组件来等待这个过程。

<template>
  <div class="loading">
    <img src="/imgs/loading-svg/loading-bars.svg" alt="">
  </div>
</template>
<script>
  export default{
    name:'loading'
  }
</script>
<style lang="scss">
  .loading{
    height:80px;
    line-height:80px;
    text-align:center;
    padding:30px 0;
    img{
      height:100%;
    }
  }
</style>
<template>
  <div class="ali-pay">
    <loading v-if="loading"></loading>
    <div class="form" v-html="content"></div>
  </div>
</template>
<script>
  import Loading from './../components/Loading'
  export default{
    name:'alipay',
    components:{
      Loading
    },
    data(){
      return {
        orderId:this.$route.query.orderId,
        content:'',
        loading:true
      }
    },
    mounted(){
      this.paySubmit();
    },
    methods:{
      paySubmit(){
        this.axios.post('/pay',{
          orderId:this.orderId,
          orderName:'Vue高仿小米商城',
          amount:0.01,//单位元
          payType:1 //1支付宝,2微信
        }).then((res)=>{
          this.content = res.content;
          setTimeout(()=>{
            document.forms[0].submit();
          },100)
        })
      }
    }
  }
</script>

form表单提交自动跳转支付宝二维码页面

 

4 微信支付

## 微信扫码支付开发文档

https://pay.weixin.qq.com/wiki/doc/api/index.html

https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=6_5

native支付:

后台传给我们一个地址(微信返回来的),我们需要自己转成二维码 

需要插件 转成二维码: qrcode

 安装插件: cnpm i qrcode

4.1 调用

 <div class="pay-way">
            <p>支付平台</p>
            <div class="pay pay-ali" :class="{'checked':payType==1}" @click="paySubmit(1)"></div>
            <div class="pay pay-wechat" :class="{'checked':payType==2}" @click="paySubmit(2)"></div>
          </div>



     <scan-pay-code v-if="showPay" @close="closePayModal" :img="payImg"></scan-pay-code>

     showPay:false,//是否显示微信支付弹框
      payImg:'',//微信支付的二维码地址
      showPayModal:false,//是否显示二次支付确认弹框
      payment:0,//订单总金额
      T:''//定时器ID




 paySubmit(payType){
      if(payType == 1){
        window.open('/#/order/alipay?orderId='+this.orderId,'_blank');
      }else{
        this.axios.post('/pay',{
          orderId:this.orderId,
          orderName:'Vue高仿小米商城',
          amount:0.01,//单位元
          payType:2 //1支付宝,2微信
        }).then((res)=>{
          QRCode.toDataURL(res.content)
          .then(url => {
            this.showPay = true;
            this.payImg = url;
            this.loopOrderState();
          })
          .catch(() => {
            this.$message.error('微信二维码生成失败,请稍后重试');
          })
        })
      }
    },
    // 关闭微信弹框
    closePayModal(){
      this.showPay = false;
      this.showPayModal = true;
      clearInterval(this.T);
    },
    // 轮询当前订单支付状态
    loopOrderState(){
      this.T = setInterval(()=>{
        this.axios.get(`/orders/${this.orderId}`).then((res)=>{
          if(res.status == 20){
            clearInterval(this.T);
            this.goOrderList();
          }
        })
      },1000);
    },

微信支付弹框:

 

<template>
  <div class="scan">
    <div class="mask"></div>
    <div class="item-wrap">
      <div class="img-scan"></div>
      <div class="img-pay">
        <div class="title">微信支付<em @click="close"></em></div>
        <div class="qrcode"><img :src="img"></div>
        <div class="tip">
          <p>请使用<span class="theme-color">微信</span>扫一扫</p>
          <p>二维码完成支付</p>
        </div>
      </div>
    </div>
  </div>
</template>
<script>
  export default{
    name:'scan-pay-code',
    props:['img'],
    methods:{
      close(){
        this.$emit('close');
      }
    }
  }
</script>
<style lang="scss">
  @import './../assets/scss/config.scss';
  @import './../assets/scss/mixin.scss';
  .scan{
    position: absolute;
    top: 0;
    width: 100%;
    height: 100%;
    .mask{
      position: fixed;
      top: 0;
      left: 0;
      right: 0;
      bottom: 0;
      opacity: .6;
      background-color: #000000;
    }
    .item-wrap{
      position: fixed;
      width:670px;
      top: 50%;
      left: 50%;
      transform: translate(-50%,-50%);
      display: flex;
      align-items: center;
      .img-scan{
        @include bgImg(296px,485px,'/imgs/pay/icon-scan.png');
      }
      .img-pay{
        width: 370px;
        height: 440px;
        display: inline-block;
        background-color:#ffffff;
        .title{
          position:relative;
          height:60px;
          line-height:60px;
          color:#333333;
          font-size:20px;
          padding:0 18px;
          background-color:#F5F5F5;
          em{
            position:absolute;
            top: 23.5px;
            right: 20px;
            @include bgImg(13px,13px,'/imgs/icon-close.png');
            cursor:pointer;
          }
        }
        .qrcode{
          text-align: center;
          padding:44px 0 26px;
          img{
            width:237px;
            height:240px;
          }
        }
        .tip{
          text-align:center;
          font-size:14px;
          color:#333333;
        }
      }
    }
  }
</style>

4.2

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值