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

feat: 支付流程、埋点完善

zhangyuhan 1 год назад
Родитель
Сommit
21072ffc2f

+ 26 - 0
src/api/modules/common.js

@@ -46,3 +46,29 @@ export function ajaxGerOrderCode(data) {
     data
   })
 }
+// 支付信息获取
+export function ajaxTestPay (data) {
+  return request({
+    url: '/jypay/callback/testPay',
+    method: 'get',
+    params: data
+  })
+}
+// 支付信息获取
+export function ajaxGetOrderStatus (data) {
+  return request({
+    url: '/jypay/debrisproduct/checkPayResult',
+    method: 'post',
+    data
+  })
+}
+
+
+// 埋点上报
+export function ajaxSetLog(data) {
+  return request({
+    url: '/personnel/statistics',
+    method: 'post',
+    data
+  })
+}

+ 5 - 27
src/pages/order/create/index.vue

@@ -117,6 +117,7 @@ import {mapGetters} from "vuex";
 import SubmitBar from '@/components/create-order/SubmitBar'
 import AdSingle from "@/components/common/Ad.vue";
 import {ajaxGerOrderCode, ajaxGetProductOrderInfo} from "@/api/modules/common";
+import {doOpenPay} from "@/utils";
 export default {
   components: {
     AdSingle,
@@ -320,35 +321,12 @@ export default {
         }
       })
       //
