shangfutong-ui/jeepay-ui-uapp-face/pages/frontPay/frontPay.vue

208 lines
5.2 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<!-- <view class="front-wrapper">
<view class="pay-amount" v-if="vdata.isShow">
请支付<view>{{ vdata.amount }}()</view>
</view>
<view class="pay-but">
<JButton @tap="facePay">使用刷脸支付</JButton>
</view>
<view class="pay-tips">请将付款码对准右下角识别区距离10厘米左右</view>
</view> -->
<view class="wait-pay-top" v-if="vdata.isShow">
<view class="pay-info">
<view class="pay-num">{{ vdata.amount }}</view>
<view class="pay-wait-title">请支付</view>
</view>
</view>
<view class="face-button" @tap="facePay">
<image src="/static/fronyImg/face-icon.svg" mode="scaleToFill" />
刷脸支付
</view>
<view class="face-scan-tips">
<view class="scan-title">
<image src="/static/fronyImg/scan-code.svg" mode="scaleToFill" />
扫码支付
</view>
<view class="sub-tips"> 请将付款码对准右下角识别区距离10厘米左右 <image src="/static/fronyImg/icon-down.svg" mode="scaleToFill" /> </view>
</view>
</template>
<script setup>
import { reactive, ref } from 'vue'
import { onReady, onLoad } from '@dcloudio/uni-app'
onLoad(() => {
vdata.isShow = true
//接受 后屏信息
wxfaceapp.onRemoteMessage(function (res) {
console.log('后屏消息', res)
analysisMsg(JSON.parse(res.content))
})
wxfaceapp.startCodeScanner({
success: (res) => {
console.log('打开扫码器成功')
console.log(res.replyCode)
console.log(res.reply)
//声明监听扫码器 使用 扫码器 扫描 后 调用 扫码器 回调事件 获取支付code
wxfaceapp.listenCodePayment({
success(res) {
//被扫码回调事件
wxfaceapp.onCodePayEvent(function (r) {
console.log('onCodePayEvent code scanned = ' + r)
console.log('扫码器', r)
postMsg(r)
})
},
})
},
fail: (res) => {
console.log('打开扫码器失败')
console.log(res.replyCode)
console.log(res.reply)
},
})
})
/**
* 页面初始化完成 监听数据串口 输入事件
* */
// onReady(() => {
// wxfaceapp.startSerialPortObserver({
// success: (r) => {
// console.log('开启监听串口输入成功', r)
// },
// fail: (err) => {
// console.log('开启监听串口输入失败:', err)
// },
// })
// })
const vdata = reactive({
amount: '0.00',
isShow: true,
})
// 微信刷脸 刷脸成功后 使用回调 换取支付code
const facePay = () => {
wxfaceapp.facePay({
requireFaceCode: true, //是否需要获取付款码返回给小程序
success(res) {
console.log('success [launchFaceApp]')
console.log('前屏刷脸结果', res)
wxfaceapp.onFacePayPassEvent(function (r) {
console.log('微信支付回调', r)
postMsg(r)
})
},
fail(res) {
console.log('fail [launchFaceApp]')
console.log(res.replyCode)
console.log(res.reply)
},
})
}
// 发送给后屏
const postMsg = (content) => {
wxfaceapp.postMsg({
targetAppid: 'wx4710a1619fbb3714',
content: JSON.stringify(content),
success(res) {
console.log('sendMsgResult suc', res)
},
fail(res) {
console.log('sendMsgResult failed error = ' + res)
},
})
}
/*
* 解析后屏 发送的消息
* type 值 amount 金额 toBanner 去广告页面
*
* */
function analysisMsg(msg) {
console.log('msg', msg)
switch (msg.type) {
case 'amount':
vdata.amount = msg.amount
break
case 'toBanner':
wxfaceapp.stopCodeScanner({})
uni.navigateTo({
url: '/pages/front/front',
})
break
case 'hideAmount':
vdata.isShow = false
break
}
}
</script>
<style lang="scss" scoped>
.wait-pay-top {
display: flex;
justify-content: center;
align-items: center;
height: 60vh;
background: url('/static/fronyImg/front-bg.svg') no-repeat center / cover;
.pay-info {
transform: translateY(-80rpx);
color: #fff;
.pay-num {
font-weight: 700;
font-size: 62rpx;
font-family: wechat sans;
}
.pay-wait-title {
text-align: center;
font-size: 32rpx;
color: rgba($color: #fff, $alpha: 0.5);
}
}
}
.face-button {
background-color: $v-primary;
display: flex;
justify-content: center;
align-items: center;
margin: 65rpx 40rpx;
height: 120rpx;
border-radius: 15rpx;
color: #fff;
font-size: 32rpx;
box-shadow: 0 50rpx 50rpx -50rpx rgba(0, 206, 107, 0.5);
image {
width: 50rpx;
margin-right: 10rpx;
}
}
.face-scan-tips {
box-sizing: border-box;
padding: 20rpx 0;
padding-top: 40rpx;
margin-top: 20rpx;
height: calc(100vh - 60vh - 250rpx);
background-color: rgba($color: $v-primary, $alpha: 0.2);
.scan-title {
display: flex;
justify-content: center;
align-items: center;
font-size: 32rpx;
color: $v-primary;
image {
width: 50rpx;
height: 50rpx;
margin-right: 10rpx;
}
}
.sub-tips {
margin-top: 25rpx;
display: flex;
justify-content: center;
align-items: center;
color: #666;
font-size: 22rpx;
image {
width: 25rpx;
height: 25rpx;
}
}
}
</style>