import { View, Text, Modal, TouchableOpacity, TextInput, Keyboard, Alert, KeyboardAvoidingView, } from "react-native"; import React, { useState, useEffect } from "react"; import { useTailwind } from "tailwind-rn"; import { Image } from "expo-image"; import { useNavigation } from "@react-navigation/native"; import { get } from "../../utils/storeInfo"; import baseRequest from "../../utils/baseRequest"; import Toast from "react-native-toast-message"; import { generateSignature } from "../../utils/crypto"; export default function SubmitWechatModal({ visible, setVisible, streamerMid, }) { const tailwind = useTailwind(); const blurhash = "LcKUTa%gOYWBYRt6xuoJo~s8V@fk"; const navigation = useNavigation(); //保存用户数据 const [userData, setUserData] = useState({}); //保存主播数据 const [streamerData, setStreamerData] = useState({}); //是否已经解锁微信 const [isWechatUnlocked, setIsWechatUnlocked] = useState(false); //是否展示余额不足内容 const [isMoneyEnough, setIsMoneyEnough] = useState(true); //保存用户微信号 const [userWechat, setUserWechat] = useState(""); //保存用户备注 const [remarks, setRemarks] = useState(""); useEffect(() => { const getInitData = async () => { const account = await get("account"); const apiUrl = process.env.EXPO_PUBLIC_API_URL; const base = await baseRequest(); const signature = await generateSignature({ mid: streamerMid, ...base, }); try { //获取主播数据 const streamerResponse = await fetch( `${apiUrl}/api/streamer/list_ext_by_mid?signature=${signature}`, { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ mid: streamerMid, ...base, }), } ); const temStreamerData = await streamerResponse.json(); if (temStreamerData.ret === -1) { Toast.show({ type: "error", text1: temStreamerData.msg, topOffset: 60, }); return; } setStreamerData({ ...temStreamerData.data.streamer_ext, wechat_coin_price: temStreamerData.data.streamer_ext.wechat_coin_price, wechat_order_id: temStreamerData.data.wechat_order_id, wechat_order_status: temStreamerData.data.wechat_order_status, }); //是否已经解锁微信 setIsWechatUnlocked( temStreamerData.data.is_unlock_wechat === 1 ? true : false ); //获取用户数据 const signature2 = await generateSignature({ ...base, mid: account.mid, }); const userResponse = await fetch( `${apiUrl}/api/account/list_by_mid?signature=${signature2}`, { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ ...base, mid: account.mid, }), } ); const temUserData = await userResponse.json(); if (temUserData.ret === -1) { Toast.show({ type: "error", text1: temUserData.msg, topOffset: 60, }); return; } setUserData(temUserData.data.account); } catch (error) { console.error(error); } }; if (!streamerMid) return; if (!visible) return; getInitData(); }, [streamerMid, visible]); //点击解锁微信按钮 const unlockWechat = async () => { if ( userData?.gold_num >= streamerData?.wechat_coin_price || (isWechatUnlocked && streamerData?.wechat_order_status === 2) ) { if (!userWechat) { Alert.alert(null, "请填写您的微信"); return; } //付款函数 const payCoin = async () => { const apiUrl = process.env.EXPO_PUBLIC_API_URL; const base = await baseRequest(); const signature = await generateSignature({ contact_product_id: "contact_wechat", uid: streamerMid, ...base, }); try { //支付金币解锁微信 const unlockResponse = await fetch( `${apiUrl}/api/vas/one_step_unlock?signature=${signature}`, { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ contact_product_id: "contact_wechat", uid: streamerMid, ...base, }), } ); const unlockData = await unlockResponse.json(); if (unlockData.ret === -1) { Toast.show({ type: "error", text1: unlockData.msg, topOffset: 60, }); return; } return unlockData.data.order_id; } catch (error) { console.error(error); } }; //提交微信函数 const submitWechat = async (order_id) => { const apiUrl = process.env.EXPO_PUBLIC_API_URL; const base = await baseRequest(); //提交用户微信和备注 const body = { order_id: order_id, wechat: userWechat, note: remarks, ...base, }; const signature2 = await generateSignature(body); try { const submitWechatResponse = await fetch( `${apiUrl}/api/vas/consumer_fill_contact?signature=${signature2}`, { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify(body), } ); const submitWechatData = await submitWechatResponse.json(); if (submitWechatData.ret === -1) { Toast.show({ type: "error", text1: submitWechatData.msg, topOffset: 60, }); return; } } catch (error) { console.error(error); } }; //用户未解锁微信情况:先支付,再提交用户微信和备注 if (!isWechatUnlocked) { const order_id = await payCoin(); if (!order_id) return; await submitWechat(order_id); //展示解锁成功界面 setIsWechatUnlocked(true); return; } //用户已解锁微信情况:直接提交用户微信和备注 if (isWechatUnlocked) { await submitWechat(streamerData.wechat_order_id); setStreamerData({ ...streamerData, wechat_order_status: 3, }); } } else { setIsMoneyEnough(false); } }; return ( setVisible(false)} style={{ backgroundColor: "#00000080", ...tailwind("flex flex-1 justify-center items-center"), }} > Keyboard.dismiss()} style={tailwind( "flex flex-col p-4 rounded-2xl bg-[#1E1C29] items-center w-3/4" )} > {isMoneyEnough ? ( <> {streamerData?.name} {/* 提交微信区 */} {isWechatUnlocked && streamerData?.wechat_order_status !== 2 ? ( {(streamerData?.wechat_order_status === 0 || streamerData?.wechat_order_status === 3) && "已成功提交您的微信,请耐心等待"} {(streamerData?.wechat_order_status === 4 || streamerData?.wechat_order_status === 5) && "已确认添加,订单完成"} ) : ( *您的微信 setUserWechat(value)} value={userWechat} /> 备注 setRemarks(value)} value={remarks} /> )} 若解锁后72小时未通过好友,请联系客服 {(!isWechatUnlocked || streamerData?.wechat_order_status === 2) && ( {!isWechatUnlocked && ( 提交并支付({streamerData?.wechat_coin_price}金币) )} {streamerData?.wechat_order_status === 2 && ( 提交微信 )} )} ) : ( <> 余额不足 { navigation.navigate("Wallet"); setVisible(false); }} style={tailwind( "px-4 py-2 bg-[#FF669E] rounded-full items-center justify-center" )} > 前往充值 )} ); }