From c5743e1072ed629d721f45db8237874ac9a5df45 Mon Sep 17 00:00:00 2001 From: zhengyiming <540361168@qq.com> Date: 星期三, 26 二月 2025 10:16:38 +0800 Subject: [PATCH] fix: 对接 --- packages/components/src/views/SelectPayTypeView/SelectPayTypeView.vue | 129 +++++++++++++++++++++++++++++++++--------- 1 files changed, 101 insertions(+), 28 deletions(-) diff --git a/packages/components/src/views/SelectPayTypeView/SelectPayTypeView.vue b/packages/components/src/views/SelectPayTypeView/SelectPayTypeView.vue index 6df3a0e..39475ba 100644 --- a/packages/components/src/views/SelectPayTypeView/SelectPayTypeView.vue +++ b/packages/components/src/views/SelectPayTypeView/SelectPayTypeView.vue @@ -1,41 +1,63 @@ <template> <div class="select-pay-type-view"> - <div class="select-pay-type-view-item" @click="handleAliPay"> + <div class="select-pay-type-view-item" v-if="showAliPay" @click="handleAliPay"> <img class="select-pay-type-view-item-icon" :src="IconAliPay" /> <div class="select-pay-type-view-item-text">鏀粯瀹濇敮浠�</div> </div> - <div class="select-pay-type-view-item"> + <div class="select-pay-type-view-item" v-if="showWeixinPay" @click="handleWeixinPay"> <img class="select-pay-type-view-item-icon" :src="IconWeixin" /> <div class="select-pay-type-view-item-text">寰俊鏀粯</div> </div> + <NutToast :msg="state.msg" v-model:visible="state.show" type="warn" cover /> </div> </template> <script setup lang="ts"> import IconWeixin from '../../../assets/icon-weixin-pay.png'; import IconAliPay from '../../../assets/icon-alipay.png'; -import Taro from '@tarojs/taro'; import { useLifeRechargeContext, SetLifePayOrderPayTypeInput, LifeRechargeConstants, -} from '../../utils'; + GetPayOrderForJsAPIInput, +} from '@life-payment/core-vue'; import { useQuery } from '@tanstack/vue-query'; +import { Toast as NutToast } from '@nutui/nutui-taro'; +import { reactive } from 'vue'; defineOptions({ name: 'SelectPayTypeView', }); -// type Props = {}; +type Props = { + orderNo?: string; + lifePayOrderType?: LifeRechargeConstants.LifePayOrderTypeEnum; + showAliPay?: boolean; + showWeixinPay?: boolean; + openId?: string; + isInWeChat?: boolean; + isH5?: boolean; + appId?: string; +}; -// const props = withDefaults(defineProps<Props>(), {}); +const props = withDefaults(defineProps<Props>(), { + showAliPay: true, + showWeixinPay: true, +}); const emit = defineEmits<{ - (e: 'paySuccess', id: number): void; + ( + e: 'paySuccess', + orderNo: string, + lifePayOrderType: LifeRechargeConstants.LifePayOrderTypeEnum + ): void; + (e: 'payOrderForJsAPISuccess'): void; }>(); -const router = Taro.useRouter(); -const orderNo = router.params?.orderNo ?? ''; +const state = reactive({ + show: false, + msg: '', +}); const { blLifeRecharge } = useLifeRechargeContext(); @@ -48,32 +70,83 @@ } catch (error) {} } +async function handleWeixinPay() { + if (props.isH5) { + if (props.isInWeChat) { + handleWeixinPayByJsApi(); + } else { + // try { + // let res = await setLifePayOrderPayType(blLifeRecharge.constants.LifePayTypeEnum.WxPay); + // if (res) { + // location.href = res; + // } + // } catch (error) {} + state.msg = '璇峰湪寰俊涓墦寮�'; + state.show = true; + } + } +} + +async function handleWeixinPayByJsApi() { + try { + let params: GetPayOrderForJsAPIInput = { + orderNo: props.orderNo, + lifePayType: blLifeRecharge.constants.LifePayTypeEnum.WxPay, + openId: props.openId, + attach: Date.now().toString(), + }; + let res = await blLifeRecharge.services.getPayOrderForJsAPI(params); + //@ts-ignore + if (res && WeixinJSBridge) { + //@ts-ignore + WeixinJSBridge.invoke( + 'getBrandWCPayRequest', + { + appId: props.appId, //鍏紬鍙稩D锛岀敱鍟嗘埛浼犲叆 + timeStamp: res.timestamp, //鏃堕棿鎴筹紝鑷�1970骞翠互鏉ョ殑绉掓暟 + nonceStr: res.nonceStr, //闅忔満涓� + package: res.package, + signType: res.signType, //寰俊绛惧悕鏂瑰紡锛� + paySign: res.paySign, //寰俊绛惧悕 + }, + function (res) { + if (res.err_msg == 'get_brand_wcpay_request:ok') { + // 浣跨敤浠ヤ笂鏂瑰紡鍒ゆ柇鍓嶇杩斿洖,寰俊鍥㈤槦閮戦噸鎻愮ず锛� + //res.err_msg灏嗗湪鐢ㄦ埛鏀粯鎴愬姛鍚庤繑鍥瀘k锛屼絾骞朵笉淇濊瘉瀹冪粷瀵瑰彲闈狅紝鍟嗘埛闇�杩涗竴姝ヨ皟鐢ㄥ悗绔煡鍗曠‘璁ゆ敮浠樼粨鏋溿�� + } + } + ); + } + } catch (error) {} +} + async function setLifePayOrderPayType(lifePayType: LifeRechargeConstants.LifePayTypeEnum) { try { let params: SetLifePayOrderPayTypeInput = { - orderNo: orderNo, + orderNo: props.orderNo, lifePayType: lifePayType, }; return await blLifeRecharge.services.setLifePayOrderPayType(params); } catch (error) {} } -// useQuery({ -// queryKey: ['platformServicePayServices/getPlaformServicePayQRCode', orderNo], -// queryFn: async () => { -// return await blLifeRecharge.services.getPayStatusByOrderNo( -// { -// orderNo, -// }, -// { -// showLoading: false, -// } -// ); -// }, -// onSuccess(data) { -// if (data === blLifeRecharge.constants.LifePayStatusEnum.宸叉敮浠�) { -// } -// }, -// refetchInterval: 1000 * 3, -// }); +useQuery({ + queryKey: ['platformServicePayServices/getPayStatusByOrderNo', props.orderNo], + queryFn: async () => { + return await blLifeRecharge.services.getPayStatusByOrderNo( + { + orderNo: props.orderNo, + }, + { + showLoading: false, + } + ); + }, + onSuccess(data) { + if (data !== blLifeRecharge.constants.LifePayStatusEnum.鏈敮浠�) { + emit('paySuccess', props.orderNo, props.lifePayOrderType); + } + }, + refetchInterval: 1000 * 3, +}); </script> -- Gitblit v1.9.1