import { View, Text, Modal, TouchableOpacity, TextInput, Keyboard, Alert, } 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"; //todo:每次回来重新获取数据刷新余额、如果是本人则直接展示微信 //todo:等待接口上线,完善样式,测试 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, }); //是否已经解锁微信 setIsWechatUnlocked(temStreamerData.data.is_unlock_wechat); //获取用户数据 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; getInitData(); }, [streamerMid]); //点击解锁微信按钮 const unlockWechat = async () => { if (userData?.gold_num >= streamerData?.wechat_coin_price) { //先提交用户微信和备注再进行支付,支付成功后添加解锁关系 //先支付,再提交用户微信和备注 if (!userWechat) { Alert.alert(null, "请填写您的微信"); return; } 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; } //提交用户微信和备注 const signature2 = await generateSignature({ order_id: unlockData.data.order_id, wechat: userWechat, note: remarks, ...base, }); const submitWechatResponse = await fetch( `${apiUrl}/api/vas/consumer_fill_contact?signature=${signature2}`, { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ order_id: unlockData.data.order_id, wechat: userWechat, note: remarks, ...base, }), } ); const submitWechatData = await submitWechatResponse.json(); if (submitWechatData.ret === -1) { Toast.show({ type: "error", text1: submitWechatData.msg, topOffset: 60, }); return; } //展示解锁成功界面 setIsWechatUnlocked(true); } catch (error) { console.error(error); } } else { setIsMoneyEnough(false); } }; return ( setVisible(false)} style={{ backgroundColor: "#00000080", ...tailwind("flex-1 justify-center items-center"), }} > Keyboard.dismiss()} style={tailwind("p-4 rounded-2xl bg-[#1E1C29] items-center w-3/4")} > {isMoneyEnough ? ( <> {streamerData?.name} {/* 提交微信区 */} {isWechatUnlocked ? ( 已成功提交您的微信,请耐心等待 ) : ( *您的微信 setUserWechat(value)} value={userWechat} /> 备注 setRemarks(value)} value={remarks} /> )} 若解锁后72小时未通过好友,请联系客服 {!isWechatUnlocked && ( 提交并支付({streamerData?.wechat_coin_price}金币) )} ) : ( <> 余额不足 { navigation.navigate("Wallet"); setVisible(false); }} style={tailwind( "px-4 py-2 bg-[#FF669E] rounded-full items-center justify-center" )} > 前往充值 )} ); }