Просмотр исходного кода

fix(payment): 优化统一支付和二维码生成逻辑

- QCode 组件增加响应式监听,修正二维码绘制时机,新增调试日志
- handleCommonWechatPay 函数新增 model 参数,支持微信支付多场景调用
- attractionsOrderPay 支付流程根据平台区分调用微信支付及H5支付逻辑
- chargeVoucher 调用统一支付接口时传递微信特定标识 model='wx'
- threePay 动态根据 model 参数选择支付方式,支持微信JSAPI及其他模式
- djk confirmOrder 支付流程增加H5支付处理,优化支付状态管理
- xsb confirmOrder 支付时区分H5与微信小程序逻辑,处理支付结果与购物车清理
- 修正 manifest.json 多余空白行,代码格式优化
zhangtao 1 неделя назад
Родитель
Сommit
3cb3e51744

+ 8 - 1
src/components/QCode.vue

@@ -11,11 +11,18 @@ function createQRCode() {
   qr.data = props.text
   qr.size = props.qwidth || 100 // 这里是px,和下面的不匹配
   qr.make()
+  console.log(qr, '=====')
+
   const canvasContext = uni.createCanvasContext(props.qrKey, _this)
   qr.canvasContext = canvasContext
   qr.drawCanvas()
 }
-createQRCode()
+onMounted(createQRCode)
+
+watch(
+  () => [props.text, props.qrKey, props.qwidth],
+  () => createQRCode(),
+)
 
 async function downloadQrcode() {
   try {

+ 2 - 1
src/store/user.ts

@@ -548,12 +548,13 @@ export const useUserStore = defineStore('user', {
      * h5第三方统一拉起微信支付跳转路径及参数
      * @param orderNumber
      */
-    handleCommonWechatPay(orderNumber: string) {
+    handleCommonWechatPay(orderNumber: string, model: string = 'mixture') {
       // #ifdef H5
       uni.showLoading({ mask: true })
       const query = {
         orderNumber,
         phone: String(this.userInfo.mobile),
+        model,
         tenantCode: useSysStore().tenantCode,
       }
       const queryString = Object.entries(query)

+ 5 - 5
src/subPack-attractions/attractionsOrderPay/attractionsOrderPay.vue

@@ -29,12 +29,16 @@ async function getPayPreview() {
 }
 
 async function submitPay() {
-  // #ifdef MP-WEIXIN
   const res = await useUserStore().handleCommonPayMent(orderNo.value)
   if (res.payType !== 1) {
     try {
+      // #ifdef MP-WEIXIN
       await useUserStore().getWxCommonPayment(res)
       router.replace({ name: 'attractions-order-detail', params: { orderNo: String(payPreviewInfo.value?.orderNumber), ispay: 'true' } })
+      // #endif
+      // #ifdef H5
+      useUserStore().handleCommonWechatPay(orderNo.value)
+      // #endif
     }
     catch {
       await useUserStore().payError('attractions-tabbar', 'subPack-attractions/commonTab/index')
@@ -43,10 +47,6 @@ async function submitPay() {
   else {
     router.replace({ name: 'attractions-order-detail', params: { orderNo: String(payPreviewInfo.value?.orderNumber), ispay: 'true' } })
   }
-  // #endif
-  // #ifdef H5
-  useUserStore().handleCommonWechatPay(orderNo.value)
-  // #endif
 }
 </script>
 

+ 1 - 1
src/subPack-charge/chargeVoucher/chargeVoucher.vue

@@ -86,7 +86,7 @@ async function submitPay() {
     // #endif
     // #ifdef H5
     uni.hideLoading()
-    useUserStore().handleCommonWechatPay(orderNumber)
+    useUserStore().handleCommonWechatPay(orderNumber, 'wx')
     // #endif
   }
   catch (error) {

+ 20 - 3
src/subPack-common/threePay/index.vue

@@ -7,9 +7,13 @@ definePage({ name: 'smqjh-threePay', islogin: false, style: { navigationBarTitle
 const { token } = storeToRefs(useUserStore())
 const { tenantCode } = storeToRefs(useSysStore())
 const orderNumber = ref()
+const model = ref('mixture')
 onLoad((options: any) => {
   orderNumber.value = options.orderNumber
   tenantCode.value = options.tenantCode
+  if (options.model) {
+    model.value = options.model
+  }
   token.value = ''
   handleLogin(options.phone)
   console.log(options, '============options=======')
@@ -40,9 +44,22 @@ function handleLogin(phoneCode: string) {
 }
 
 async function handlePay() {
-  const res = await useUserStore().handleCommonPayMent(orderNumber.value)
-  priceInfo.value = res
-  console.log(priceInfo.value, '=========================')
+  console.log(model.value, '========model.value=============')
+
+  if (model.value === 'wx') {
+    const payRes = await Apis.charge.wxJsApiPay({
+      data: {
+        orderNumber: orderNumber.value,
+      },
+    })
+    priceInfo.value = payRes.data
+    await useUserStore().getWxCommonPayment(payRes.data)
+  }
+  else {
+    const res = await useUserStore().handleCommonPayMent(orderNumber.value)
+    priceInfo.value = res
+    // console.log(priceInfo.value, '=============priceInfo.value============')
+  }
 }
 async function handleGoPay() {
   if (priceInfo.value?.payType !== 1) {

+ 7 - 6
src/subPack-djk/confirmOrder/index.vue

@@ -36,12 +36,18 @@ async function handlePay() {
   isPay.value = true
   try {
     const data = await Apis.djk.addDJKOrder({ data: { shopId: orderInfo.value.shopId, channelId: useUserStore().userInfo.channelId, phone: phone.value, goodsId: orderInfo.value.id, goodsNum: 1, customerAuthorization: boolToNumber(isAllow.value) } })
-    // #ifdef MP-WEIXIN
     const res = await useUserStore().handleCommonPayMent(data.data)
     if (res.payType !== 1) {
       try {
+        // #ifdef MP-WEIXIN
         await useUserStore().getWxCommonPayment(res)
         await useUserStore().paySuccess('djk-homeTabbar', 'subPack-djk/commonTab/index')
+        // #endif
+
+        // #ifdef H5
+        useUserStore().handleCommonWechatPay(data.data)
+        isPay.value = false
+        // #endif
       }
       catch {
         useUserStore().payError('djk-homeTabbar', 'subPack-djk/commonTab/index')
@@ -50,11 +56,6 @@ async function handlePay() {
     else {
       await useUserStore().paySuccess('djk-homeTabbar', 'subPack-djk/commonTab/index')
     }
-    // #endif
-    // #ifdef H5
-    useUserStore().handleCommonWechatPay(data.data)
-    isPay.value = false
-    // #endif
   }
   catch (error) {
     console.log('error', error)

+ 6 - 8
src/subPack-xsb/confirmOrder/index.vue

@@ -275,15 +275,20 @@ async function handlePay() {
           }
         : undefined,
     )
-    // #ifdef MP-WEIXIN
     const res = await useUserStore().handleCommonPayMent(orderNumber)
     console.log(orderInfo.value, '=====订单信息')
     await useUserStore().clearCart(orderInfo.value.skuList)
     totalProduct.value = null
     if (res.payType !== 1) {
       try {
+        // #ifdef H5
+        useUserStore().handleCommonWechatPay(orderNumber)
+        isPay.value = false
+        // #endif
+        // #ifdef MP-WEIXIN
         await useUserStore().getWxCommonPayment(res)
         await useUserStore().paySuccess('xsb-order', 'subPack-xsb/commonTab/index')
+        // #endif
       }
       catch {
         await useUserStore().payError('xsb-order', 'subPack-xsb/commonTab/index')
@@ -292,13 +297,6 @@ async function handlePay() {
     else {
       await useUserStore().paySuccess('xsb-order', 'subPack-xsb/commonTab/index')
     }
-    // #endif
-    // #ifdef H5
-    useUserStore().handleCommonWechatPay(orderNumber)
-    isPay.value = false
-    await useUserStore().clearCart(orderInfo.value.skuList)
-    totalProduct.value = null
-    // #endif
   }
   catch {
     isPay.value = false