Newer
Older
smartwell_app_front / src / components / plus / payment / Payment.vue
StephanieGitHub on 6 Aug 2019 4 KB first commit
<template>
  <transition name="slide">
    <div class="payment">
      <mt-header class="header" title="Payment" :fixed="headerConf.fixed">
        <div slot="left">
          <mt-button icon="back" @click="back">返回</mt-button>
        </div>
      </mt-header>
      <div class="content">
        <div class="row">
          <div class="title">
            支付模块需要配合后台接口测试,本例子只是验证支付可能性。测试需修改相应接口参数为自己公司需要参数即可。
          </div>
        </div>
        <div class="row">
          <mt-button type="danger" @click="pay('ALIPAY')">支付宝支付</mt-button>
          <mt-button type="danger" @click="pay('WXPAY')">微信支付</mt-button>
        </div>
      </div>
    </div>
  </transition>
</template>

<script>
  import { Button, Toast } from 'mint-ui'
  import { headerMixin } from 'assets/js/mixins'
  import { payment, login, patientList } from 'api/index'


  export default {
    mixins: [headerMixin],
    data () {
      return {
        pays: { // 支付信息
          alipay: null,
          wxpay: null,
          url: '' // 支付地址
        },
        paymentInfo: { // 请根据自己的后台请求参数配置
          skuIds: '8',
          desc: '签约服务',
          userId: 'b46fb3dc-27d2-4d6e-a215-c26bf1d65164',
          paymentType: '', // 支付类型
          urlMedical: '',
          sellerId: '' // 商户id
        },
        loginInfo: {
          mobile: 15680869152,
          loginPassword: 'abc123'
        },
        patientInfo: {
          userName: '',
          userId: 'b46fb3dc-27d2-4d6e-a215-c26bf1d65164',
          pageNumber: 1,
          pageSize: 1
        }
      }
    },
    created () {
      this.getChannels() // 获取支付通道
    },
    methods: {
      getChannels () {
        let self = this
        plus.payment.getChannels(function (channels) {
          for (let i in channels) {
            let channel = channels[i]
            if (channel.id == 'qhpay' || channel.id == 'qihoo') { // 过滤掉不支持的支付通道:暂不支持360相关支付
              continue;
            }
            self.pays[channel.id] = channel;
            self.checkServices(channel);
            console.log(JSON.stringify(channels))
          }
        }, function (e) {
          console.log('获取支付通道失败:' + e.message)
        });
      },
      checkServices (pc) {
        console.log("pc " + JSON.stringify(pc))
        if (!pc.serviceReady) {
          console.log('进入检测')
          let txt = null
          switch (pc.id) {
            case 'alipay':
              txt = '检测到系统未安装“支付宝快捷支付服务”,无法完成支付操作,是否立即安装?';
              break;
            default:
              txt = '系统未安装“' + pc.description + '”服务,无法完成支付,是否立即安装?';
              break;
          }
          plus.nativeUI.confirm(txt, function (e) {
            if (e.index == 0) {
              pc.installService()
            }
          }, pc.description)
        }
      },
      pay (payWay) {
        let self = this
        if (payWay === 'WXPAY') {
          this.pays.url = '' // 填写微信的数据请求访问地址
          this.paymentInfo.sellerId = '1486467842'
          this.paymentInfo.paymentType = 'WXPAY'
        } else {
          this.pays.url = '' // 填写支付宝的数据请求地址
          this.paymentInfo.sellerId = 'lhcw@lhinf.com'
          this.paymentInfo.paymentType = 'ALIPAY'
        }
        payment(this.pays.url, this.paymentInfo).then((res) => {
          console.log('支付成功 ' + JSON.stringify(res))
          let msg = res.msg
          console.log("msg " + JSON.stringify(msg))
          plus.payment.request(self.pays[payWay.toLowerCase()], msg, function (result) {
            plus.nativeUI.alert("支付成功!", function () {

            })
          }, function (error) {
            console.log("error " + JSON.stringify(error))
            plus.nativeUI.alert("支付失败!", function () {

            });
          });
        }).catch((err) => {
          console.log('err ' + JSON.stringify(err))
        })
      }
    }
  }
</script>

<style scoped lang="stylus" rel="stylesheet/stylus">
  @import "~assets/css/variable.styl"
  @import "~assets/css/transition.styl"
  .payment {
    position absolute
    z-index 100
    top 0
    left 0
    right 0
    bottom 0
    background-color $color-background
    .content {
      padding-top 50px
      .row {
        margin 20px 0
        text-align center
        .title {
          height 50px
          line-height 20px
        }
      }
    }
  }
</style>