old_flsystem/FLSystem/Forms/ExchangeStateForm.cs

297 lines
14 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using Api.Framework;
using Api.Framework.Model;
using Api.Framework.Tools;
using Chat.Framework;
using Chat.Framework.WXSdk.IPAD;
using DevExpress.XtraEditors;
using Newtonsoft.Json;
using System;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using UI.Framework.Forms;
using static FLSystem.Forms.point_manage_control;
namespace FLSystem.Forms
{
public partial class ExchangeStateForm : BaseForm
{
public ExchangeStateForm(exchange_list_temp exchange)
{
InitializeComponent();
this.exchange = exchange;
}
exchange_list_temp exchange;
bool is_auto_pay = false;
public string mess { get; set; }
public string pay_url { get; private set; }
private void ExchangeStateForm_Load(object sender, EventArgs e)
{
pay_url = string.Empty;
try
{
this.settingControl1.Bind(exchange);
}
catch (Exception ex)
{
if (!this.IsDisposed)
ShowError(ex);
}
}
private void simpleButton4_Click(object sender, EventArgs e)
{
try
{
if (exchange.state == ApplyType.退)
{
var client = ChatClient.WXClient.Values.ToList().FirstOrDefault(f => f.WeixinHao == exchange.robot_name);
if (client == null)
{
if (XtraMessageBox.Show(
$@"{exchange.robot_name}机器人没有登录
用户将无法收到退回兑换消息
点击OK执行操作", "温馨提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning, DevExpress.Utils.DefaultBoolean.Default) == DialogResult.Cancel)
{
exchange.state = ApplyType.;
}
}
else
{
exchange.state = ApplyType.退;
//throw new Exception("兑换退回失败,请稍后重试");
}
}
this.Close();
}
catch (Exception ex)
{
BaseForm.ShowErrorAutoClose(ex);
}
}
private void simpleButton3_Click(object sender, EventArgs e)
{
exchange.state = ApplyType.;
exchange.remark = string.Empty;
this.Close();
}
private CancellationTokenSource tokenSource = new CancellationTokenSource();
private async void simpleButton1_Click(object sender, EventArgs e)
{
ChangeBtn(this.simpleButton1);
try
{
await Task.Run(() =>
{
try
{
if (exchange.chattype != Api.Framework.SDK.ChatType.) throw new Exception("暂时不支持自动转账!");
var client = ChatClient.WXClient.Values.ToList().FirstOrDefault(f => f.WeixinHao == exchange.robot_name);
if (client == null) throw new Exception(exchange.robot_name + ",该帐号没有登录!");
if (client.WeixinType != Chat.Framework.WXSdk.Implement.WeixinType.Grpc微信) throw new Exception("您当前登录的微信版本,暂不支持自动转账!");
var session = ApiClient.GetSession();
var robot = session.FindRobotInfo(exchange.robot_name, exchange.chattype);
if (robot == null) throw new Exception(exchange.robot_name + ",数据库丢失!");
var passInfo = session.FindWeixinpassword(robot.id);//微信自动转账
if (!string.IsNullOrWhiteSpace(exchange.groupid))
{
var user = client.GetContact(exchange.username);
if (user == null) throw new Exception("兑换用户数据异常");
if (!string.IsNullOrWhiteSpace(user.Ticket))//非好友
throw new Exception("该用户为非好友,请使用支付宝转账");
}
if (passInfo != null && !string.IsNullOrEmpty(passInfo.password))//是否设置了账号密码
{
var bank = passInfo.GetBank();
var pointConfig = ApiClient.GetPointManageConfig();
if (pointConfig == null)
throw new Exception("获取积分管理配置为*");
string result = client.SendPay(exchange.username, pointConfig.ExchangePacketTitle.Replace("[积分名称]", ApiClient.Setting.SystemConfig.PointName).Replace("[兑换金额]", exchange.point.ToString("0.00")), (int)((decimal)exchange.point * 100m), passInfo.password, 1, (PayType)Enum.ToObject(typeof(PayType), (int)pointConfig.Exchange_PayType), bank);
if (!string.IsNullOrEmpty(result)) throw new Exception(robot.name + (bank != null ? "银行" : "余额") + "转账:" + exchange.point.ToString("0.00") + "," + result);
exchange.state = ApplyType.;
exchange.check_time = DateTime.Now;
exchange.remark = "手动审核【微信支付】";
is_auto_pay = true;
ChangeBtn(this.simpleButton1, "微信支付");
}
else
throw new Exception($@"{robot.nick}({robot.name}),尚未设置支付密码!
请在机器人管理中,右击机器人设置密码!");
}
catch (Exception ex)
{
exchange.state = ApplyType.;
//settingControl1.Bind(new exchange_list_temp());
this.settingControl1.Bind(exchange);
if (!this.IsDisposed) ShowError(ex);
ChangeBtn(this.simpleButton1, "微信支付");
}
}, tokenSource.Token);
}
catch (Exception)
{ }
}
bool is_close = true;
private void ChangeBtn(SimpleButton btn, string text = "")
{
if (!this.IsDisposed)
this.UpdateUI(() =>
{
btn.Text = string.IsNullOrEmpty(text) ? "支付中.." : text;
btn.Enabled = string.IsNullOrEmpty(text) ? false : true;
is_close = btn.Enabled;
if (is_auto_pay) this.Close();
});
}
private async void simpleButton2_Click(object sender, EventArgs e)
{
ChangeBtn(this.simpleButton2);
try
{
await Task.Run(() =>
{
try
{
//if (exchange.chattype != Api.Framework.SDK.ChatType.微信)
// throw new Exception("暂时不支持自动转账!");
var client = ChatClient.WXClient.Values.ToList().FirstOrDefault(f => f.WeixinHao == exchange.robot_name);
//var pcclient = ChatClient.PCRobotPool.GetSession(exchange.robot_name);
if (client == null)
throw new Exception(exchange.robot_name + ",该账号没有登录!");
var session = ApiClient.GetSession();
var robot = session.FindRobotInfo(exchange.robot_name, exchange.chattype);
if (robot == null)
throw new Exception(exchange.robot_name + ",数据库丢失!");
if (client != null && !string.IsNullOrWhiteSpace(exchange.groupid))
{
var user = client.GetContact(exchange.username);
if (user == null) throw new Exception("兑换用户数据异常");
if (!string.IsNullOrWhiteSpace(user.Ticket) && user.Ticket != "-1" && user.Ticket != "0")//非好友
throw new Exception("该用户为非好友或已拉黑,请使用支付宝转账");
}
var pointConfig = ApiClient.GetPointManageConfig();
if (pointConfig == null)
throw new Exception("获取积分管理配置为空_");
if (string.IsNullOrWhiteSpace(pointConfig.ExchangeCommercialPayTip))
throw new Exception("商户付款通知提示语不能为空,请到积分兑换插件中设置");
else if (!pointConfig.ExchangeCommercialPayTip.Contains("[领取地址]"))
throw new Exception("商户付款通知提示语中不包含 [领取地址] 变量,请到积分兑换插件中设置");
EventClient.OnEvent(this, $"{robot.nick}【{robot.uin}】手动审核【商户付款】{exchange.username} begin{DateTime.Now.ToString("u")}");
var ispaid = false;
object appinfo = null;
var ExchangePacketTitle = @"兑换成功:[兑换金额]";
if (!string.IsNullOrWhiteSpace(pointConfig.ExchangePacketTitle))
ExchangePacketTitle = pointConfig.ExchangePacketTitle;
string url = ApiClient.SendWechatPay(new { robot_nick = robot.nick, robot_name = robot.name, username = exchange.username, usernick = exchange.usernick }, ExchangePacketTitle.Replace("[积分名称]", ApiClient.Setting.SystemConfig.PointName).Replace("[兑换金额]", exchange.point.ToString()), exchange.point, out ispaid, out appinfo);
if (string.IsNullOrEmpty(url))
throw new Exception("服务器繁忙,请稍后重试");
if (ispaid)
{
var ExchangeCommercialEftTip = @"一一一一商 户 转 账 成 功一一一一
[兑换金额]兑换成功
已直接转入您的账户!";
if (!string.IsNullOrWhiteSpace(pointConfig.ExchangeCommercialEftTip))
ExchangeCommercialEftTip = pointConfig.ExchangeCommercialEftTip;
this.mess = ExchangeCommercialEftTip.Replace("[兑换金额]", exchange.point.ToString("0.00"));
}
else
{
this.pay_url = url;//ApiClient.ShortURL(url).Result;
bool isSendMiNi = false;
if (pointConfig.ExchangeCommercialPayTip_MiniApp == Api.Framework.Enums.SwitchType.)
{
var xml = Util.GetMiNiAppXml(appinfo, robot.type);
if (!string.IsNullOrWhiteSpace(xml))
{
this.mess = xml;
isSendMiNi = true;
}
}
try
{
EventClient.OnEvent(this, $@"{robot.type.ToString()}->{robot.nick}【{robot.uin}】手动审核【{robot.name} - {exchange.username}({exchange.usernick})】
手动审核【商户付款】end{DateTime.Now.ToString("u")}
url{url}
pay_url{pay_url}
appinfo is null:{(appinfo == null)}
appinfo = {(appinfo != null ? JsonConvert.SerializeObject(appinfo) : "NULL") }
app开关{(pointConfig.ExchangeCommercialPayTip_MiniApp == Api.Framework.Enums.SwitchType.)}
:{isSendMiNi.ToString()}
:{(mess == null ? "0" : mess.Length + "")}");
}
catch (Exception)
{ }
if (!isSendMiNi)
{
var ExchangeCommercialPayTip = @"一一一一等 待 领 取一一一一
[领取地址]
点击链接,领取红包到您钱包!";
if (!string.IsNullOrWhiteSpace(pointConfig.ExchangeCommercialPayTip))
ExchangeCommercialPayTip = pointConfig.ExchangeCommercialPayTip;
this.mess = ExchangeCommercialPayTip.Replace("[领取地址]", ApiClient.ShortURL(this.pay_url).Result).Replace("[兑换金额]", exchange.point.ToString("0.00"));
}
}
exchange.state = ApplyType.;
exchange.check_time = DateTime.Now;
exchange.remark = $"手动审核【商户付款】 商户链接:{url}";
is_auto_pay = true;
EventClient.OnEvent(this, $"{robot.nick}【{robot.uin}】商户付款信息 = " + mess);
ChangeBtn(this.simpleButton2, "商户支付");
}
catch (Exception ex)
{
this.Invoke(new Action(delegate
{
ChangeBtn(this.simpleButton2, "商户支付");
exchange.state = ApplyType.;
//settingControl1.Bind(new exchange_list_temp());
this.settingControl1.Bind(exchange);
if (!this.IsDisposed) ShowError(ex);
}));
}
}, tokenSource.Token);
}
catch (Exception)
{ }
}
private void ExchangeStateForm_FormClosing(object sender, FormClosingEventArgs e)
{
if (!is_close)
e.Cancel = true;
else
tokenSource.Cancel();
}
}
}