From b19e3c0ba4db231b82b2655efe0b73a81571fb84 Mon Sep 17 00:00:00 2001 From: zhengyiming <540361168@qq.com> Date: 星期一, 17 三月 2025 14:30:37 +0800 Subject: [PATCH] fix: 修改支付方式选择 --- packages/components/src/hooks/selectPayType.ts | 181 +++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 181 insertions(+), 0 deletions(-) diff --git a/packages/components/src/hooks/selectPayType.ts b/packages/components/src/hooks/selectPayType.ts new file mode 100644 index 0000000..c2a4931 --- /dev/null +++ b/packages/components/src/hooks/selectPayType.ts @@ -0,0 +1,181 @@ +import { + useLifeRechargeContext, + SetLifePayOrderPayTypeInput, + LifeRechargeConstants, + GetPayOrderForJsAPIInput, +} from '@life-payment/core-vue'; +import { useQuery } from '@tanstack/vue-query'; +import { reactive, MaybeRef, unref } from 'vue'; +import Taro from '@tarojs/taro'; + +type UseSelectPayTypeOptions = { + openId?: MaybeRef<string>; + isInWeChat?: MaybeRef<boolean>; + isH5?: MaybeRef<boolean>; + appId?: MaybeRef<string>; +}; + +export function useSelectPayType(options: UseSelectPayTypeOptions = {}) { + const { openId, isInWeChat, isH5, appId } = options; + + const { blLifeRecharge } = useLifeRechargeContext(); + + const state = reactive({ + show: false, + msg: '', + }); + + async function invokeAliPay(orderNo: string) { + try { + let res = await setLifePayOrderPayType( + blLifeRecharge.constants.LifePayTypeEnum.AliPay, + orderNo + ); + if (res) { + location.href = res; + } + } catch (error) {} + } + + async function setLifePayOrderPayType( + lifePayType: LifeRechargeConstants.LifePayTypeEnum, + orderNo: string + ) { + try { + let params: SetLifePayOrderPayTypeInput = { + orderNo: orderNo, + lifePayType: lifePayType, + }; + return await blLifeRecharge.services.setLifePayOrderPayType(params); + } catch (error) {} + } + + async function invokeWeixinPay(orderNo: string) { + if (unref(isH5)) { + if (unref(isInWeChat)) { + handleWeixinPayByJsApi(orderNo); + } else { + // try { + // let res = await setLifePayOrderPayType(blLifeRecharge.constants.LifePayTypeEnum.WxPay); + // if (res) { + // location.href = res; + // } + // } catch (error) {} + state.msg = '璇峰湪寰俊涓墦寮�'; + state.show = true; + } + } else if (Taro.getEnv() === Taro.ENV_TYPE.WEAPP) { + handleWeixinPayByMini(orderNo); + } + } + + async function handleWeixinPayByMini(orderNo: string) { + try { + let res = await getPayOrderForJsAPI(orderNo); + + if (res) { + Taro.requestPayment({ + timeStamp: res.timestamp, + nonceStr: res.nonceStr, + package: res.package, + signType: res.signType as any, + paySign: res.paySign, + success: function (res) { + console.log('res: ', res); + // if(res.errMsg) + }, + fail: function (res) {}, + }); + } + } catch (error) {} + } + + async function getPayOrderForJsAPI(orderNo: string) { + try { + let params: GetPayOrderForJsAPIInput = { + orderNo: orderNo, + lifePayType: blLifeRecharge.constants.LifePayTypeEnum.WxPay, + openId: unref(openId), + attach: Date.now().toString(), + payAppId: unref(appId), + }; + let res = await blLifeRecharge.services.getPayOrderForJsAPI(params); + return res; + } catch (error) {} + } + + async function handleWeixinPayByJsApi(orderNo: string) { + try { + let res = await getPayOrderForJsAPI(orderNo); + + if (res) { + //@ts-ignore + if (WeixinJSBridge) { + //@ts-ignore + WeixinJSBridge.invoke( + 'getBrandWCPayRequest', + { + appId: unref(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锛屼絾骞朵笉淇濊瘉瀹冪粷瀵瑰彲闈狅紝鍟嗘埛闇�杩涗竴姝ヨ皟鐢ㄥ悗绔煡鍗曠‘璁ゆ敮浠樼粨鏋溿�� + } else if (res.err_msg == 'system:access_denied') { + state.msg = '璇峰湪鎵嬫満寰俊涓墦寮�'; + state.show = true; + } else { + // state.msg = res.err_msg; + // state.show = true; + } + } + ); + } + } + } catch (error) {} + } + + return { + invokeAliPay, + invokeWeixinPay, + state, + }; +} + +type UseGetPayStatusByOrderNoOptions = { + orderNo?: MaybeRef<string>; + enabled?: MaybeRef<boolean>; + onPaySuccess?: (orderNo: string) => any; +}; + +export function useGetPayStatusByOrderNo(options: UseGetPayStatusByOrderNoOptions = {}) { + const { orderNo, enabled, onPaySuccess } = options; + + const { blLifeRecharge } = useLifeRechargeContext(); + + useQuery({ + queryKey: ['platformServicePayServices/getPayStatusByOrderNo', orderNo], + queryFn: async () => { + return await blLifeRecharge.services.getPayStatusByOrderNo( + { + orderNo: unref(orderNo), + }, + { + showLoading: false, + } + ); + }, + onSuccess(data) { + if (data !== blLifeRecharge.constants.LifePayStatusEnum.鏈敮浠�) { + onPaySuccess?.(unref(orderNo)); + } + }, + refetchInterval: 1000 * 3, + enabled: enabled, + }); +} -- Gitblit v1.9.1