Skip to content

Commit

Permalink
1.增加判断新旧用户
Browse files Browse the repository at this point in the history
2.增加备注(默认手机号或pt_pin)及自定义备足
  • Loading branch information
zhanggaolei001 committed Nov 22, 2021
1 parent c83e89e commit 306b5c3
Show file tree
Hide file tree
Showing 4 changed files with 177 additions and 24 deletions.
35 changes: 35 additions & 0 deletions InputWindow.xaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
<Window x:Class="JdLoginTool.Wpf.InputWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:JdLoginTool.Wpf"
WindowStartupLocation="CenterScreen"
mc:Ignorable="d"
Title="备注填写"
Height="120"
Width="300">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<StackPanel Orientation="Horizontal"
VerticalAlignment="Center"
Margin="5">
<Label>请输入备注</Label>
<TextBox Name="TextBox"
Width="200"></TextBox>
</StackPanel>
<StackPanel Grid.Row="1"
Orientation="Horizontal"
HorizontalAlignment="Right"
Margin="5">
<Button Margin="3" IsDefault="True" Width="80"
Click="OkClicked">确定</Button>
<Button Margin="3"
Width="80"
Click="CancelClicked">取消</Button>
</StackPanel>
</Grid>
</Window>
41 changes: 41 additions & 0 deletions InputWindow.xaml.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;

namespace JdLoginTool.Wpf
{
/// <summary>
/// InputWindow.xaml 的交互逻辑
/// </summary>
public partial class InputWindow : Window
{
public InputWindow()
{
InitializeComponent();
}

private void OkClicked(object sender, RoutedEventArgs e)
{
this.DialogResult = true;
}

private void CancelClicked(object sender, RoutedEventArgs e)
{
this.DialogResult = false;
}

public string Remarkers
{
get { return this.TextBox.Text; }
set { this.TextBox.Text = value; }
}
}
}
1 change: 1 addition & 0 deletions JdLoginTool.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@

<ItemGroup>
<PackageReference Include="CefSharp.Wpf" Version="85.3.130" />
<PackageReference Include="HtmlAgilityPack" Version="1.11.38" />
<PackageReference Include="Microsoft.Xaml.Behaviors.Wpf" Version="1.1.19" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
<PackageReference Include="RestSharp" Version="106.12.0" />
Expand Down
124 changes: 100 additions & 24 deletions MainWindow.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,11 @@
using System.Linq;
using System.Net;
using System.Text.Json.Serialization;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Input;
using CefSharp;
using HtmlAgilityPack;
using Newtonsoft.Json;
using RestSharp;

Expand All @@ -16,12 +19,28 @@ public MainWindow()
{
InitializeComponent();
Browser.TitleChanged += Browser_TitleChanged;
Browser.KeyUp += TryGetUserInputPhone;
this.Loaded += (o, e) =>
{
Browser.Address = "m.jd.com";
};

}

private async void TryGetUserInputPhone(object sender, KeyEventArgs e)
{
string script = "function get_phone(){\r\n" +
"return document.querySelector('#app>div>div:nth-child(3)>p:nth-child(1)>input').value;\r\n" +
"}\r\n" +
"get_phone();";
await Browser.EvaluateScriptAsync(script).ContinueWith(new Action<Task<JavascriptResponse>>((respA) =>
{
var resp = respA.Result; //respObj此时有两个属性: name、age
dynamic respObj = resp.Result;
PhoneNumber = (string)resp.Result;
}));
}
public String PhoneNumber { get; set; }
private void Browser_TitleChanged(object sender, DependencyPropertyChangedEventArgs e)
{
string ck = "";
Expand All @@ -30,7 +49,7 @@ private void Browser_TitleChanged(object sender, DependencyPropertyChangedEventA
ICookieManager cm = Browser.WebBrowser.GetCookieManager();
var visitor = new TaskCookieVisitor();
cm.VisitAllCookies(visitor);
var cks = visitor.Task.Result;
var cks = visitor.Task.Result;
ck = cks.Where(cookie => cookie.Name == "pt_key" || cookie.Name == "pt_pin").Aggregate(ck, (current, cookie) => current + $"{cookie.Name}={System.Web.HttpUtility.UrlEncode(cookie.Value)};");
if (ck.Contains("pt_key") && ck.Contains("pt_pin"))
{
Expand All @@ -41,17 +60,15 @@ private void Browser_TitleChanged(object sender, DependencyPropertyChangedEventA
cm.DeleteCookies(".jd.com", "pt_pin");
Browser.Address = "m.jd.com";
}
//todo:检测当前页面内容,如果存在
}));
}

