Browse Source

对接H5支付

master
梁欣 1 year ago
parent
commit
53d2c82764
  1. 2
      core/payment/alipay.js
  2. 105
      pages/checkout/cashier/index.vue
  3. 12
      pages/goods/list.vue
  4. 4
      pages/index/index.vue
  5. 5
      pages/order/index.vue

2
core/payment/alipay.js

@ -6,7 +6,7 @@ import { PayMethodEnum } from '@/common/enum/payment'
* 发起支付请求 (用于H5) * 发起支付请求 (用于H5)
* @param {Object} option 参数 * @param {Object} option 参数
*/ */
const paymentAsH5 = option => {
export const paymentAsH5 = option => {
const options = { formHtml: '', ...option } const options = { formHtml: '', ...option }
// 跳转到支付宝支付页 // 跳转到支付宝支付页
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {

105
pages/checkout/cashier/index.vue

@ -5,7 +5,7 @@
<!-- 支付剩余时间 --> <!-- 支付剩余时间 -->
<view class="order-countdown"> <view class="order-countdown">
<text class="m-r-6">剩余时间</text> <text class="m-r-6">剩余时间</text>
<count-down :date="order.expirationTime" separator="zh" theme="text" />
<count-down :date="order.expirationTime" separator="zh" theme="text"/>
</view> </view>
<!-- 付款金额 --> <!-- 付款金额 -->
<view class="order-amount"> <view class="order-amount">
@ -44,11 +44,15 @@
<!-- 支付确认弹窗 --> <!-- 支付确认弹窗 -->
<!-- #ifdef H5 --> <!-- #ifdef H5 -->
<u-modal v-if="tempUnifyData" v-model="showConfirmModal" title="支付确认" show-cancel-button confirm-text="已完成支付"
<u-modal v-if="tempUnifyData" v-model="showConfirmModal" title="支付确认" show-cancel-button
confirm-text="已完成支付"
:confirm-color="appTheme.mainBg" negative-top="100" :asyncClose="true" :confirm-color="appTheme.mainBg" negative-top="100" :asyncClose="true"
@confirm="onTradeQuery(tempUnifyData.outTradeNo, tempUnifyData.method)"> @confirm="onTradeQuery(tempUnifyData.outTradeNo, tempUnifyData.method)">
<view class="modal-content"> <view class="modal-content">
<text>请在{{ PayMethodClientNameEnum[tempUnifyData.method] }}内完成支付如果您已经支付成功请点击已完成支付按钮</text>
<text>请在{{
PayMethodClientNameEnum[tempUnifyData.method]
}}内完成支付如果您已经支付成功请点击已完成支付按钮
</text>
</view> </view>
</u-modal> </u-modal>
<!-- #endif --> <!-- #endif -->
@ -56,39 +60,40 @@
</template> </template>
<script> <script>
import wx from "weixin-js-sdk";
import storage from '@/utils/storage'
import {
import wx from "weixin-js-sdk";
import storage from '@/utils/storage'
import {
inArray, inArray,
urlEncode urlEncode
} from '@/utils/util'
import {
} from '@/utils/util'
import {
Alipay, Alipay,
Wechat Wechat
} from '@/core/payment'
import CountDown from '@/components/countdown'
import {
} from '@/core/payment'
import CountDown from '@/components/countdown'
import {
PayMethodEnum PayMethodEnum
} from '@/common/enum/payment'
import {
} from '@/common/enum/payment'
import {
PayStatusEnum PayStatusEnum
} from '@/common/enum/order'
import * as CashierApi from '@/api/cashier'
} from '@/common/enum/order'
import * as CashierApi from '@/api/cashier'
import {paymentAsH5} from "../../../core/payment/alipay";
//
const PayMethodIconEnum = {
//
const PayMethodIconEnum = {
[PayMethodEnum.WECHAT.value]: 'icon-wechat-pay', [PayMethodEnum.WECHAT.value]: 'icon-wechat-pay',
[PayMethodEnum.ALIPAY.value]: 'icon-alipay', [PayMethodEnum.ALIPAY.value]: 'icon-alipay',
[PayMethodEnum.BALANCE.value]: 'icon-balance-pay' [PayMethodEnum.BALANCE.value]: 'icon-balance-pay'
}
}
//
const PayMethodClientNameEnum = {
//
const PayMethodClientNameEnum = {
[PayMethodEnum.WECHAT.value]: '微信', [PayMethodEnum.WECHAT.value]: '微信',
[PayMethodEnum.ALIPAY.value]: '支付宝' [PayMethodEnum.ALIPAY.value]: '支付宝'
}
}
export default {
export default {
components: { components: {
CountDown CountDown
}, },
@ -228,7 +233,8 @@
CashierApi.orderPay(app.orderId, { CashierApi.orderPay(app.orderId, {
method: app.curPaymentItem.method, method: app.curPaymentItem.method,
client: app.platform, client: app.platform,
extra: app.getExtraAsUnify(app.curPaymentItem.method)
extra: app.getExtraAsUnify(app.curPaymentItem.method),
token: uni.getStorageSync('t_token')
}) })
.then(result => app.onSubmitCallback(result)) .then(result => app.onSubmitCallback(result))
.finally(err => { .finally(err => {
@ -259,7 +265,10 @@
// //
if (method === PayMethodEnum.ALIPAY.value) { if (method === PayMethodEnum.ALIPAY.value) {
console.log('paymentData', JSON.stringify(paymentData)) console.log('paymentData', JSON.stringify(paymentData))
Alipay.payment(paymentData)
// Alipay.payment(paymentData)
// .then(res => app.onPaySuccess(res))
// .catch(err => app.onPayFail(err))
Alipay.paymentAsH5({formHtml: result.data.data})
.then(res => app.onPaySuccess(res)) .then(res => app.onPaySuccess(res))
.catch(err => app.onPayFail(err)) .catch(err => app.onPayFail(err))
} }
@ -267,16 +276,15 @@
if (method === PayMethodEnum.WECHAT.value) { if (method === PayMethodEnum.WECHAT.value) {
console.log('paymentData', paymentData) console.log('paymentData', paymentData)
wx.miniProgram.getEnv((res) => { wx.miniProgram.getEnv((res) => {
console.log('money',paymentData.pay_price)
console.log('order_no',paymentData.pay_price)
console.log('money', paymentData.pay_price)
console.log('order_no', paymentData.pay_price)
if (res.miniprogram) { if (res.miniprogram) {
// /pages/dx-scan-code/scan-code, // /pages/dx-scan-code/scan-code,
wx.miniProgram.navigateTo({ wx.miniProgram.navigateTo({
url: '/sub_pages/hdpay/hdpay?money='+paymentData.pay_price+'&orderNo='+paymentData.order_no
url: '/sub_pages/hdpay/hdpay?money=' + paymentData.pay_price + '&orderNo=' + paymentData.order_no
}) })
} else { } else {
console.log(res, 'res') console.log(res, 'res')
app.$toast('非微信环境逻辑') app.$toast('非微信环境逻辑')
@ -303,7 +311,7 @@
"signType": "RSA", // "signType": "RSA", //
"paySign": paymentData.paySign // "paySign": paymentData.paySign //
}, },
function(res) {
function (res) {
app.$toast('订单支付成功') app.$toast('订单支付成功')
app.onSuccessNav() app.onSuccessNav()
}); });
@ -311,11 +319,6 @@
}, 500) }, 500)
// Wechat.payment({ orderKey: app.orderId, ...paymentData }) // Wechat.payment({ orderKey: app.orderId, ...paymentData })
// .then(res => app.onPaySuccess(res)) // .then(res => app.onPaySuccess(res))
// .catch(err => app.onPayFail(err)) // .catch(err => app.onPayFail(err))
@ -398,21 +401,21 @@
}, },
} }
}
}
</script> </script>
<style> <style>
page {
page {
background: #F4F4F4; background: #F4F4F4;
}
}
</style> </style>
<style lang="scss" scoped> <style lang="scss" scoped>
.container {
.container {
background-color: #F4F4F4; background-color: #F4F4F4;
}
}
//
.order-info {
//
.order-info {
padding: 80rpx 0; padding: 80rpx 0;
text-align: center; text-align: center;
@ -441,10 +444,10 @@
font-size: 56rpx; font-size: 56rpx;
} }
} }
}
}
//
.payment-method {
//
.payment-method {
width: 94%; width: 94%;
margin: 0 auto 20rpx auto; margin: 0 auto 20rpx auto;
padding: 0 40rpx; padding: 0 40rpx;
@ -491,11 +494,11 @@
} }
} }
}
}
//
.modal-content {
//
.modal-content {
padding: 40rpx 48rpx; padding: 40rpx 48rpx;
font-size: 30rpx; font-size: 30rpx;
line-height: 50rpx; line-height: 50rpx;
@ -503,11 +506,11 @@
color: #606266; color: #606266;
// height: 620rpx; // height: 620rpx;
box-sizing: border-box; box-sizing: border-box;
}
}
//
.footer-fixed {
//
.footer-fixed {
position: fixed; position: fixed;
bottom: var(--window-bottom); bottom: var(--window-bottom);
left: 0; left: 0;
@ -547,5 +550,5 @@
} }
} }
}
}
</style> </style>