-
     },
     doOpenPay ({ id, price }) {
-      if (this.canSupportPay) {
-        Taro.navigateTo({
-          url: `/pages/order/pay/index?id=${id}&price=${price}`,
-        })
-      } else {
-        this.doPayOther({ id, price })
-      }
-    },
-    doPayOther ({ id, price }) {
-      Taro.navigateToMiniProgram({
-        appId: 'wx37f06c38292f7d82',
-        path: `/pages/order/pay/index?id=${id}&price=${price}`,
-        extraData: {
-          foo: 'bar'
-        },
-        envVersion: 'trial',
-        success: function(res) {
-          // 打开成功
-        },
-        fail: function () {
-          Taro.showToast({
-            title: '取消',
-            icon: 'error',
-            duration: 2000
-          })
-        }
+      doOpenPay({
+        id,
+        price,
+        back: 2
       })
     }
   }

+ 1 - 1
src/pages/order/detail/index.vue

@@ -329,7 +329,7 @@ export default {
         {
           label: '支付时间',
           split: ':',
-          text: payTime ? new Date(payTime).pattern('yyyy.MM.dd HH:mm:ss') : ''
+          text: payTime ? dateFormatter(payTime, 'yyyy.MM.dd HH:mm:ss') : ''
         },
         {
           label: '支付单号',

+ 2 - 9
src/pages/order/list/index.vue

@@ -418,7 +418,7 @@ export default {
         info.totalPrice = formatMoney(info.totalPrice / 100);
       }
       var payMoneyExist = order.pay_money !== null && order.pay_money !== undefined
-      var payPrice = (payMoneyExist && order.pay_money >= 0) ? order.pay_money : order.order_money
+      var payPrice = (payMoneyExist && order.pay_money > 0) ? order.pay_money : order.order_money
       info.payPrice = formatMoney(payPrice / 100)
 
       return info
@@ -482,16 +482,9 @@ export default {
       }).then(res => {
         loading && loading.clear()
         if (res.data) {
-          if (this.active === 0) {
-            // 修改订单状态
-            order.order_status = -2
-            // 手动计算订单内容
-            this.preSortListItem(order)
-          } else if (this.active === 1) {
-            this.listState.list.splice(index, 1)
-          }
           // 取消成功,分页从第一页开始
           showToast('取消成功')
+          this.doSearch()
         } else {
           showToast('取消失败,请联系管理员')
         }

+ 56 - 11
src/pages/order/pay/index.vue

@@ -7,6 +7,9 @@
       <div>
         订单编号:{{payInfo.id}}
       </div>
+
+      <div class="j-button-confirm mock-test-pay" @click="doTestPay">测试-模拟支付</div>
+
     </div>
     <div class="j-footer">
       <div class="j-button-group">
@@ -21,7 +24,9 @@
 
 <script>
 import Taro from "@tarojs/taro";
-import { ajaxGetPayConfig } from "@/api/modules/common";
+import { showLoading, showToast } from '@/utils'
+import { ajaxGetPayConfig, ajaxTestPay, ajaxGetOrderStatus } from "@/api/modules/common";
+import {mapActions} from "vuex";
 
 export default {
   data () {
@@ -39,7 +44,9 @@ export default {
     this.getOrderInfo(this.payInfo.id)
   },
   methods: {
-    doBack () {
+    ...mapActions('tabbar', ['doSwitchTab']),
+    doBack (type = false) {
+      const _this = this
       Taro.navigateBackMiniProgram({
         extraData: {
           foo: 'bar'
@@ -49,7 +56,13 @@ export default {
         },
         fail: function (err) {
           console.log(err)
-          Taro.navigateBack()
+          if (type === true && _this.payInfo?.back > 0) {
+            Taro.navigateBack({
+              delta: Number(_this.payInfo.back)
+            })
+          } else {
+            Taro.navigateBack()
+          }
         }
       })
     },
@@ -84,6 +97,38 @@ export default {
         this.canPayTip = '请重新下单'
       })
     },
+    doTestPay () {
+      ajaxTestPay({
+        ordercode: this.payInfo.id
+      }).then(res => {
+        console.log('res', res)
+        this.checkStatus()
+      })
+    },
+    checkStatus () {
+      const loading = showLoading('检查订单状态')
+      ajaxGetOrderStatus({
+        orderCode: this.payInfo.id
+      }).then(res => {
+        console.log(res)
+        loading.clear()
+        if (res?.data === true) {
+          Taro.showToast({
+            title: '支付成功',
+            duration: 2000
+          })
+          setTimeout(() => {
+            this.doBack(true)
+          }, 1500)
+        } else {
+          showToast('支付未完成')
+        }
+      }).catch(e => {
+        console.log(e)
+        loading.clear()
+        showToast('支付未完成')
+      })
+    },
     doPay () {
       try {
         const payment = Object.assign({
@@ -96,15 +141,9 @@ export default {
         }, this.payParams)
         Taro.requestPayment({
           ...payment,
-          success: function (res) {
+          success: (res) => {
             console.log('ok', JSON.stringify(res))
-            Taro.showToast({
-              title: '支付成功',
-              duration: 2000
-            })
-            setTimeout(() => {
-              this.doBack()
-            }, 1500)
+            this.checkStatus()
           },
           fail: function (res) {
             console.log(JSON.stringify(res))
@@ -184,6 +223,12 @@ export default {
     padding-bottom: constant(safe-area-inset-bottom);
     padding-bottom: env(safe-area-inset-bottom);
   }
+  .mock-test-pay {
+    width: 200px;
+    max-height: 50px;
+    margin: 40px;
+    margin-left: 80px;
+  }
 }
 
 </style>

+ 7 - 1
src/pages/tabbar/mine/index.vue

@@ -34,7 +34,7 @@
 
       <div class="menu-card-group">
         <van-cell-group :border="false" inset title="会员权益">
-          <van-cell :border="false"  title="地区权限" :value="mineInfo.areaCount + '个'" @click="goItem('area')">
+          <van-cell :border="false"  title="地区权限" :value="areaText" @click="goItem('area')">
             <template #icon>
               <img class="cell-icon-img" src="https://cdn-common.jianyu360.com/cdn/assets/mini-app/images/icon/icon_area.png">
             </template>
@@ -122,6 +122,12 @@ export default {
         return ''
       }
       return this.isVip ? 'is-vip' : 'is-free'
+    },
+    areaText () {
+      if (this.mineInfo.areaCount === -1) {
+        return '全国'
+      }
+      return this.mineInfo.areaCount + '个'
     }
   },
   methods: {

+ 2 - 1
src/store/modules/user.js

@@ -108,7 +108,7 @@ export default {
         Code: code
       }).then(res => {
         if (res.data?.status === 1) {
-          dispatch('doGetUserInfo')
+          dispatch('doGetUserOpenId')
           return {
             success: true,
             data: res.data
@@ -137,6 +137,7 @@ export default {
         phone: ""
       })
       commit('doSetUserPhoneInfo', '')
+      commit('doSetUserSessionId', '')
     },
     doGetIpArea ({ commit, getters }) {
       // 已选择地区,不需要获取定位

+ 11 - 2
src/track/index.js

@@ -1,5 +1,6 @@
 import Taro from "@tarojs/taro";
 import store from "../store";
+import {ajaxSetLog} from "../api/modules/common";
 
 function createTrack (payload = {}) {
 
@@ -8,9 +9,15 @@ function createTrack (payload = {}) {
   const nowPage = pages[pages.length - 1]
 
   const upTrackInfo = Object.assign({
+    // 兼容原来字段
+    date: new Date().toString(),
+    platform: 'mini',
+    url: nowPage?.route,
+    breaker_id: '',
+    breaker_name: payload.breakName,
     // 上报客制化信息
     // 1. 根据埋点需求表中文本填入
-    breakId: 'click',
+    breakId: '',
     breakName: '断点名称',
     // 2. 额外数据,需要标注需要什么
     breakData: {
@@ -29,5 +36,7 @@ function createTrack (payload = {}) {
 }
 
 export function setTrackLog (payload) {
-  console.log(createTrack(payload))
+  const trackLog = createTrack(payload)
+  console.log(trackLog)
+  ajaxSetLog(trackLog)
 }

+ 2 - 2
src/utils/common.js

@@ -24,11 +24,11 @@ export function goToOrderDoc (query) {
 }
 
 
-export function doOpenPay ({ id, price }) {
+export function doOpenPay ({ id, price, back }) {
   const canSupportPay = store.getters['env/canSupportPay']
   if (canSupportPay) {
     Taro.navigateTo({
-      url: `/pages/order/pay/index?id=${id}&price=${price}`,
+      url: `/pages/order/pay/index?id=${id}&price=${price}&back=${back}`,
     })
   } else {
     doPayOther({ id, price })

+ 2 - 2
src/utils/taro.js

@@ -6,10 +6,10 @@ export function callPhone (phone) {
   })
 }
 
-export function showLoading () {
+export function showLoading (title = 'loading...') {
   Taro.showLoading({
     mask: true,
-    title: 'loading...',
+    title: title,
   })
   return {
     clear: () => {