912
parent
e28bd12501
commit
bbad2a004a
|
|
@ -86,6 +86,26 @@ local function __getCode(cmd, _data, callBack)
|
||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function __getCode_test(cmd, _data, callBack)
|
||||||
|
local _client = ControllerManager.WebClient
|
||||||
|
_client:send(Protocol.WEB_GET_CODE, { id = _data.id }, function(res)
|
||||||
|
if (res.ReturnCode == 0) then
|
||||||
|
_data["uuidCode"] = res.Data.code
|
||||||
|
__Login(cmd, _data, callBack)
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
|
||||||
|
--得到app信息
|
||||||
|
function GetAppInfo()
|
||||||
|
local _client = ControllerManager.WebClient
|
||||||
|
_client:send(Protocol.WEB_GET_APP_INFO,{}, function(res)
|
||||||
|
if (res.ReturnCode == 0) then
|
||||||
|
GameApplication.Instance:SetAppInfo(res.Data.appInfo)
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
|
||||||
--手机登录
|
--手机登录
|
||||||
function M:PhoneLogin(phone, code, callback)
|
function M:PhoneLogin(phone, code, callback)
|
||||||
local _data = {}
|
local _data = {}
|
||||||
|
|
|
||||||
|
|
@ -53,6 +53,8 @@ Protocol = {
|
||||||
WEB_UPDATE_NOTICE = "index/get_notice",
|
WEB_UPDATE_NOTICE = "index/get_notice",
|
||||||
--找回账号
|
--找回账号
|
||||||
WEB_BACK_PASSWORD = "acc/set_back_password",
|
WEB_BACK_PASSWORD = "acc/set_back_password",
|
||||||
|
--得到app信息
|
||||||
|
WEB_GET_APP_INFO = "acc/get_app_info",
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -19,6 +19,7 @@ end
|
||||||
--@param self
|
--@param self
|
||||||
function M:init()
|
function M:init()
|
||||||
UIPackage.AddPackage("base/login/ui/Login")
|
UIPackage.AddPackage("base/login/ui/Login")
|
||||||
|
-- GetAppInfo()
|
||||||
|
|
||||||
--UIPackage.AddPackage("UI/Card")
|
--UIPackage.AddPackage("UI/Card")
|
||||||
ViewUtil.PlaySoundBg()
|
ViewUtil.PlaySoundBg()
|
||||||
|
|
@ -41,40 +42,48 @@ function M:init()
|
||||||
local _btn_login = view:GetChild("btn_wx")
|
local _btn_login = view:GetChild("btn_wx")
|
||||||
|
|
||||||
_btn_login.onClick:Add(function()
|
_btn_login.onClick:Add(function()
|
||||||
|
__getCode_test(Protocol.WEB_GET_APP_INFO,{id=123456},function() end)
|
||||||
ViewUtil.ShowModalWait(true, "正在登录游戏...", 2)
|
ViewUtil.ShowModalWait(true, "正在登录游戏...", 2)
|
||||||
coroutine.start(function()
|
-- local _client = ControllerManager.WebClient
|
||||||
coroutine.wait(8)
|
-- _client:send(Protocol.WEB_GET_APP_INFO, {id=1}, function(res)
|
||||||
if self.isWXCallBackMark then
|
-- if (res.ReturnCode == 0) then
|
||||||
return
|
-- GameApplication.Instance:SetAppInfo(res.Data.appInfo)
|
||||||
end
|
-- GameApplication.Instance:SetAppInfo("KqIuT2bQt6fTD2aRLWM2Vcl3YmtOklMeGhADRWhfNjBBUQpzYZ/EdkRhyLZSh6sk8D4udeItmY37p3JLT99CQIobpJSKaLMVsGKxdhPhbiwcuRbShvW2OONETXi7kazNDayedFUZMDacj0e8f84uu8BVi203PyvYCZZ2wqSNPOIBgnC95ETtm3inoP9RvZpOPqbfYYDKESrr8dsPN+6KWXDxAXvAOmYr7/Q+gxN/WGNzayMB449BQTHmux4hgoLdvxJNvohpEjkMfPaRIio10TqnrhJeq4Flosbuhbn9YMEX4lWpdaoOeG1NK86uSnzUfJA4AM+5Xvq+p2XMVIBECZ1y52js653TQYGXgdz2sETpsgzXswsA/N7VNgVfPw1Zs3UXbD1v+7H39Aq9u3V9kav4Qh3tOlLO7sKSI7kVRnnp8krTYLB5SfkvnAQP7PctM74Lwyvx1vES6wCH97+TysWXF1YufdZag1j+F4vPjZVnFgnLaV00vXu65bpuK9NkIyx4TgVuQ/geIYE0jPfWluUn1JychQZu7Ih7dFKulWF8mY8dB+evuLqLNyK8pHHNXTGKMf7kMJCE/5m8pK8G3p1ubIDTapf0gkHSXgb+zM9cfx9cbfg0Tp3ZZTCaz5zsNomQKeNvKofWhVm4+7gcWBJ0ONQjhWLZBap1/fRJSXk=")
|
||||||
ViewUtil.CloseModalWait()
|
coroutine.start(function()
|
||||||
ViewUtil.ErrorTip(10000, "微信登录失败!")
|
coroutine.wait(8)
|
||||||
end)
|
if self.isWXCallBackMark then
|
||||||
if (not GameApplication.Instance.accountTest) then
|
return
|
||||||
GameApplication.Instance:WXLogin(handler(self, self.LoginCallBack))
|
end
|
||||||
else
|
ViewUtil.CloseModalWait()
|
||||||
--local ctr_user = view:GetController("user")
|
ViewUtil.ErrorTip(10000, "微信登录失败!")
|
||||||
|
end)
|
||||||
|
if (not GameApplication.Instance.accountTest) then
|
||||||
|
GameApplication.Instance:WXLogin(handler(self, self.LoginCallBack))
|
||||||
|
else
|
||||||
|
--local ctr_user = view:GetController("user")
|
||||||
|
|
||||||
local _tex_unionid = view:GetChild("tex_unionid")
|
local _tex_unionid = view:GetChild("tex_unionid")
|
||||||
|
|
||||||
local utez = _tex_unionid.text --.. (ctr_user.selectedIndex + 1)
|
local utez = _tex_unionid.text --.. (ctr_user.selectedIndex + 1)
|
||||||
|
|
||||||
local _data = {}
|
local _data = {}
|
||||||
_data["userId"] = utez
|
_data["userId"] = utez
|
||||||
local key = "userId"
|
local key = "userId"
|
||||||
local s, e = pcall(function()
|
local s, e = pcall(function()
|
||||||
Utils.SaveLocalFile(key, json.encode(_data))
|
Utils.SaveLocalFile(key, json.encode(_data))
|
||||||
end)
|
end)
|
||||||
if not s then
|
if not s then
|
||||||
print("Error:" .. e)
|
print("Error:" .. e)
|
||||||
end
|
end
|
||||||
|
|
||||||
DataManager.SelfUser.acc = utez
|
DataManager.SelfUser.acc = utez
|
||||||
DataManager.SelfUser.nick_name = utez
|
DataManager.SelfUser.nick_name = utez
|
||||||
DataManager.SelfUser.sex = 1
|
DataManager.SelfUser.sex = 1
|
||||||
DataManager.SelfUser.head_url = ""
|
DataManager.SelfUser.head_url = ""
|
||||||
self:LoginCallBack(0)
|
self:LoginCallBack(0)
|
||||||
end
|
end
|
||||||
|
-- end
|
||||||
|
-- end)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
local btn_phone = view:GetChild("btn_phone")
|
local btn_phone = view:GetChild("btn_phone")
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,7 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 10780e01b5496d84488e91ec3fbf10d4
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
Binary file not shown.
|
|
@ -1,5 +1,5 @@
|
||||||
fileFormatVersion: 2
|
fileFormatVersion: 2
|
||||||
guid: c30b7448361d11948bf212d4bae1edb7
|
guid: b7da94a71a78a0c48a9d26d9dd368eab
|
||||||
PluginImporter:
|
PluginImporter:
|
||||||
externalObjects: {}
|
externalObjects: {}
|
||||||
serializedVersion: 2
|
serializedVersion: 2
|
||||||
|
|
@ -271,6 +271,19 @@ public class GameApplication : MonoBehaviour
|
||||||
if (result != 10) _wxlogin_callback = null;
|
if (result != 10) _wxlogin_callback = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void SetAppInfo(string data)
|
||||||
|
{
|
||||||
|
|
||||||
|
Debug.Log($"appinfo:{RSAHelper.Decrypt(data)}");
|
||||||
|
Hashtable map = (Hashtable)MiniJSON.Json.Deserialize(RSAHelper.Decrypt(data));
|
||||||
|
Debug.Log($"appinfo2:{map["appid"]},{map["appSecret"]}");
|
||||||
|
WXData.SetAppInfo(map["appid"] as string,map["appSecret"] as string);
|
||||||
|
PlatformAndroid.Instance.SetAppInfo(map["appid"] as string);
|
||||||
|
#if UNITY_ANDROID
|
||||||
|
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
public void WXLogin(LuaFunction callback)
|
public void WXLogin(LuaFunction callback)
|
||||||
{
|
{
|
||||||
if (!buildApp) return;
|
if (!buildApp) return;
|
||||||
|
|
|
||||||
|
|
@ -22,9 +22,16 @@ public class PlatformAndroid :MonoBehaviour
|
||||||
//Debug.LogError("初始化安卓==========");
|
//Debug.LogError("初始化安卓==========");
|
||||||
_player = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
|
_player = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
|
||||||
_activity = _player.GetStatic<AndroidJavaObject>("currentActivity");
|
_activity = _player.GetStatic<AndroidJavaObject>("currentActivity");
|
||||||
|
|
||||||
// Debug.LogError("===============");
|
// Debug.LogError("===============");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
public void SetAppInfo(string id)
|
||||||
|
{
|
||||||
|
if (_activity == null) return;
|
||||||
|
_activity.Call("__setapk", id);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public void UpdateApp(string url)
|
public void UpdateApp(string url)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -3,12 +3,17 @@ using System.Collections;
|
||||||
|
|
||||||
public static class WXData
|
public static class WXData
|
||||||
{
|
{
|
||||||
|
private static string _appId = "wx12345678";
|
||||||
const string _appId = "wx40ac640ee6bd1116";
|
private static string _appSecret = "2sfas2435gt574gfdw357";
|
||||||
const string _appSecret = "cde030153f5b97874c5e6063c70c0f97";
|
|
||||||
static string _accessToken;
|
static string _accessToken;
|
||||||
static string _refreshToken;
|
static string _refreshToken;
|
||||||
static string _openid;
|
static string _openid;
|
||||||
|
|
||||||
|
public static void SetAppInfo(string id,string scret)
|
||||||
|
{
|
||||||
|
_appId = id;
|
||||||
|
_appSecret = scret;
|
||||||
|
}
|
||||||
//-------------------------------------------------------------
|
//-------------------------------------------------------------
|
||||||
public static string GetApplyTokenURL(string code)
|
public static string GetApplyTokenURL(string code)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ public static class RSAHelper
|
||||||
private static string publicKey =
|
private static string publicKey =
|
||||||
"MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAmZLmb4paD13E2uOueFStT1g8OnA4JQYkN4PZl/il7Nb05EbZrRbQz/5VbiZxc+S4asfFrrU0d++gjiluiAbBBhgtQSi+eNZuJ2wrBxjvN3W9d14XMmZKDg21Knu7tDUwOlEfCPVMZ/nJ+9YU6mnEvme29UgpI4RbEIIWPuDW3DavbaOvZ/cYP+0m2pxU3mETwDbVpbM3LimJ4JOBIs7XhV2UqEUfRVCYiuZUkydOCs1TgTJRJC5qgYpx4wUZ0ja7t9jP3klg/vjjyA1SDnC98bQLR5QzVJE1LvI2Rr3AHfZS0hckg0WAR87D1R8sGjmQ0TUi4qanpQYhEL4dBH8a6TX/xssobM7M+XgFsGiT4fWG18JhJM98rhVEk2AUaXgnFNf3OyLP+NuYrqjYamuug00s2azCl/rQCkvnLWO4W+lPn27ZinnBRg1+r2fNws7dPPa/8tWScRcTtfaidYsQP2lnYJvFgc299HdQL7iFgL336NihUxll09Hhm7vf8+N0ZP5TLE8SRoSfHNgHup6k9YG5e+V9bW4VckQFgPPBlHSS0mDEOvD9d54+F1cBg/sG8XMduW5WhfroYsMbRzB9a4rIfctn6yqpM+ot2EW8CKgiOVM5lJQhBwX5rMKnMTaApt6EIigY6jRVFNCOtQPDZ9prLBsp3asQxf7Vg9kfrVUCAwEAAQ==";
|
"MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAmZLmb4paD13E2uOueFStT1g8OnA4JQYkN4PZl/il7Nb05EbZrRbQz/5VbiZxc+S4asfFrrU0d++gjiluiAbBBhgtQSi+eNZuJ2wrBxjvN3W9d14XMmZKDg21Knu7tDUwOlEfCPVMZ/nJ+9YU6mnEvme29UgpI4RbEIIWPuDW3DavbaOvZ/cYP+0m2pxU3mETwDbVpbM3LimJ4JOBIs7XhV2UqEUfRVCYiuZUkydOCs1TgTJRJC5qgYpx4wUZ0ja7t9jP3klg/vjjyA1SDnC98bQLR5QzVJE1LvI2Rr3AHfZS0hckg0WAR87D1R8sGjmQ0TUi4qanpQYhEL4dBH8a6TX/xssobM7M+XgFsGiT4fWG18JhJM98rhVEk2AUaXgnFNf3OyLP+NuYrqjYamuug00s2azCl/rQCkvnLWO4W+lPn27ZinnBRg1+r2fNws7dPPa/8tWScRcTtfaidYsQP2lnYJvFgc299HdQL7iFgL336NihUxll09Hhm7vf8+N0ZP5TLE8SRoSfHNgHup6k9YG5e+V9bW4VckQFgPPBlHSS0mDEOvD9d54+F1cBg/sG8XMduW5WhfroYsMbRzB9a4rIfctn6yqpM+ot2EW8CKgiOVM5lJQhBwX5rMKnMTaApt6EIigY6jRVFNCOtQPDZ9prLBsp3asQxf7Vg9kfrVUCAwEAAQ==";
|
||||||
private static string privateKey =
|
private static string privateKey =
|
||||||
"MIIJQgIBADANBgkqhkiG9w0BAQEFAASCCSwwggkoAgEAAoICAQCZkuZviloPXcTa4654VK1PWDw6cDglBiQ3g9mX+KXs1vTkRtmtFtDP/lVuJnFz5Lhqx8WutTR376COKW6IBsEGGC1BKL541m4nbCsHGO83db13XhcyZkoODbUqe7u0NTA6UR8I9Uxn+cn71hTqacS+Z7b1SCkjhFsQghY+4NbcNq9to69n9xg/7SbanFTeYRPANtWlszcuKYngk4EizteFXZSoRR9FUJiK5lSTJ04KzVOBMlEkLmqBinHjBRnSNru32M/eSWD++OPIDVIOcL3xtAtHlDNUkTUu8jZGvcAd9lLSFySDRYBHzsPVHywaOZDRNSLipqelBiEQvh0EfxrpNf/Gyyhszsz5eAWwaJPh9YbXwmEkz3yuFUSTYBRpeCcU1/c7Is/425iuqNhqa66DTSzZrMKX+tAKS+ctY7hb6U+fbtmKecFGDX6vZ83Czt089r/y1ZJxFxO19qJ1ixA/aWdgm8WBzb30d1AvuIWAvffo2KFTGWXT0eGbu9/z43Rk/lMsTxJGhJ8c2Ae6nqT1gbl75X1tbhVyRAWA88GUdJLSYMQ68P13nj4XVwGD+wbxcx25blaF+uhiwxtHMH1rish9y2frKqkz6i3YRbwIqCI5UzmUlCEHBfmswqcxNoCm3oQiKBjqNFUU0I61A8Nn2mssGyndqxDF/tWD2R+tVQIDAQABAoICAA0KYVDlYaJeZwHjRYRoRFMxfePEdbAHJnokUwzJi2ViF2du8Lr27gJLaXux/f5GVLaUgh/EuVDZ4ztPH1ijoi5fTTB0QkBGjRIB6GFw55dBAzaoobWg4/bviQuzeAvkXFUHYGhFVBicKF+fHSWOl6tHaUzItN2UNptfQH5UX0pRxnG77YAZhlCfVaZIkhhUC/ZNcbThU/Uyh8evHs8S21Ay0xW60N306w8YYeQg+UqHhui4mhVFb7vSQrtxSnEEPspsubH5bygXgFgTcX1Sa36juDV6yyUKM4bqAFvfbvncWcoHNw2CkFMIpq5pODh93OM27OBsIF4t+A7Q5evk0ycJzydb0b/TKosxvv55ft1LKSUa/d0Kz88rCBHlHmome1sIXXYVOCoaynOEGh+fxCfAnIZ3Jskr/EUFvfCduM4bIzY/vWI/aRKm0XlatTiM7IfefrYr3mrXPRzRg2BV9l7mftrRUP8y3+QgacmskG1TpfHBigAwXKUjYMm2FQAHldes+oMwRJZQqDzWy9u5FQPfIP0yPdp5ICPTcTePFV2GEk6aLWbNNflfU3W8JheR52rj9A52yAmaLq1ovcFL4Y5sCG4AzOivB4Dp7O2NQklFG9RrWR0Pf2SUh+Fax5j5WLWTyi8fQykfknhdr/0K7OKDN9FlLhtGQSx9Nfv4Fdn9AoIBAQD75tsHcBWh9A9/VKRB9eJkKtIQigkVQMhtV+QMRn+UuWTdSXVVwBOHKJjDponKp+BaKBNZPaNV/QItCjpTXIPZ44zCy0bxQVmcN17pTNX95o+GfDrVD42z/xO9ljmZLPCs4GDfpAndt4VzOil4jEyLqsZRbLtaLuVyL6v0BJAA538cL2scQ6eI9OlHFPRjxTxCIXnX8LDaFWl4/jOrSSGr+nrZ+eZlQlvYIz0T0s2lzTTiFk7qTJ1u3XknU4xn90nfhQYNyd1nyp4zK38zEOcQomxZthuid3OHu8vFgCfIuoAvz1MiLsZe42nd3CVUxWviW87HMrWTxy6ZmmxdNB8/AoIBAQCcEoTcGJe4Nz8+1e5F7cZusy7zt12SLFlzJkhSFom/2Iai7j8fWRHck9xeGqi97NoGMEnzxy7wSwEJJudlHuZHBhG1Uagx0UxE7VO0tpjm/qUz+bebdtlf3NS0O00Kvg1rh4ldSJejhR9fcxUAEoKIuekYfYSjtpApO3pYFf3HsPON2xBsdSqt5XmUUgUpxfb56E/sYVL1fujXTxxSx0R8VPbavlMjOaHygRydcinvhCGF/bDEmicB4ujmNBuuCJ/qtPPXy+Uwwlejgv419ZVzwFEhMEhKvz1KDfNEaVY1WCoQSX2UUrr2QxIfcOITpbuPzgOIVqKrTPYYbpr//+JrAoIBAQC5nDdT2bD27sDkj9egiq9QI4U5jpx2vo9wkkyFBwVG7vx1WYVNtAQvmShHMdViMCTOCa2IGjTaTV1nFpw3hHna+SJk/ie96OtAgkQ7H9SmC1dCPxOSnq1JLfC7x4+VYFnO6F45K8PhTTLV3stj+e0FFMaghL/gCaIjayEG4r3BDNLKT95aqzctYVjqeXRCd7iY+dWv2bhWWWSoNJaZ5X8cG6qeJtcvUaAfOIfurWu+eeA3nzxyxBVU9XgqFBPnH32dZ4U4b7/mlJPRHIHTfObliOjRia//HIlSQHw7gNzPuSxvDhMxosmkbWk6gtY3CmkeF4vbl2/X/fJGWFT0sE09AoIBADL79bz0p7N9EMMVHbZoW3dUP5VMJFwY8sukCOIQDMXIFQtqquIxtZ0KDGYNbWxF0F9PLQle2x2SUu9LbzHgazduayCBYWGMzs6BfOO+9qoXK56UB//YTmB7glyyNpO4zCeBakU37plzZnFG5ehVI6FIojXm4wqcG/HsRSY7YOD4FEgV9QKJL/0IxrPGK3ue+PRgiKNek7wwzh1v8X+1KtE27EE/BWevbxEKTm+8mKhu0Ii1/CXteaqrFowFH7m1hZAltrabG+7WvcxjgWndJQpgG+CspiEM4hesAPkrNAdPGsahS03FzN+fv27X8HKcpG3wzcSfEJrHFGmc0DOqwqsCggEAJ+ICyEbmQ94Ibtha4QJSeFCgVO29eM0/O8e8beGv3+zrxrt5kQLFrrvJIke2iAnRbmBkX0BDyTMQ5LdexGp1R1272Q9HAysjsWitw4GHV4CZK6dezm7slDTx/8z6bD1B2oeFboyuevB04sFZVUY3qzbuIEQYpvU9nwThxP/sVq+1v2ilXPD2iSXdVScGkNUVmpF4asiteYvS6feohV/HMMm71D/CeENcHfgSiqZyW1hHsDxgSwYOQcCpEdrXTF7ly/SpKDjYfmljCPvFwpECO8pNG90/e/CY+6H7jpAS00AFRzK+/bs6JW5gQE1zC/O05DB77oREVfk9NI6eElY4ZA==";
|
"MIIJQgIBADANBgkqhkiG9w0BAQEFAASCCSwwggkoAgEAAoICAQCmo5YyL2pZnV7RN/Oy4/5yy1Lons75xFJf6b90XuAenhjGnSIQ4cIWyRvteQJPKpcJrNVWTOvDm7WH+hcsJME21GXNHYG0Wlf4B3WLw+g5u6vnKq3pivcD8mZRXoFDNDD2kf72ks9S107ecCsXhuPzRKoLYWpNIaP0nHaqgzUTbMNLICE/IQ9zbvC1qRtkrOnam15P8Z3vK15eTi8R/8w1LSJY7G0L+UBjA1lTOUTp0P/uJdvkvoacWiuYOetkTk/vQ8qNT2JGPcNnQJm+H0muJN+5vzKsWQeqzUE5L2z5FPSr6eCHb6asApw8hSfczIFSNXRlNHbK5Flkf84AYJ7K7ZFgNUupaWrgJRk15bhqBs6HzhHX+6kEuXie70lP3jDcBqFjIbl6YLprthw19uGocWjt4Vp/RaSknU28vGwsc23dGkhQ9nO7Pv3mfPGABH6YY1K/7eM+vb31zEmf9qyz8KhZMdevBJUsRwse2jvQOPdNEMIJrzyEyvPaPz1FGghHozjMIbux8qDc8DeK16olX4eUGH6DPl+ZDxAJofeLXkxIy1axbgSFw+zSwhqG4HW9cjcDe6b/Ux3y+6+SgeskxPna4yXP5hAbD1voyw9wFr0EQpX9YIFiEBhhq4BqIuTWutRg2tL0f+7tuJhKDs3QPPGcNzgvSFtJzyfQprFyrwIDAQABAoICAEhJwsg2hX4mpJFCInfCLAmEZoz/B26WWd29uw4ycisWDk1qsPJ93QKhb3oO+o95PFg4H7v2VnhevdslBJRjxWWRsi/O0wt3/Z1dLwLYk48n+KSpgRRE8m9F4lj+FDkhFPSB1QcGHOYk/NPF+QuVuqE3ckTJl6GqLEPa9Cd4D7hDgFzArWuDXf6Ha+iCWZ3M3Q22RK2NdSPhvmhOpmC6hM20rKfCuHNvRx0swL03pMuBnOSki8WpWR/OhgbdaV30Ev0KfX3bqBgshu3tukQdsorW+C7N4J+fZ5ISxG6YQj+zdYh2Rq66IqWP5FLkuKwyEw+knL+iiL3vXVAZmTXUtE1Emrx1jsyJi5ORns2b4/7PNqHMFJZSj5/wTSvDjxH6P2yqc8ZvY034ZCx4+pz7XXlufmnE/9WPKbQirVvGsJoI+yDmFfditaDnMw8CwLAk0guUnPUQOI2jcD94jOmH7Y4VbZsv0BjtFNS30ly7/1XpB43UDNU/SOKL7od0iLkUWQpt4ORpR41lI81odY8bX8rRgcRfIvuCEXT3MxNS0YoDrZabXqPDVpcG8LIIlviQGVhiTmOsPsB8FrbVLKQxPJREGRSRrsF6nvcNKclo0qpZzpZHkt7Wy9SKYrdy6ooKY96pLIG709Lt0PM3jEgDJd4aeIdYEqQTTTHqu4RGbJFBAoIBAQDPAGOfnlISacfnIs82ObeNtoZIuj8ui80Ye8liR7OjzOi21FF3FZ9RWPQcPvvCit7KI5XBMoe0o8FAi7xFKKr/3JM9nPHpoNIVF8ei8LS2irASPIuC77qyJ8Jk146v5QCFRqK/PZGndNjT+g0eM0PT185M+vTE3/VlhEisU5hdVNqKEQ3HcbPJE/nuQZX4vpkTze5CRMiUAokL/O19rcjpml0DR4RD5rbpO11jIyGiDd/v/kxAruSR5kkdB15p65g8dreWHzOP6iq/peDPnqs54qscg8mhrOF0X7OSXpRcZYuzo+plBLnSLd7XTLKHM0Gt0aLHUg6OyX7G8zzTq27RAoIBAQDOFVzAOK1Ulwv8K/ed6+qUIWpmU7QJ6dnIq3fg8Hzcv44C6oGHZgSgv88v6BZUlttpJAZjK/XGR/n/FCxoYn4tcoxJazo7uoMLWxHsNosbOCP5oSXyIZ7Xyx8ZwCwjeO3CnuuUcpiSXQ37eenb6LDqDaiMroYHpKuXWPRmA6716jP3CLYRIt7yO8TEmEt8gpIsT9z5Acl1pF6UeujxVR2pRGxABmVRNguIBAWKZTkOxbl+V7WtBGqLs5OA3sJG7FHV2XMg6NTDyKwcDaP4z3yNPnpyOK8X00QGCTyJKsuFEiFT1/5fR7ZL9y8vGWwh/0nsVaSuPyno+eSbDprnBil/AoIBAQCB44mfp/VxzmR8WXBSY0cVKjn6urtYlqqcOVh1Te6f0r0XtARmR/APWFTcwHyzZvZDOq8GapGSvMpPmR8K+mjKYfsWRzvY0GvihmhjisyqWj3/Q3R7NbgdgCtPoZ7MKlL4TgljHNwfiodgA+BlWd+utxShYzthqfJOwAHl+BJ8RflXdzoBMwyQGPPUF91mFxrwvWBKvuRpU2nxVsUi/oA6bPz+SMrq3INbuD9yLKI3EKO68QOh9tw/3JN2HqCUsBt3nTq3fV6aaGJonUqCnNpuWRfrrZpA070oi8CfEK/hhmpxz2IN/zgmdVgGGv9PLM+CpS+SCKBP4omlhw1c+I5xAoIBACAhgIaPz6aCrmGw0TiUEczqsNYncsig5028PkKZ/D3Gt/OIcI2VwF73yOvlOaYSpz7rWPuZXQZ/LmEw2gOkZ5vaYjkIONobKFda6Z50mpex1xoSoAHyb/uhNcYkCj21mwxfDsfkXhlj3Mw6o9WfoAW9/2t/wnHqoL5GJkTJijvZOiTn/MsLLsuBuhoUzKArE3NJOGCygKCQ8hYgW7VU2f0MJ/yLgrx4uq+IQPzk71J4TYV/U1oYeCwz4WmUUaIRMmkvMB4PbyzfWsY88jXW08qJ1Tl90P7b950hT4jrXTPwMbYK1SQx4CBT981WH1/ll7b7W2O3gWdLnvL2AfzHHy0CggEAG14NYg4VimASm+TOSfwykQEUT5AtPjzBLXUc5rrhhoz44s/u0v3U+8i+pacVlT2EEnMZfGZqqUykMvR1eh+Jl75H4+8cNV6zRztgOPVCWWW5Mc5rnYYgRVnBqmlRygiWc4MSqVxstvAL/EKbgaXtSJFxFdBsLEgOeJDlwaA+it4l6F73IKXONeBQ6oMlv3wt3ay9cLbHZlTajVAFXTAKG3GV34wDqH55+gZZ/RF6rnFfrcs1ICC2LZdwEactQOot2HxzhSFVTFfnPtOnpy84IcjWivjew2KirgOSU6n/vR4F7kGQexf4H9Wdg4xADO861u0AAf/NBLIo09bxmuJp0A==";
|
||||||
|
|
||||||
// 公钥加密
|
// 公钥加密
|
||||||
public static string Encrypt(string plainText)
|
public static string Encrypt(string plainText)
|
||||||
|
|
@ -28,36 +28,37 @@ public static class RSAHelper
|
||||||
/// <returns>RSACryptoServiceProvider 实例</returns>
|
/// <returns>RSACryptoServiceProvider 实例</returns>
|
||||||
private static RSACryptoServiceProvider CreateFromBase64PublicKey(string base64PublicKey)
|
private static RSACryptoServiceProvider CreateFromBase64PublicKey(string base64PublicKey)
|
||||||
{
|
{
|
||||||
|
|
||||||
byte[] keyBytes = Convert.FromBase64String(base64PublicKey);
|
byte[] keyBytes = Convert.FromBase64String(base64PublicKey);
|
||||||
|
|
||||||
// 解析 DER 格式的公钥,获取 Modulus 和 Exponent
|
// 解析 DER 格式的公钥,获取 Modulus 和 Exponent
|
||||||
int offset = 0;
|
int offset = 0;
|
||||||
if (keyBytes[offset++] != 0x30) throw new Exception("Invalid public key format");
|
if (keyBytes[offset++] != 0x30) throw new Exception("Invalid public key format");
|
||||||
|
|
||||||
ReadLength(keyBytes, ref offset); // 跳过序列长度
|
ReadLengthPublic(keyBytes, ref offset); // 跳过序列长度
|
||||||
|
|
||||||
// 跳过算法标识部分
|
// 跳过算法标识部分
|
||||||
if (keyBytes[offset++] != 0x30) throw new Exception("Invalid public key format");
|
if (keyBytes[offset++] != 0x30) throw new Exception("Invalid public key format");
|
||||||
ReadLength(keyBytes, ref offset);
|
ReadLengthPublic(keyBytes, ref offset);
|
||||||
offset += 13; // rsaEncryption OID + NULL
|
offset += 13; // rsaEncryption OID + NULL
|
||||||
|
|
||||||
if (keyBytes[offset++] != 0x03) throw new Exception("Invalid public key format");
|
if (keyBytes[offset++] != 0x03) throw new Exception("Invalid public key format");
|
||||||
int bitStringLength = ReadLength(keyBytes, ref offset);
|
int bitStringLength = ReadLengthPublic(keyBytes, ref offset);
|
||||||
offset++; // unused bits
|
offset++; // unused bits
|
||||||
|
|
||||||
if (keyBytes[offset++] != 0x30) throw new Exception("Invalid public key format");
|
if (keyBytes[offset++] != 0x30) throw new Exception("Invalid public key format");
|
||||||
ReadLength(keyBytes, ref offset);
|
ReadLengthPublic(keyBytes, ref offset);
|
||||||
|
|
||||||
// 读取 Modulus
|
// 读取 Modulus
|
||||||
if (keyBytes[offset++] != 0x02) throw new Exception("Invalid public key format");
|
if (keyBytes[offset++] != 0x02) throw new Exception("Invalid public key format");
|
||||||
int modulusLength = ReadLength(keyBytes, ref offset);
|
int modulusLength = ReadLengthPublic(keyBytes, ref offset);
|
||||||
byte[] modulus = new byte[modulusLength];
|
byte[] modulus = new byte[modulusLength];
|
||||||
Array.Copy(keyBytes, offset, modulus, 0, modulusLength);
|
Array.Copy(keyBytes, offset, modulus, 0, modulusLength);
|
||||||
offset += modulusLength;
|
offset += modulusLength;
|
||||||
|
|
||||||
// 读取 Exponent
|
// 读取 Exponent
|
||||||
if (keyBytes[offset++] != 0x02) throw new Exception("Invalid public key format");
|
if (keyBytes[offset++] != 0x02) throw new Exception("Invalid public key format");
|
||||||
int exponentLength = ReadLength(keyBytes, ref offset);
|
int exponentLength = ReadLengthPublic(keyBytes, ref offset);
|
||||||
byte[] exponent = new byte[exponentLength];
|
byte[] exponent = new byte[exponentLength];
|
||||||
Array.Copy(keyBytes, offset, exponent, 0, exponentLength);
|
Array.Copy(keyBytes, offset, exponent, 0, exponentLength);
|
||||||
|
|
||||||
|
|
@ -69,7 +70,7 @@ public static class RSAHelper
|
||||||
return rsa;
|
return rsa;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static int ReadLength(byte[] data, ref int offset)
|
private static int ReadLengthPublic(byte[] data, ref int offset)
|
||||||
{
|
{
|
||||||
int length = data[offset++];
|
int length = data[offset++];
|
||||||
if ((length & 0x80) == 0x80)
|
if ((length & 0x80) == 0x80)
|
||||||
|
|
@ -84,10 +85,147 @@ public static class RSAHelper
|
||||||
return length;
|
return length;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 从 Base64 私钥(PKCS#1 或 PKCS#8)得到 RSACryptoServiceProvider(适用于 Unity2019.4)
|
||||||
|
/// </summary>
|
||||||
|
public static RSACryptoServiceProvider LoadPrivateKeyFromBase64(string base64)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(base64)) throw new ArgumentNullException(nameof(base64));
|
||||||
|
byte[] data = Convert.FromBase64String(base64);
|
||||||
|
|
||||||
|
// 先尝试解析为 PKCS#8(PrivateKeyInfo -> OCTET STRING 包 PKCS#1)
|
||||||
|
try
|
||||||
|
{
|
||||||
|
byte[] pkcs1 = TryExtractPkcs1FromPkcs8(data);
|
||||||
|
return LoadPkcs1(pkcs1);
|
||||||
|
}
|
||||||
|
catch (Exception)
|
||||||
|
{
|
||||||
|
// 如果不是 PKCS#8,再尝试直接解析 PKCS#1
|
||||||
|
return LoadPkcs1(data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static byte[] TryExtractPkcs1FromPkcs8(byte[] data)
|
||||||
|
{
|
||||||
|
int offset = 0;
|
||||||
|
// Expect: SEQUENCE
|
||||||
|
if (data[offset++] != 0x30) throw new Exception("Not a valid ASN.1 SEQUENCE (PKCS#8)");
|
||||||
|
ReadLength(data, ref offset); // skip top-level length
|
||||||
|
|
||||||
|
// Optional version INTEGER (usually present)
|
||||||
|
if (data[offset] == 0x02)
|
||||||
|
{
|
||||||
|
offset++; // tag
|
||||||
|
int verLen = ReadLength(data, ref offset);
|
||||||
|
offset += verLen;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Next should be algorithmIdentifier (SEQUENCE) — skip it properly
|
||||||
|
if (data[offset] != 0x30) throw new Exception("Invalid PKCS#8, missing alg sequence");
|
||||||
|
offset++; // tag
|
||||||
|
int algLen = ReadLength(data, ref offset);
|
||||||
|
offset += algLen;
|
||||||
|
|
||||||
|
// Next should be OCTET STRING (privateKey)
|
||||||
|
if (data[offset++] != 0x04) throw new Exception("Invalid PKCS#8, missing privateKey OCTET STRING");
|
||||||
|
int pkcs1Len = ReadLength(data, ref offset);
|
||||||
|
if (offset + pkcs1Len > data.Length) throw new Exception("Invalid lengths in PKCS#8");
|
||||||
|
byte[] inner = new byte[pkcs1Len];
|
||||||
|
Buffer.BlockCopy(data, offset, inner, 0, pkcs1Len);
|
||||||
|
return inner;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static RSACryptoServiceProvider LoadPkcs1(byte[] data)
|
||||||
|
{
|
||||||
|
int offset = 0;
|
||||||
|
if (data[offset++] != 0x30) throw new Exception("Invalid PKCS#1: no SEQUENCE");
|
||||||
|
ReadLength(data, ref offset);
|
||||||
|
|
||||||
|
// version INTEGER (skip)
|
||||||
|
if (data[offset] == 0x02)
|
||||||
|
{
|
||||||
|
offset++; // tag
|
||||||
|
int vlen = ReadLength(data, ref offset);
|
||||||
|
offset += vlen;
|
||||||
|
}
|
||||||
|
|
||||||
|
RSAParameters p = new RSAParameters();
|
||||||
|
p.Modulus = ReadInteger(data, ref offset, "Modulus");
|
||||||
|
p.Exponent = ReadInteger(data, ref offset, "Public Exponent");
|
||||||
|
p.D = ReadInteger(data, ref offset, "Private Exponent");
|
||||||
|
p.P = ReadInteger(data, ref offset, "P");
|
||||||
|
p.Q = ReadInteger(data, ref offset, "Q");
|
||||||
|
p.DP = ReadInteger(data, ref offset, "DP");
|
||||||
|
p.DQ = ReadInteger(data, ref offset, "DQ");
|
||||||
|
p.InverseQ = ReadInteger(data, ref offset, "InverseQ");
|
||||||
|
|
||||||
|
var rsa = new RSACryptoServiceProvider();
|
||||||
|
rsa.ImportParameters(p);
|
||||||
|
return rsa;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static byte[] ReadInteger(byte[] data, ref int offset, string nameForError = null)
|
||||||
|
{
|
||||||
|
if (data[offset] != 0x02)
|
||||||
|
{
|
||||||
|
// 报错时输出附近几个字节,便于调试
|
||||||
|
string hexSnippet = GetHexSnippet(data, offset, 12);
|
||||||
|
throw new Exception($"Expected INTEGER at offset {offset} ({nameForError ?? ""}), but found 0x{data[offset]:X2}. Nearby: {hexSnippet}");
|
||||||
|
}
|
||||||
|
offset++; // skip INTEGER tag
|
||||||
|
int len = ReadLength(data, ref offset);
|
||||||
|
|
||||||
|
// 如果有前导 0x00, 去掉(去除符号位)
|
||||||
|
if (len > 0 && data[offset] == 0x00)
|
||||||
|
{
|
||||||
|
offset++;
|
||||||
|
len--;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (len < 0 || offset + len > data.Length) throw new Exception("Invalid integer length");
|
||||||
|
byte[] value = new byte[len];
|
||||||
|
Buffer.BlockCopy(data, offset, value, 0, len);
|
||||||
|
offset += len;
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static int ReadLength(byte[] data, ref int offset)
|
||||||
|
{
|
||||||
|
if (offset >= data.Length) throw new Exception("Invalid offset while reading length");
|
||||||
|
int length = data[offset++];
|
||||||
|
|
||||||
|
if ((length & 0x80) == 0) // short form
|
||||||
|
{
|
||||||
|
return length;
|
||||||
|
}
|
||||||
|
int bytesCount = length & 0x7F;
|
||||||
|
if (bytesCount <= 0 || bytesCount > 4) throw new Exception("Invalid length bytes");
|
||||||
|
if (offset + bytesCount > data.Length) throw new Exception("Invalid length (overflow)");
|
||||||
|
int val = 0;
|
||||||
|
for (int i = 0; i < bytesCount; i++)
|
||||||
|
{
|
||||||
|
val = (val << 8) | data[offset++];
|
||||||
|
}
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static string GetHexSnippet(byte[] data, int offset, int maxLen)
|
||||||
|
{
|
||||||
|
int start = Math.Max(0, offset - 6);
|
||||||
|
int end = Math.Min(data.Length, offset + maxLen);
|
||||||
|
System.Text.StringBuilder sb = new System.Text.StringBuilder();
|
||||||
|
for (int i = start; i < end; i++)
|
||||||
|
{
|
||||||
|
sb.AppendFormat("{0:X2} ", data[i]);
|
||||||
|
}
|
||||||
|
return sb.ToString().Trim();
|
||||||
|
}
|
||||||
|
|
||||||
// 私钥解密
|
// 私钥解密
|
||||||
public static string Decrypt(string cipherText)
|
public static string Decrypt(string cipherText)
|
||||||
{
|
{
|
||||||
using (RSACryptoServiceProvider rsa = RSAHelper.CreateFromBase64PublicKey(privateKey))
|
using (RSACryptoServiceProvider rsa = RSAHelper.LoadPrivateKeyFromBase64(privateKey))
|
||||||
{
|
{
|
||||||
byte[] data = Convert.FromBase64String(cipherText);
|
byte[] data = Convert.FromBase64String(cipherText);
|
||||||
byte[] dec = rsa.Decrypt(data, false);
|
byte[] dec = rsa.Decrypt(data, false);
|
||||||
|
|
|
||||||
|
|
@ -91,6 +91,7 @@ public class VerCheck : MonoBehaviour
|
||||||
|
|
||||||
//公用
|
//公用
|
||||||
string init_url = "http://127.0.0.1:9898/NewFK/config/init2_1.json";
|
string init_url = "http://127.0.0.1:9898/NewFK/config/init2_1.json";
|
||||||
|
//string init_url = "http://8.138.120.167:9898/NewFK/config/init2_1.json";
|
||||||
|
|
||||||
if (isGFF==false&&isDXYGFF==false)
|
if (isGFF==false&&isDXYGFF==false)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,7 @@ public class GameApplicationWrap
|
||||||
L.RegFunction("InitBugly", InitBugly);
|
L.RegFunction("InitBugly", InitBugly);
|
||||||
L.RegFunction("SetBuglyUserID", SetBuglyUserID);
|
L.RegFunction("SetBuglyUserID", SetBuglyUserID);
|
||||||
L.RegFunction("AddBuglyUserValue", AddBuglyUserValue);
|
L.RegFunction("AddBuglyUserValue", AddBuglyUserValue);
|
||||||
|
L.RegFunction("SetAppInfo", SetAppInfo);
|
||||||
L.RegFunction("WXLogin", WXLogin);
|
L.RegFunction("WXLogin", WXLogin);
|
||||||
L.RegFunction("GetRoomID", GetRoomID);
|
L.RegFunction("GetRoomID", GetRoomID);
|
||||||
L.RegFunction("PlayMuisc", PlayMuisc);
|
L.RegFunction("PlayMuisc", PlayMuisc);
|
||||||
|
|
@ -177,6 +178,23 @@ public class GameApplicationWrap
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))]
|
||||||
|
static int SetAppInfo(IntPtr L)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
ToLua.CheckArgsCount(L, 2);
|
||||||
|
GameApplication obj = (GameApplication)ToLua.CheckObject<GameApplication>(L, 1);
|
||||||
|
string arg0 = ToLua.CheckString(L, 2);
|
||||||
|
obj.SetAppInfo(arg0);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
return LuaDLL.toluaL_exception(L, e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
[MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))]
|
[MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))]
|
||||||
static int WXLogin(IntPtr L)
|
static int WXLogin(IntPtr L)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading…
Reference in New Issue