12
pages/goods/list.vue

@ -16,6 +16,9 @@
<view class="sort-item" :class="{ active: sortType === 'all' }" @click="handleSortType('all')"> <view class="sort-item" :class="{ active: sortType === 'all' }" @click="handleSortType('all')">
<text>综合</text> <text>综合</text>
</view> </view>
<view class="sort-item" :class="{ active: sortType === 'category' }" @click="changeCategory">
<text>{{ categoryText }}</text>
</view>
<view class="sort-item" :class="{ active: sortType === 'sales' }" @click="handleSortType('sales')"> <view class="sort-item" :class="{ active: sortType === 'sales' }" @click="handleSortType('sales')">
<text>销量</text> <text>销量</text>
</view> </view>
@ -180,7 +183,10 @@
}, },
// 4 // 4
noMoreSize: 4, noMoreSize: 4,
}
},
mainCategoryId: 0, // id
categoryText: '全部分类',
childCategoryList: []
} }
}, },
@ -286,6 +292,10 @@
app.mescroll.resetUpScroll() app.mescroll.resetUpScroll()
}, },
changeCategory(category){
},
// //
handleShowView() { handleShowView() {
const app = this const app = this

4
pages/index/index.vue

@ -399,8 +399,8 @@
console.log('logut') console.log('logut')
}) })
uni.getStorageSync('t_id', options.id)
uni.getStorageSync('t_token', options.token)
uni.setStorageSync('t_id', options.id)
uni.setStorageSync('t_token', options.token)
_this.getUserInfo(options.id, options.token) _this.getUserInfo(options.id, options.token)
} }

5
pages/order/index.vue

@ -401,7 +401,10 @@
content: '确认要取消该订单吗?', content: '确认要取消该订单吗?',
success(o) { success(o) {
if (o.confirm) { if (o.confirm) {
OrderApi.cancel(orderId)
OrderApi.cancel(orderId, {
token: uni.getStorageSync('t_token'),
userId: uni.getStorageSync('t_id'),
})
.then(result => { .then(result => {
// //
app.$toast(result.message) app.$toast(result.message)

Loading…
Cancel
Save