old_flsystem/类库/Chat.Framework/WXSdk/Implement/WXClientTool.cs

548 lines
25 KiB
C#
Raw Normal View History

2022-09-20 03:10:29 +00:00
using Chat.Framework.WXSdk.IPAD;
using Google.Protobuf;
using Grpc.Core;
using MSScriptControl;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Net;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using WechatProto;
namespace Chat.Framework.WXSdk.Implement
{
/// <summary>
/// 微信管理工具
/// </summary>
internal class WXClientTool
{
public static int ReadInt(byte[] buf, int index)
{
if (buf.Length >= 16)
{
var seqBuf = new byte[4];
Buffer.BlockCopy(buf, index, seqBuf, 0, 4);
return IPAddress.NetworkToHostOrder(BitConverter.ToInt32(seqBuf, 0));
}
return 1;
}
internal static string[] auth_info { get; set; }
internal static byte[] random_encry_key { get { return GrpcConfig.Get(GrpcType.Laoyao).RandomEncryKey; } }
internal static string machine_code { get { return GrpcConfig.Get(GrpcType.Laoyao).MachineCode; } }
static WXClientTool()
{
// switch (grpc_type)
// {
// case 1:
// {
//// version = "6.6.6.7";
//// app_id = "v1_23229f55b208d33b_CodeVip";
//// app_key = "v2_d72d0b8d148afb50e8a0beed37efd1b5";
//// machine_code = "v3_951b8b394d904962d981f02e5d4cee31";
//// channel_credentials = new SslCredentials(@"-----BEGIN CERTIFICATE-----
////MIIDqjCCApKgAwIBAgIJAOf7+/avi9foMA0GCSqGSIb3DQEBCwUAMGoxCzAJBgNV
////BAYTAkNOMQswCQYDVQQIDAJ4eDELMAkGA1UEBwwCeHgxCzAJBgNVBAoMAnh4MQsw
////CQYDVQQLDAJ4eDEUMBIGA1UEAwwLd2VjaGF0QHJvb3QxETAPBgkqhkiG9w0BCQEW
////Anh4MB4XDTE4MDUwODAwMzE1MFoXDTI4MDUwNTAwMzE1MFowajELMAkGA1UEBhMC
////Q04xCzAJBgNVBAgMAnh4MQswCQYDVQQHDAJ4eDELMAkGA1UECgwCeHgxCzAJBgNV
////BAsMAnh4MRQwEgYDVQQDDAt3ZWNoYXRAcm9vdDERMA8GCSqGSIb3DQEJARYCeHgw
////ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDNcWVlhOpXjqivCpJpVHCG
////eM+Q/e83MDpqXmlT33hAFlCfUzWYYhFAHwc+xShkvuoaBwKpAr0fcHT7Kj4TLSJB
////F9FwBccPp4Tv0YH0h4pzZ9nWZCMGXB5TlXAreXrcu8Qab0MPAxMKtMO0FZzQawRD
////mO/S43u6tDBrhW2zgFzCUo+cRiCYRXoewuFVT4RT7eYvEu579oy4mto7YpR8GfPY
////ywiTh7D/4To7nNoWbly84WB9ZSQ8HZoC1KTykqaeSGw7xUhKEoPoeKPke1ECfXB2
////lSZMwKar2IU0BVlvxL55EMF8oXJozLVEZeVIZ4Wp9EFY2KaZJowgoOa1I+vcwBbd
////AgMBAAGjUzBRMB0GA1UdDgQWBBR2SmMGUpTN/Dl0wcSYcPav6o01iDAfBgNVHSME
////GDAWgBR2SmMGUpTN/Dl0wcSYcPav6o01iDAPBgNVHRMBAf8EBTADAQH/MA0GCSqG
////SIb3DQEBCwUAA4IBAQAdCSkska27VdLcGqK9/sraopxaX31Nseci/sJbimIHxr+q
////DwAHExU5sJ1qT827n2OpF/lWMRhnJZ3ubeJ8oGA3CAKu4EiKKGA1hGOLCbEvagCc
////sdBSegk050qkMssJzNaw7boZB8vek1RDK32Fuhsh4m+MUZBj6bJCdGW9K+ZMmpZl
////bMwmsgqV6+EMvr+PhFHy8bOAdIs4/eOTjW7R0JwYgFArVXMrVKgiRknkhM+PBBHG
////DPWO0j3855SF2X5r4jQs2PvKGJjOMuQeIgsf2GbwSQhXEhM8lGdjn9up8hm7VSXf
////x8wZquXczPSdDez7tP+g9nKbxcJtGnxo8+Jntmvs
////-----END CERTIFICATE-----");
// }
// break;
// case 2:
// {
// version = "6.7.2";
// app_id = "v1_LCEO_Code";
// app_key = "v2_4d5d55d6fbb6ce87b0f53019fefebb89";
// machine_code = "v3_7af2592d5c49d94424bac95e80cb07a4";
// channel_credentials = new SslCredentials(@"-----BEGIN CERTIFICATE-----
//MIIDqjCCApKgAwIBAgIJAOf7+/avi9foMA0GCSqGSIb3DQEBCwUAMGoxCzAJBgNV
//BAYTAkNOMQswCQYDVQQIDAJ4eDELMAkGA1UEBwwCeHgxCzAJBgNVBAoMAnh4MQsw
//CQYDVQQLDAJ4eDEUMBIGA1UEAwwLd2VjaGF0QHJvb3QxETAPBgkqhkiG9w0BCQEW
//Anh4MB4XDTE4MDUwODAwMzE1MFoXDTI4MDUwNTAwMzE1MFowajELMAkGA1UEBhMC
//Q04xCzAJBgNVBAgMAnh4MQswCQYDVQQHDAJ4eDELMAkGA1UECgwCeHgxCzAJBgNV
//BAsMAnh4MRQwEgYDVQQDDAt3ZWNoYXRAcm9vdDERMA8GCSqGSIb3DQEJARYCeHgw
//ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDNcWVlhOpXjqivCpJpVHCG
//eM+Q/e83MDpqXmlT33hAFlCfUzWYYhFAHwc+xShkvuoaBwKpAr0fcHT7Kj4TLSJB
//F9FwBccPp4Tv0YH0h4pzZ9nWZCMGXB5TlXAreXrcu8Qab0MPAxMKtMO0FZzQawRD
//mO/S43u6tDBrhW2zgFzCUo+cRiCYRXoewuFVT4RT7eYvEu579oy4mto7YpR8GfPY
//ywiTh7D/4To7nNoWbly84WB9ZSQ8HZoC1KTykqaeSGw7xUhKEoPoeKPke1ECfXB2
//lSZMwKar2IU0BVlvxL55EMF8oXJozLVEZeVIZ4Wp9EFY2KaZJowgoOa1I+vcwBbd
//AgMBAAGjUzBRMB0GA1UdDgQWBBR2SmMGUpTN/Dl0wcSYcPav6o01iDAfBgNVHSME
//GDAWgBR2SmMGUpTN/Dl0wcSYcPav6o01iDAPBgNVHRMBAf8EBTADAQH/MA0GCSqG
//SIb3DQEBCwUAA4IBAQAdCSkska27VdLcGqK9/sraopxaX31Nseci/sJbimIHxr+q
//DwAHExU5sJ1qT827n2OpF/lWMRhnJZ3ubeJ8oGA3CAKu4EiKKGA1hGOLCbEvagCc
//sdBSegk050qkMssJzNaw7boZB8vek1RDK32Fuhsh4m+MUZBj6bJCdGW9K+ZMmpZl
//bMwmsgqV6+EMvr+PhFHy8bOAdIs4/eOTjW7R0JwYgFArVXMrVKgiRknkhM+PBBHG
//DPWO0j3855SF2X5r4jQs2PvKGJjOMuQeIgsf2GbwSQhXEhM8lGdjn9up8hm7VSXf
//x8wZquXczPSdDez7tP+g9nKbxcJtGnxo8+Jntmvs
//-----END CERTIFICATE-----");
// }
// break;
// default:
// break;
// }
}
// internal static string[] grpc_info { get; set; }
// internal static byte[] random_encry_key = CsharpHttpHelper.HttpExtend.RandomByte(16);
// internal static string version = "6.7.2";
// internal static string app_id = "v1_LCEO_Code";
// internal static string app_key = "v2_4d5d55d6fbb6ce87b0f53019fefebb89";
// internal static string machine_code = "v3_7af2592d5c49d94424bac95e80cb07a4";
// internal static SslCredentials channel_credentials = new SslCredentials(@"-----BEGIN CERTIFICATE-----
//MIIDqjCCApKgAwIBAgIJAOf7+/avi9foMA0GCSqGSIb3DQEBCwUAMGoxCzAJBgNV
//BAYTAkNOMQswCQYDVQQIDAJ4eDELMAkGA1UEBwwCeHgxCzAJBgNVBAoMAnh4MQsw
//CQYDVQQLDAJ4eDEUMBIGA1UEAwwLd2VjaGF0QHJvb3QxETAPBgkqhkiG9w0BCQEW
//Anh4MB4XDTE4MDUwODAwMzE1MFoXDTI4MDUwNTAwMzE1MFowajELMAkGA1UEBhMC
//Q04xCzAJBgNVBAgMAnh4MQswCQYDVQQHDAJ4eDELMAkGA1UECgwCeHgxCzAJBgNV
//BAsMAnh4MRQwEgYDVQQDDAt3ZWNoYXRAcm9vdDERMA8GCSqGSIb3DQEJARYCeHgw
//ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDNcWVlhOpXjqivCpJpVHCG
//eM+Q/e83MDpqXmlT33hAFlCfUzWYYhFAHwc+xShkvuoaBwKpAr0fcHT7Kj4TLSJB
//F9FwBccPp4Tv0YH0h4pzZ9nWZCMGXB5TlXAreXrcu8Qab0MPAxMKtMO0FZzQawRD
//mO/S43u6tDBrhW2zgFzCUo+cRiCYRXoewuFVT4RT7eYvEu579oy4mto7YpR8GfPY
//ywiTh7D/4To7nNoWbly84WB9ZSQ8HZoC1KTykqaeSGw7xUhKEoPoeKPke1ECfXB2
//lSZMwKar2IU0BVlvxL55EMF8oXJozLVEZeVIZ4Wp9EFY2KaZJowgoOa1I+vcwBbd
//AgMBAAGjUzBRMB0GA1UdDgQWBBR2SmMGUpTN/Dl0wcSYcPav6o01iDAfBgNVHSME
//GDAWgBR2SmMGUpTN/Dl0wcSYcPav6o01iDAPBgNVHRMBAf8EBTADAQH/MA0GCSqG
//SIb3DQEBCwUAA4IBAQAdCSkska27VdLcGqK9/sraopxaX31Nseci/sJbimIHxr+q
//DwAHExU5sJ1qT827n2OpF/lWMRhnJZ3ubeJ8oGA3CAKu4EiKKGA1hGOLCbEvagCc
//sdBSegk050qkMssJzNaw7boZB8vek1RDK32Fuhsh4m+MUZBj6bJCdGW9K+ZMmpZl
//bMwmsgqV6+EMvr+PhFHy8bOAdIs4/eOTjW7R0JwYgFArVXMrVKgiRknkhM+PBBHG
//DPWO0j3855SF2X5r4jQs2PvKGJjOMuQeIgsf2GbwSQhXEhM8lGdjn9up8hm7VSXf
//x8wZquXczPSdDez7tP+g9nKbxcJtGnxo8+Jntmvs
//-----END CERTIFICATE-----");
/// <summary>
/// 执行JS
/// </summary>
/// <param name="sCode">JavaScript代码的字符串</param>
/// <returns></returns>
public static string Usc2ToAnsi(string sCode)
{
ScriptControl scriptControl = new ScriptControl();
scriptControl.UseSafeSubset = true;
scriptControl.Language = "JScript";
scriptControl.AddCode("function asciiConvertNative(s){var asciicode=s.split(\"\\\\u\");var nativeValue=asciicode[0];for(var i=1;i<asciicode.length;i++){var code=asciicode[i];nativeValue+=String.fromCharCode(parseInt(\"0x\"+code.substring(0,4)));if(code.length>4){nativeValue+=code.substring(4,code.length)}}return nativeValue};");
try
{
string str = scriptControl.Eval(string.Format("asciiConvertNative('{0}')", sCode)).ToString();
return str;
}
catch (Exception ex)
{
string str = ex.Message;
}
return null;
}
public static string BetweenArr(string str, string leftstr, string rightstr)
{
int i = str.IndexOf(leftstr) + leftstr.Length;
string temp = str.Substring(i, str.IndexOf(rightstr, i) - i);
return temp;
}
public static Bitmap GetImageFromBase64(string base64string)
{
byte[] b = Convert.FromBase64String(base64string);
MemoryStream ms = new MemoryStream(b);
Bitmap bitmap = new Bitmap(ms);
//ms.Close();
return bitmap;
}
#region
private static string Expression = "[微笑],[憨笑],[呲牙],[爱心],[啤酒],[太阳],[礼物],[抱拳],[咖啡],[调皮],[激动],[回头],[色],[愉快],[爱情],[飞吻],[跳跳],[发抖],[转圈],[献吻],[耶],[红包],[嘿哈]";
private static List<string> ExpressionList = null;
private static Random random = new Random();
public static string FindRandomExpression()
{
if (ExpressionList == null)
ExpressionList = Expression.Split(',').ToList();
return ExpressionList[random.Next(ExpressionList.Count)];
}
#endregion
#region
// BaseUserInfo定义
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct BaseUserInfo
{
//public int dwUin;
//public int dwDeviceVersion;
// [MarshalAs(UnmanagedType.ByValArray, SizeConst = 15)]
// public byte[] szCookies;
// [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
// public byte[] szSessionKey;
// [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 33)]
// public string szDeviceid;
// [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 38)]
// public string szCode;
public int dwUin;
public int dwDeviceVersion;
public int dwSyncKeyLength;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 15)]
public byte[] szCookies;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
public byte[] szSessionKey;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 512)]
public byte[] szSyncKey;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 33)]
public string szDeviceid;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 38)]
public string szCode;
}
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct UploadImgInfo
{
public int dwPayloadsLength;
public int dwTotalLen;
public int dwStartPos;
public int dwDataLen;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 65535 * 2)]
public byte[] szPayLoadsBuf;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 65535)]
public byte[] szImgBuf;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 50)]
public string ClientImgId;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 50)]
public string szFromUserName;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 50)]
public string szToUserName;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
public string szCmdUrl;
}
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct UploadVoiceInfo
{
public int dwPayloadsLength;
public int dwVoiceLength;
public int dwEndFlag;
public int dwVoiceFormat;
public int dwOffset;
public int dwVoiceBufLength;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 65535 * 2)]
public byte[] szPayLoadsBuf;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 65535)]
public byte[] szVoiceBuf;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 50)]
public string ClientMsgId;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 50)]
public string szFromUserName;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 50)]
public string szToUserName;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
public string szCmdUrl;
}
[DllImport("UICorePlus.dll", EntryPoint = "CUploadImg", CallingConvention = CallingConvention.Cdecl)]
public static extern int CUploadImg(ref BaseUserInfo userinfo, IntPtr imginfo);
[DllImport("UICorePlus.dll", EntryPoint = "CUploadVoice", CallingConvention = CallingConvention.Cdecl)]
public static extern int CUploadVoice(ref BaseUserInfo userinfo, IntPtr voiceinfo);
[DllImport("UICorePlus.dll", EntryPoint = "CPackSync", CallingConvention = CallingConvention.Cdecl)]
public static extern int CPackSync(ref BaseUserInfo userinfo, ref byte encodeData);
[DllImport("UICorePlus.dll", EntryPoint = "CUnPackSync", CallingConvention = CallingConvention.Cdecl)]
public static extern int CUnPackSync(ref BaseUserInfo baseUserInfo, byte[] playload, int playloadlength, ref byte decodeData);
[DllImport("UICorePlus.dll", EntryPoint = "CGetContact", CallingConvention = CallingConvention.Cdecl)]
public static extern int CGetContact(ref BaseUserInfo baseUserInfo, byte[] playload, int playloadlength, ref byte encodeData);
[DllImport("UICorePlus.dll", EntryPoint = "CUnPackGetcontact", CallingConvention = CallingConvention.Cdecl)]
public static extern int CUnPackGetcontact(ref BaseUserInfo baseUserInfo, byte[] playload, int playloadlength, ref byte decodeData);
[DllImport("UICorePlus.dll", EntryPoint = "CSendMsg", CallingConvention = CallingConvention.Cdecl)]
public static extern int CSendMsg(ref BaseUserInfo baseUserInfo, byte[] playload, int playloadlength, ref byte encodeData);
[DllImport("UICorePlus.dll", EntryPoint = "CSendAppMsg", CallingConvention = CallingConvention.Cdecl)]
public static extern int CSendAppMsg(ref BaseUserInfo baseUserInfo, byte[] playload, int playloadlength, ref byte encodeData);
public static byte[] CUploadImg(User u, UploadImgInfo imginfo)
{ //自行做好异常捕获
BaseUserInfo userinfo = new BaseUserInfo();
userinfo.szCookies = u.Cookies.ToByteArray();
userinfo.szSessionKey = u.SessionKey.ToByteArray();
string[] device = u.DeviceId.Split('@');
userinfo.szDeviceid = device[2];
userinfo.dwUin = (int)u.Uin;
userinfo.szCode = machine_code;
imginfo.szFromUserName = u.Userame;
int nSizeImginfo = Marshal.SizeOf(imginfo);
IntPtr intPtr = Marshal.AllocHGlobal(nSizeImginfo);
Marshal.StructureToPtr(imginfo, intPtr, true);
int ret = CUploadImg(ref userinfo, intPtr);
if (ret == -1)
{
//组包大于65535
return null;
}
imginfo = (UploadImgInfo)Marshal.PtrToStructure(intPtr, typeof(UploadImgInfo));
byte[] encodeBuf = new byte[imginfo.dwPayloadsLength];
Buffer.BlockCopy(imginfo.szPayLoadsBuf, 0, encodeBuf, 0, imginfo.dwPayloadsLength);
return encodeBuf;
}
public static byte[] CUploadVoice(User u, UploadVoiceInfo voiceinfo)
{
//自行做好异常捕获
BaseUserInfo userinfo = new BaseUserInfo();
userinfo.szCookies = u.Cookies.ToByteArray();
userinfo.szSessionKey = u.SessionKey.ToByteArray();
string[] device = u.DeviceId.Split('@');
userinfo.szDeviceid = device[2];
userinfo.dwUin = (int)u.Uin;
voiceinfo.szFromUserName = u.Userame;
userinfo.szCode = machine_code;
int nSizeImginfo = Marshal.SizeOf(voiceinfo);
IntPtr intPtr = Marshal.AllocHGlobal(nSizeImginfo);
Marshal.StructureToPtr(voiceinfo, intPtr, true);
int ret = CUploadVoice(ref userinfo, intPtr);
if (ret == -1)
{
//组包大于65535
return null;
}
voiceinfo = (UploadVoiceInfo)Marshal.PtrToStructure(intPtr, typeof(UploadVoiceInfo));
byte[] encodeBuf = new byte[voiceinfo.dwPayloadsLength];
Buffer.BlockCopy(voiceinfo.szPayLoadsBuf, 0, encodeBuf, 0, voiceinfo.dwPayloadsLength);
return encodeBuf;
}
public static byte[] CPackSync(User u)
{ //自行做好异常捕获
try
{
BaseUserInfo userinfo = new BaseUserInfo();
userinfo.szCookies = u.Cookies.ToByteArray();
userinfo.szSessionKey = u.SessionKey.ToByteArray();
string[] device = u.DeviceId.Split('@');
userinfo.szDeviceid = device[2];
userinfo.dwUin = (int)u.Uin;
byte[] synKeybuf = new byte[512];//不能更改此参数 若要更改必须同步c++ 缓冲器长度
int keylength = 0;
byte[] synKey = u.CurrentsyncKey.ToByteArray();
if (synKey.Length != 0)
{
keylength = synKey.Length;
Buffer.BlockCopy(synKey, 0, synKeybuf, 0, keylength);
}
userinfo.szSyncKey = synKeybuf;
userinfo.dwSyncKeyLength = keylength;
userinfo.szCode = machine_code;
byte[] s = new byte[65535];
int packLength = CPackSync(ref userinfo, ref s[0]);
if (packLength == -1)
return null;//组包失败
//ret
byte[] encodeBuf = new byte[packLength];
Buffer.BlockCopy(s, 0, encodeBuf, 0, packLength);
return encodeBuf;
}
catch (Exception ex)
{
throw new Exception($"CPackSync ERROR:{ex.Message}\r\nuser:{Util.HexToStr(u.ToByteArray())}");
}
}
public static byte[] CUnPackSync(User u, byte[] encodeData, ref byte[] syncKey)
{
//自行做好异常捕获 解包必须判断标准头191
try
{
BaseUserInfo userinfo = new BaseUserInfo();
userinfo.szCookies = u.Cookies.ToByteArray();
userinfo.szSessionKey = u.SessionKey.ToByteArray();
string[] device = u.DeviceId.Split('@');
userinfo.szDeviceid = device[2];
userinfo.dwUin = (int)u.Uin;
userinfo.szCode = machine_code;
byte[] s = new byte[65535 * 10];//可酌情扩容
int packLength = CUnPackSync(ref userinfo, encodeData, encodeData.Length, ref s[0]);
if (packLength == -1)
return null;//组包失败
if (userinfo.dwSyncKeyLength != 0)
{
byte[] _syncKey = new byte[userinfo.dwSyncKeyLength];
Buffer.BlockCopy(userinfo.szSyncKey, 0, _syncKey, 0, userinfo.dwSyncKeyLength);
syncKey = _syncKey;
}
//ret
byte[] decodeBuf = new byte[packLength];
Buffer.BlockCopy(s, 0, decodeBuf, 0, packLength);
return decodeBuf;
}
catch (Exception ex)
{
throw new Exception($"CUnPackSync ERROR:{ex.Message}\r\nuser:{Util.HexToStr(u.ToByteArray())}\r\ndata:{Util.HexToStr(encodeData)}");
}
}
public static byte[] CGetContact(User u, byte[] jsonData)
{
//自行做好异常捕获
BaseUserInfo userinfo = new BaseUserInfo();
userinfo.szCookies = u.Cookies.ToByteArray();
userinfo.szSessionKey = u.SessionKey.ToByteArray();
string[] device = u.DeviceId.Split('@');
userinfo.szDeviceid = device[2];
userinfo.dwUin = (int)u.Uin;
userinfo.szCode = machine_code;
byte[] s = new byte[65535];
int packLength = CGetContact(ref userinfo, jsonData, jsonData.Length, ref s[0]);
if (packLength == -1)
{
//组包大于65535
return null;
}
byte[] encodeData = new byte[packLength];
Buffer.BlockCopy(s, 0, encodeData, 0, packLength);
return encodeData;
}
public static byte[] CUnPackGetcontact(User u, byte[] encodeData)
{
//自行做好异常捕获 解包必须判断标准头191
BaseUserInfo userinfo = new BaseUserInfo();
userinfo.szCookies = u.Cookies.ToByteArray();
userinfo.szSessionKey = u.SessionKey.ToByteArray();
string[] device = u.DeviceId.Split('@');
userinfo.szDeviceid = device[2];
userinfo.dwUin = (int)u.Uin;
userinfo.szCode = machine_code;
byte[] s = new byte[65535 * 2];
int packLength = CUnPackGetcontact(ref userinfo, encodeData, encodeData.Length, ref s[0]);
if (packLength == -1)
{
//组包大于65535
return null;
}
byte[] decodeBuf = new byte[packLength];
Buffer.BlockCopy(s, 0, decodeBuf, 0, packLength);
return decodeBuf;
}
public static byte[] CSendMsg(User u, byte[] jsonData)
{
try
{
//自行做好异常捕获
BaseUserInfo userinfo = new BaseUserInfo();
userinfo.szCookies = u.Cookies.ToByteArray();
userinfo.szSessionKey = u.SessionKey.ToByteArray();
string[] device = u.DeviceId.Split('@');
userinfo.szDeviceid = device[2];
userinfo.dwUin = (int)u.Uin;
userinfo.szCode = machine_code;
byte[] s = new byte[65535];
int packLength = CSendMsg(ref userinfo, jsonData, jsonData.Length, ref s[0]);
if (packLength == -1)
{
//组包大于65535
return null;
}
byte[] encodeData = new byte[packLength];
Buffer.BlockCopy(s, 0, encodeData, 0, packLength);
return encodeData;
}
catch (Exception ex)
{
throw ex;
return null;
}
}
public static byte[] CSendAppMsg(User u, byte[] jsonData)
{
try
{
//自行做好异常捕获
BaseUserInfo userinfo = new BaseUserInfo();
userinfo.szCookies = u.Cookies.ToByteArray();
userinfo.szSessionKey = u.SessionKey.ToByteArray();
string[] device = u.DeviceId.Split('@');
userinfo.szDeviceid = device[2];
userinfo.dwUin = (int)u.Uin;
userinfo.szCode = machine_code;
byte[] s = new byte[65535];
int packLength = CSendAppMsg(ref userinfo, jsonData, jsonData.Length, ref s[0]);
if (packLength == -1)
{
//组包大于65535
return null;
}
byte[] encodeData = new byte[packLength];
Buffer.BlockCopy(s, 0, encodeData, 0, packLength);
return encodeData;
}
catch { }
return null;
}
[DllImport("WeChatToken.dll", EntryPoint = "TokenSecret")]
private extern static int TokenSecret(string inputData, StringBuilder outputData);
public static byte[] GetTokenSecret(byte[] inputData)
{
string Secret = Util.HexToStr(inputData);
StringBuilder build = new StringBuilder(512);
int ret = TokenSecret(Secret, build);
if (ret == 0)
{
return Util.StrToHex(build.ToString());
}
return new byte[] { 0 };
}
#endregion
}
}