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

feat(frontend): pay.vue 支持 payType 分流,新增普通微信支付路径

iwt 2 месяцев назад
Родитель
Сommit
baf007412f
2 измененных файлов с 50 добавлено и 6 удалено
  1. 46 5
      cfc-frontend/pages/membership/pay.vue
  2. 4 1
      cfc-frontend/utils/api.js

+ 46 - 5
cfc-frontend/pages/membership/pay.vue

@@ -219,16 +219,23 @@ export default {
       if (this.paying) return
       if (this.paying) return
       this.paying = true
       this.paying = true
       var couponId = this.selectedCoupon ? this.selectedCoupon.id : null
       var couponId = this.selectedCoupon ? this.selectedCoupon.id : null
-      createOrder(this.levelCode, 'pay', this.period, couponId).then(function(res) {
+      var openid = uni.getStorageSync('openid') || ''
+      createOrder(this.levelCode, 'pay', this.period, couponId, openid).then(function(res) {
         var data = res.data || {}
         var data = res.data || {}
-        if (data.orderInfo && data.sign) {
-          self.orderNo = data.orderNo || (data.orderInfo && data.orderInfo.outTradeNo)
+        self.orderNo = data.orderNo
+        var payType = data.payType || 'virtual'
+
+        if (payType === 'virtual' && data.orderInfo && data.sign) {
+          // 虚拟支付(现有逻辑不变)
           self.totalPeriods = data.totalPeriods || 1
           self.totalPeriods = data.totalPeriods || 1
           self.currentPeriod = data.currentPeriod || 1
           self.currentPeriod = data.currentPeriod || 1
-          self.splitAmount = data.orderInfo && data.orderInfo.goodsPrice ? data.orderInfo.goodsPrice : (self.finalPrice / self.totalPeriods)
+          self.splitAmount = data.orderInfo.goodsPrice || (self.finalPrice / (self.totalPeriods || 1))
           self.payInstallments(data)
           self.payInstallments(data)
+        } else if (payType === 'wechat' && data.wechatPayParams) {
+          // 普通微信支付(新增分支)
+          self.payWechat(data.wechatPayParams)
         } else {
         } else {
-          // testMode 或试用:模拟支付成功
+          // testMode/trial:模拟支付成功
           self.orderNo = data.orderNo
           self.orderNo = data.orderNo
           uni.showToast({ title: '支付成功,开通中…', icon: 'none' })
           uni.showToast({ title: '支付成功,开通中…', icon: 'none' })
           setTimeout(function() {
           setTimeout(function() {
@@ -245,6 +252,40 @@ export default {
         }
         }
       })
       })
     },
     },
+    payWechat: function(pp) {
+      var self = this
+      if (!pp || !pp.package) {
+        self.paying = false
+        uni.showToast({ title: '支付参数异常', icon: 'none' })
+        return
+      }
+      uni.requestPayment({
+        provider: 'wxpay',
+        timeStamp: pp.timeStamp,
+        nonceStr: pp.nonceStr,
+        package: pp.package,
+        signType: pp.signType || 'RSA',
+        paySign: pp.paySign || pp.sign,
+        success: function() {
+          uni.showToast({ title: '支付成功,开通中…', icon: 'none' })
+          setTimeout(function() {
+            self.paying = false
+            uni.redirectTo({ url: '/pages/membership/result?orderNo=' + (self.orderNo || '') + '&status=success' })
+          }, 800)
+        },
+        fail: function(err) {
+          self.paying = false
+          var errCode = err && err.errCode
+          var msg = '支付取消'
+          if (errCode === -15007 || errCode === -15005) msg = '登录态已过期,请重新登录'
+          else if (err && err.errMsg) msg = err.errMsg
+          uni.showToast({ title: msg, icon: 'none' })
+          setTimeout(function() {
+            uni.redirectTo({ url: '/pages/membership/result?orderNo=' + (self.orderNo || '') + '&status=fail' })
+          }, 800)
+        }
+      })
+    },
     payInstallments: function(dto) {
     payInstallments: function(dto) {
       var self = this
       var self = this
       var current = dto.currentPeriod || 1
       var current = dto.currentPeriod || 1

+ 4 - 1
cfc-frontend/utils/api.js

@@ -327,7 +327,7 @@ export const getCurrentLevel = () => {
 	return request('/api/membership/current', 'POST')
 	return request('/api/membership/current', 'POST')
 }
 }
 
 
-export const createOrder = (levelCode, paymentType, period, couponId) => {
+export const createOrder = (levelCode, paymentType, period, couponId, openid) => {
 	var data = { levelCode: levelCode, paymentType: paymentType }
 	var data = { levelCode: levelCode, paymentType: paymentType }
 	if (period) {
 	if (period) {
 		data.period = period
 		data.period = period
@@ -335,6 +335,9 @@ export const createOrder = (levelCode, paymentType, period, couponId) => {
 	if (couponId) {
 	if (couponId) {
 		data.couponId = couponId
 		data.couponId = couponId
 	}
 	}
+	if (openid) {
+		data.openid = openid
+	}
 	return request('/api/membership/orders', 'POST', data)
 	return request('/api/membership/orders', 'POST', data)
 }
 }