提交 2e01098e authored 作者: matian's avatar matian

h5支付开发

上级 1da8c191
...@@ -19,7 +19,10 @@ const props = defineProps<Props>() ...@@ -19,7 +19,10 @@ const props = defineProps<Props>()
<router-view :key="$route.fullPath"></router-view> <router-view :key="$route.fullPath"></router-view>
</section> </section>
<template <template
v-if="(!mobile && route.path !== '/shop/pay') || route.path !== '/shop'" v-if="
(!mobile && !route.path.includes('/shop/pay')) ||
(!mobile && route.path !== '/shop')
"
> >
<AppFooter></AppFooter> <AppFooter></AppFooter>
</template> </template>
......
...@@ -3,10 +3,11 @@ import { ElMessage } from 'element-plus' ...@@ -3,10 +3,11 @@ import { ElMessage } from 'element-plus'
import { Check } from '@element-plus/icons-vue' import { Check } from '@element-plus/icons-vue'
import { useUserStore } from '@/stores/user' import { useUserStore } from '@/stores/user'
import { useDevice } from '@/composables/useDevice' import { useDevice } from '@/composables/useDevice'
import queryString from 'query-string' import { wxJSPay } from '@/utils/wxpay'
import { getOpenId, wxJSPay } from '@/utils/wxpay'
import { createOrder, getOrderList } from '../api' import { createOrder, getOrderList } from '../api'
import { getOpenId } from '@/api/base'
const router = useRouter() const router = useRouter()
const route = useRoute()
const { mobile, wechat, alipay } = useDevice() const { mobile, wechat, alipay } = useDevice()
const user = useUserStore() const user = useUserStore()
const props = defineProps({ const props = defineProps({
...@@ -14,14 +15,14 @@ const props = defineProps({ ...@@ -14,14 +15,14 @@ const props = defineProps({
type: Object type: Object
} }
}) })
const orderInfo: any = ref([]) // const defaultParams: any = ref({})
const openId: any = ref(window.localStorage.getItem('openId'))
const payment_method = ref('')
const orderInfoDetail: any = ref([]) const orderInfoDetail: any = ref([])
const payMode = ref(1) const payMode = ref(1)
const isAgree = ref(false) const isAgree = ref(false)
const currentCheck = ref('12') const currentCheck = ref('12')
const query = $computed(() => { const timer = ref()
return queryString.parse(location.search, { parseBooleans: true })
})
function getDateTime(dayNum: any) { function getDateTime(dayNum: any) {
const dateDay = new Date() const dateDay = new Date()
dateDay.setDate(dateDay.getDate() + dayNum) //获取dayNum天后的日期 dateDay.setDate(dateDay.getDate() + dayNum) //获取dayNum天后的日期
...@@ -39,22 +40,26 @@ const end_time = getDateTime(90) ...@@ -39,22 +40,26 @@ const end_time = getDateTime(90)
const emit = defineEmits<{ const emit = defineEmits<{
(e: 'success', params: object): void (e: 'success', params: object): void
}>() }>()
const checkdChange = (val: string) => {
currentCheck.value = val
}
// 创建订单 // 获取订单
const handleCreateOrder = () => { const getOrder = (val: any) => {
if (wechat) { getOrderList({ order_detail_id: val }).then((resp) => {
const openId = localStorage.getItem('openId') orderInfoDetail.value = resp.data[0]
if (!openId) { const params = {
getOpenId(query.code, pay) status: 'success',
return Promise.reject('openId不存在') orderId: orderInfoDetail.value.order_id,
payPrice: orderInfoDetail.value.payment_money,
payStatus: orderInfoDetail.value.order_status
} }
pay() clearInterval(timer.value)
} else if (alipay) { emit('success', params)
pay() })
}
} }
// 去支付 // 创建订单
function pay() { const handleCreateOrder = () => {
const params: any = { const params: any = {
shop_id: '6998523899570814976', shop_id: '6998523899570814976',
spu_id: '6998525810348916736', spu_id: '6998525810348916736',
...@@ -63,37 +68,52 @@ function pay() { ...@@ -63,37 +68,52 @@ function pay() {
buy_count: '1', buy_count: '1',
notify_url: `https://ep-lms-api.ezijing.com/v2/student/push?tenant=paa&sso_id=${user.user?.id}&class_id=${props.shopItem?.class_id}&course_flag=1&course_id=${props.shopItem?.course_id}` notify_url: `https://ep-lms-api.ezijing.com/v2/student/push?tenant=paa&sso_id=${user.user?.id}&class_id=${props.shopItem?.class_id}&course_flag=1&course_id=${props.shopItem?.course_id}`
} }
if (payMode.value === 4 && wechat) { if (wechat) {
params.payment_method = '4' if (openId.value) {
// 微信扫码支付 params.open_id = openId.value
} else if (payMode.value === 12 && alipay) { params.payment_method = '3'
fetchPlaceOrder(params)
}
} else if (alipay) {
params.payment_method = '12' params.payment_method = '12'
fetchPlaceOrder(params)
} }
createOrder(params).then((order) => { }
orderInfo.value = order const fetchPlaceOrder = (params: any) => {
if (wechat) { createOrder(params).then((res) => {
wxJSPay(order, getOrder()) placeOrderCallback(res)
} else if (alipay) {
location.href = orderInfo.value[0]?.payment_url
}
}) })
} }
const placeOrderCallback = (res: any) => {
// 获取订单 const payType = payment_method.value
function getOrder() { if (payType === '3') {
return getOrderList({ // 微信内支付
order_detail_id: orderInfo.value[0].order_detail_id if (typeof res.payment_more_info === 'string') {
}).then((resp) => { const payInfo = JSON.parse(res.payment_more_info)
orderInfoDetail.value = resp.data[0] if (payInfo.appId) {
const params = { wxJSPay(res, getOrder)
status: 'success', }
orderId: orderInfoDetail.value.order_id,
payPrice: orderInfoDetail.value.payment_money,
payStatus: orderInfoDetail.value.order_status
} }
emit('success', params) } else if (payType === '4') {
}) // 微信外微信h5支付
window.location.href =
res.payment_url +
'&redirect_url=' +
encodeURIComponent(res.order_details_url)
timer.value = setInterval(() => {
// 通过定时器每间隔一会去请求查询微信支付状态(具体参数根据项目需要而定)
getOrder(res.order_detail_id)
}, 2000)
} else if (payType === '12') {
// 支付宝网页支付
window.location.href = res.payment_url
timer.value = setInterval(() => {
// 通过定时器每间隔一会去请求查询微信支付状态(具体参数根据项目需要而定)
getOrder(res.order_detail_id)
}, 2000)
}
} }
// 点击立即购买
const handlePay = () => { const handlePay = () => {
if (isAgree.value === false) { if (isAgree.value === false) {
ElMessage.warning('请先勾选紫荆金保服务协议') ElMessage.warning('请先勾选紫荆金保服务协议')
...@@ -106,6 +126,7 @@ const handlePay = () => { ...@@ -106,6 +126,7 @@ const handlePay = () => {
} }
emit('success', params) emit('success', params)
} else { } else {
// H5创建订单
handleCreateOrder() handleCreateOrder()
} }
} else { } else {
...@@ -115,9 +136,7 @@ const handlePay = () => { ...@@ -115,9 +136,7 @@ const handlePay = () => {
} }
} }
} }
const checkdChange = (val: string) => {
currentCheck.value = val
}
const handlePrev = () => { const handlePrev = () => {
router.push({ router.push({
path: `/shop/detail/${props.shopItem?.id}`, path: `/shop/detail/${props.shopItem?.id}`,
...@@ -126,6 +145,36 @@ const handlePrev = () => { ...@@ -126,6 +145,36 @@ const handlePrev = () => {
} }
}) })
} }
const fetchOpenId = (code: any) => {
getOpenId({ code, identity: 'ezijing' }).then((res: any) => {
if (res.openid) {
openId.value = res.openid || ''
window.localStorage.setItem('openId', res.openid || '')
} else {
window.localStorage.removeItem('openId')
getCode()
}
})
}
const getCode = () => {
const redirectURI = `https://pages.ezijing.com/given/auth.html?redirect_uri=${encodeURIComponent(
window.location.href
)}`
window.location.href = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx451c01d40d090d7a&redirect_uri=${redirectURI}&response_type=code&scope=snsapi_base#wechat_redirect`
}
if (
(openId.value === '' ||
openId.value === null ||
openId.value === undefined) &&
wechat
) {
const { code } = route.query
if (code) {
fetchOpenId(code)
} else {
getCode()
}
}
</script> </script>
<template> <template>
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论