private string qlToken = "";
private void UploadToQingLong(string ck)
{
var qlUrl = ConfigurationManager.AppSettings["qlUrl"];
if (string.IsNullOrWhiteSpace(qlUrl))
{
return;
}
if (string.IsNullOrWhiteSpace(qlUrl)) return;
try
{
if (string.IsNullOrWhiteSpace(qlToken))
Expand All @@ -63,18 +80,22 @@ private void UploadToQingLong(string ck)
MessageBox.Show("登陆青龙失败:获取Token失败");
return;
}
//todo:检测是新ck还是老ck,即是否是更新.
//暂不实现,是否登陆重复先自己搞吧.


var client = new RestClient($"{qlUrl}/open/envs");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
var jck = JDCookie.parse(ck);
var input = new InputWindow();
string remarks = PhoneNumber ?? jck.ptPin;//正常应该就是手机号了,如果开发的有问题,拿错手机号会用ptPin
input.Remarkers = remarks;
if (input.ShowDialog() == true)
{
remarks = input.Remarkers;
}
var client = new RestClient($"{qlUrl}/open/envs") { Timeout = -1 };
var request = new RestRequest();
request.AddHeader("Authorization", $"Bearer {qlToken}");
request.AddHeader("Content-Type", "application/json");
var body = $"[{{\"name\":\"JD_COOKIE\",\"value\":\"{ck}\"}}]";
var body = $"[{{\"name\":\"JD_COOKIE\",\"value\":\"{ck}\",\"remarks\":\"{remarks}\"}}]";
request.AddParameter("application/json", body, ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
request.Method = CheckIsNewUser(qlUrl, ck) ? Method.POST : Method.PUT;
var response = client.Execute(request);
Console.WriteLine(response.Content);
MessageBox.Show(response.Content, "上传青龙成功(Cookie已复制到剪切板)");
}
Expand All @@ -84,7 +105,30 @@ private void UploadToQingLong(string ck)
}
}


private bool CheckIsNewUser(string qlUrl, string ck)
{
var newCk = JDCookie.parse(ck);
var client = new RestClient($"{qlUrl}/open/envs");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", $"Bearer {qlToken}");
request.AddHeader("Content-Type", "application/json");
var response = client.Execute(request);
var result = JsonConvert.DeserializeObject<GetCookiesResult>(response.Content);
if (result==null)
{
return true;
}
if (result.code != 200)
{
throw new Exception($"请求返回失败,代码:{result.code}");
}
if (result.data.Any(jck => JDCookie.parse(jck.value).ptPin == newCk.ptPin))
{
return false;
}
return true;
}

private void GetQingLongToken()
{
Expand Down Expand Up @@ -149,19 +193,28 @@ public class JDCookie
public static JDCookie parse(String ck)
{
JDCookie jdCookie = new JDCookie();
String[] split = ck.Split(";");
foreach (var s in split)
try
{
if (s.StartsWith("pt_key"))
{
jdCookie.ptKey = (s.Split("=")[1]);
}
if (s.StartsWith("pt_pin"))

String[] split = ck.Split(";");
foreach (var s in split)
{
jdCookie.ptPin = (s.Split("=")[1]);
if (s.StartsWith("pt_key"))
{
jdCookie.ptKey = (s.Split("=")[1]);
}
if (s.StartsWith("pt_pin"))
{
jdCookie.ptPin = (s.Split("=")[1]);
}
}
return jdCookie;
}
catch (Exception e)
{
Console.WriteLine(e);
jdCookie = new JDCookie();
}

return jdCookie;
}

Expand All @@ -172,4 +225,27 @@ public override String ToString()
}
}

public class GetCookiesResult
{
public int code { get; set; }
public Datum[] data { get; set; }
}






public class Datum
{
public string value { get; set; }
public string _id { get; set; }
public long created { get; set; }
public int status { get; set; }
public string timestamp { get; set; }
public float position { get; set; }
public string name { get; set; }
public string remarks { get; set; }
}

}

0 comments on commit 306b5c3

Please sign in to comment.