|
@@ -1,26 +1,136 @@
|
|
|
-import { browser, getUrlCode } from '@/helpers/utils'
|
|
|
-import { Button, Cell, CellGroup, Icon } from 'vant'
|
|
|
+import request from '@/helpers/request'
|
|
|
+import { browser, getUrlCode, moneyFormat } from '@/helpers/utils'
|
|
|
+import numeral from 'numeral'
|
|
|
+import { Button, Cell, CellGroup, Icon, showToast } from 'vant'
|
|
|
import { defineComponent, onMounted, reactive } from 'vue'
|
|
|
+import { useRoute } from 'vue-router'
|
|
|
import styles from './index.module.less'
|
|
|
|
|
|
export default defineComponent({
|
|
|
name: 'pay-define',
|
|
|
setup() {
|
|
|
+ const route = useRoute()
|
|
|
const state = reactive({
|
|
|
- amount: 0,
|
|
|
browserStatus: false,
|
|
|
errorText: '',
|
|
|
- payType: '',
|
|
|
- code: null as any,
|
|
|
- wxAppId: ''
|
|
|
+ code: (route.query.code || '') as any,
|
|
|
+ pay_channel: route.query.pay_channel as any,
|
|
|
+ wxAppId: route.query.wxAppId as any,
|
|
|
+ body: route.query.body as any,
|
|
|
+ price: route.query.price as any,
|
|
|
+ orderNo: route.query.orderNo as any,
|
|
|
+ userId: route.query.userId as any,
|
|
|
+ payInfo: {} as any
|
|
|
})
|
|
|
|
|
|
- const getPayment = () => {}
|
|
|
+ const getPayment = async () => {
|
|
|
+ try {
|
|
|
+ if (parseFloat(state.price) <= 0) {
|
|
|
+ showToast('支付金额异常')
|
|
|
+ return
|
|
|
+ }
|
|
|
+ const payMap: any = {
|
|
|
+ merOrderNo: state.orderNo,
|
|
|
+ paymentChannel: state.pay_channel, // 支付渠道
|
|
|
+ userId: state.userId
|
|
|
+ }
|
|
|
+ // // 判断是否是微信公众号支付
|
|
|
+ if (state.pay_channel == 'wx_pub') {
|
|
|
+ payMap.code = state.code
|
|
|
+ }
|
|
|
+
|
|
|
+ const { data } = await request.post('/api-student/open/userOrder/executePayment', {
|
|
|
+ data: {
|
|
|
+ ...payMap
|
|
|
+ }
|
|
|
+ })
|
|
|
+
|
|
|
+ console.log(data, 'payment')
|
|
|
+ scanCodePay(data.reqParams)
|
|
|
+ // let payment = result.data
|
|
|
+ // if (payment.status === "succeeded") {
|
|
|
+ // this.scanCodePay(payment);
|
|
|
+ // } else if (payment.status == "failed") {
|
|
|
+ // this.browserStatus = false;
|
|
|
+ // this.errorText = payment.error_msg;
|
|
|
+ // document.title = "ERROR";
|
|
|
+ // } else if (payment.status == "pending") {
|
|
|
+ // this.$dialog.alert({
|
|
|
+ // title: "提示",
|
|
|
+ // message: "订单处理中...",
|
|
|
+ // confirmButtonColor: "#269a93",
|
|
|
+ // });
|
|
|
+ // }
|
|
|
+ } catch (e) {
|
|
|
+ //
|
|
|
+ console.log(e)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ const scanCodePay = (data: any) => {
|
|
|
+ // 判断支付方式 如果是 test 模式 支付用测试url 否则用生产url
|
|
|
+ if (state.pay_channel == 'alipay_qr') {
|
|
|
+ const url =
|
|
|
+ data.prod_mode === 'false'
|
|
|
+ ? data.expend.qrcode_url + '?payment_id=' + data.id + '&pay_channel=' + data.pay_channel
|
|
|
+ : data.expend.qrcode_url
|
|
|
+ window.location.href = url
|
|
|
+ } else if (state.pay_channel == 'wx_pub') {
|
|
|
+ const tempPayInfo = JSON.parse(data.expend.pay_info)
|
|
|
+ state.payInfo = tempPayInfo
|
|
|
+ if (typeof (window as any).WeixinJSBridge == 'undefined') {
|
|
|
+ if (document.addEventListener) {
|
|
|
+ document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false)
|
|
|
+ } else if ((document as any).attachEvent) {
|
|
|
+ ;(document as any)
|
|
|
+ .attachEvent(
|
|
|
+ 'WeixinJSBridgeReady',
|
|
|
+ onBridgeReady
|
|
|
+ )(document as any)
|
|
|
+ .attachEvent('onWeixinJSBridgeReady', onBridgeReady)
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ onBridgeReady()
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ const onBridgeReady = () => {
|
|
|
+ const payInfo = state.payInfo
|
|
|
+ // let orderNo = state.orderNo
|
|
|
+ ;(window as any).WeixinJSBridge.invoke(
|
|
|
+ 'getBrandWCPayRequest',
|
|
|
+ {
|
|
|
+ appId: payInfo.appId, //公众号名称,由商户传入
|
|
|
+ timeStamp: payInfo.timeStamp, //时间戳,自1970年以来的秒数
|
|
|
+ nonceStr: payInfo.nonceStr, //随机串
|
|
|
+ package: payInfo.package,
|
|
|
+ signType: payInfo.signType, //微信签名方式:
|
|
|
+ paySign: payInfo.paySign //微信签名
|
|
|
+ },
|
|
|
+ (res: any) => {
|
|
|
+ // if(res.err_msg == "get_brand_wcpay_request:ok" ){
|
|
|
+ // 使用以上方式判断前端返回,微信团队郑重提示:
|
|
|
+ //res.err_msg将在用户支付成功后返回ok,但并不保证它绝对可靠。
|
|
|
+ // } else
|
|
|
+ if (
|
|
|
+ res.err_msg == 'get_brand_wcpay_request:cancel' ||
|
|
|
+ res.err_msg == 'get_brand_wcpay_request:fail'
|
|
|
+ ) {
|
|
|
+ alert('支付失败')
|
|
|
+ } else {
|
|
|
+ // 使用以上方式判断前端返回,微信团队郑重提示:
|
|
|
+ //res.err_msg将在用户支付成功后返回ok,但并不保证它绝对可靠。
|
|
|
+ alert('支付成功')
|
|
|
+ }
|
|
|
+ }
|
|
|
+ )
|
|
|
+ }
|
|
|
|
|
|
// getPayment: throttle(function() {
|
|
|
// try {
|
|
|
// if (!(parseFloat(this.amount) > 0)) {
|
|
|
- // this.$toast("支付金额异常");
|
|
|
+ // this.$toast("f");
|
|
|
// return;
|
|
|
// }
|
|
|
// removeAuthToken();
|
|
@@ -122,109 +232,15 @@ export default defineComponent({
|
|
|
// }
|
|
|
// }
|
|
|
// },
|
|
|
- // onBridgeReady() {
|
|
|
- // let payInfo = this.payInfo;
|
|
|
- // let orderNo = this.orderNo;
|
|
|
- // WeixinJSBridge.invoke(
|
|
|
- // "getBrandWCPayRequest",
|
|
|
- // {
|
|
|
- // appId: payInfo.appId, //公众号名称,由商户传入
|
|
|
- // timeStamp: payInfo.timeStamp, //时间戳,自1970年以来的秒数
|
|
|
- // nonceStr: payInfo.nonceStr, //随机串
|
|
|
- // package: payInfo.package,
|
|
|
- // signType: payInfo.signType, //微信签名方式:
|
|
|
- // paySign: payInfo.paySign, //微信签名
|
|
|
- // },
|
|
|
- // (res) => {
|
|
|
- // // if(res.err_msg == "get_brand_wcpay_request:ok" ){
|
|
|
- // // 使用以上方式判断前端返回,微信团队郑重提示:
|
|
|
- // //res.err_msg将在用户支付成功后返回ok,但并不保证它绝对可靠。
|
|
|
- // // } else
|
|
|
- // if (
|
|
|
- // res.err_msg == "get_brand_wcpay_request:cancel" ||
|
|
|
- // res.err_msg == "get_brand_wcpay_request:fail"
|
|
|
- // ) {
|
|
|
- // // 用户取消支付
|
|
|
- // if (this.platform == "manager") {
|
|
|
- // // 管理端
|
|
|
- // // window.location.replace(validManageUrl() + '/#/paymentResult?orderNo=' + orderNo)
|
|
|
- // this.$router.replace({
|
|
|
- // path: "/paymentResult",
|
|
|
- // query: {
|
|
|
- // type: "error",
|
|
|
- // groupType: "REPAIR",
|
|
|
- // isBack: "off",
|
|
|
- // },
|
|
|
- // });
|
|
|
- // } else if (this.platform == "teacher") {
|
|
|
- // // 老师端
|
|
|
- // window.location.replace(
|
|
|
- // validTeacherUrl() +
|
|
|
- // "/#/paymentResult?orderNo=" +
|
|
|
- // orderNo +
|
|
|
- // "&isBack=off"
|
|
|
- // );
|
|
|
- // } else {
|
|
|
- // this.$router.replace({
|
|
|
- // path: "/paymentResult",
|
|
|
- // query: {
|
|
|
- // type: "error",
|
|
|
- // orderNo: orderNo,
|
|
|
- // isBack: "off",
|
|
|
- // },
|
|
|
- // });
|
|
|
- // }
|
|
|
- // } else {
|
|
|
- // // 使用以上方式判断前端返回,微信团队郑重提示:
|
|
|
- // //res.err_msg将在用户支付成功后返回ok,但并不保证它绝对可靠。
|
|
|
- // if (this.platform == "manager") {
|
|
|
- // // 管理端
|
|
|
- // // window.location.replace(validManageUrl() + '/#/paymentResult?orderNo=' + orderNo)
|
|
|
- // this.$router.replace({
|
|
|
- // path: "/paymentResult",
|
|
|
- // query: {
|
|
|
- // orderNo: this.orderNo,
|
|
|
- // isBack: "off",
|
|
|
- // },
|
|
|
- // });
|
|
|
- // } else if (this.platform == "teacher") {
|
|
|
- // // 老师端
|
|
|
- // window.location.replace(
|
|
|
- // validTeacherUrl() +
|
|
|
- // "/#/paymentResult?orderNo=" +
|
|
|
- // orderNo +
|
|
|
- // "&isBack=off"
|
|
|
- // );
|
|
|
- // } else {
|
|
|
- // this.$router.replace({
|
|
|
- // path: "/paymentResult",
|
|
|
- // query: {
|
|
|
- // orderNo: this.orderNo,
|
|
|
- // isBack: "off",
|
|
|
- // },
|
|
|
- // });
|
|
|
- // }
|
|
|
- // }
|
|
|
- // }
|
|
|
- // );
|
|
|
- // },
|
|
|
- const goAuth = () => {
|
|
|
- // 用户授权
|
|
|
- const urlNow = encodeURIComponent(window.location.href)
|
|
|
- const scope = 'snsapi_base' //snsapi_userinfo //静默授权 用户无感知
|
|
|
- const appid = state.wxAppId || 'wx751141096e75a4ee'
|
|
|
- const url = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appid}&redirect_uri=${urlNow}&response_type=code&scope=${scope}&state=STATE&connect_redirect=1#wechat_redirect`
|
|
|
- window.location.replace(url)
|
|
|
- }
|
|
|
|
|
|
onMounted(() => {
|
|
|
if (window.location.href.indexOf('?#') < 0) {
|
|
|
window.location.href = window.location.href.replace('#', '?#')
|
|
|
}
|
|
|
// 判断当前浏览器
|
|
|
- const payType = state.payType
|
|
|
+ const pay_channel = state.pay_channel
|
|
|
if (browser().weixin) {
|
|
|
- if (payType === 'wx_pub') {
|
|
|
+ if (pay_channel === 'wx_pub') {
|
|
|
//授权
|
|
|
const code = getUrlCode()
|
|
|
if (code) {
|
|
@@ -232,13 +248,13 @@ export default defineComponent({
|
|
|
}
|
|
|
state.browserStatus = true
|
|
|
document.title = '微信支付'
|
|
|
- } else if (payType == 'alipay_qr') {
|
|
|
+ } else if (pay_channel == 'alipay_qr') {
|
|
|
state.errorText = '请使用支付宝扫码'
|
|
|
}
|
|
|
} else if (browser().alipay) {
|
|
|
- if (payType === 'wx_pub') {
|
|
|
+ if (pay_channel === 'wx_pub') {
|
|
|
state.errorText = '请使用微信扫码'
|
|
|
- } else if (payType == 'alipay_qr') {
|
|
|
+ } else if (pay_channel == 'alipay_qr') {
|
|
|
// 支付宝支付
|
|
|
state.browserStatus = true
|
|
|
document.title = '支付宝支付'
|
|
@@ -252,10 +268,17 @@ export default defineComponent({
|
|
|
<div class={styles.paydefine}>
|
|
|
{state.browserStatus && (
|
|
|
<div class={styles.container}>
|
|
|
- <div class={styles.amount}>¥{state.amount}</div>
|
|
|
- <CellGroup>
|
|
|
- <Cell title={'支付方式'} value={''}></Cell>
|
|
|
- <Cell title={'实付金额'} value={'¥0元'}></Cell>
|
|
|
+ <div class={styles.amount}>
|
|
|
+ <span>¥</span>
|
|
|
+ {moneyFormat(state.price)}
|
|
|
+ </div>
|
|
|
+ <CellGroup inset>
|
|
|
+ <Cell title="订单信息" value={state.body} valueClass={styles.values}></Cell>
|
|
|
+ <Cell
|
|
|
+ title="支付方式"
|
|
|
+ value={state.pay_channel === 'wx_pub' ? '微信' : '支付宝'}
|
|
|
+ ></Cell>
|
|
|
+ <Cell title="实付金额" value={`¥${moneyFormat(state.price)}元`}></Cell>
|
|
|
</CellGroup>
|
|
|
|
|
|
<Button type="primary" block size="large" onClick={getPayment} round color="#01C1B5">
|