这里仅记录个人接入的方式,仅作为个人笔记!
using System;
using System.Collections;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Text;
using UnityEngine;
using UnityEngine.Networking;
public class AccessWebAPI : MonoBehaviour
{
private void Start()
{
GetTicketFromServer();
}
#region 获取ticket的值
[DllImport("__Internal")]
private static extern string StringReturnValueFunction();
public static string UrlMsg = string.Empty;
public static string ticket;
/// <summary>
/// token的值
/// </summary>
static string token;
public void GetTicketFromServer()
{
//从URL解析出Ticket
UrlMsg = StringReturnValueFunction();
string[] s = UrlMsg.Split('&');
for (int i = 0; i < s.Length; i++)
{
//Debug.Log(s[i]);
if (s[i].Contains("ticket"))
ticket = s[i].Substring(7);
}
Debug.Log("ticket = " + ticket);
//ticket = "ThFk5m8smvCJYrpOdwL%2FW17%2B9QJTdJ3WDwVysYz%2BcTi5iLhQlJEMicVLg3Q1NvC5sYiPlOvXe2StVdahKAnF6dPw72BRPlyIIwio0BB%2FPYiRgJs8OWk%2B%2Fr3QPB2i9qPS";
//GetTokenFormServerByTicket(transform.name, "SetToken", ticket);
StartCoroutine(GetTokenFromServerByTicket(ticket, GetTokenFromServerSuccess));
//Debug.Log("token = " + data);
//GetTokenByTicket(GetTokenFormServerByTicket(ticket));
}
#endregion
#region 获取token
//[DllImport("__Internal")]
//private static extern string GetTokenFormServerByTicket(string objName, string methodName, string ticket);
public void GetTokenFromServerSuccess(string value)
{
Debug.Log("resInfo = " + value);
LoginSuccessJSON obj = JsonUtility.FromJson<LoginSuccessJSON>(value);
if (obj.code == 200 && obj.message == "操作成功")
{
token = obj.data;
}
else
{
//如果未获取到Token,则用测试账户去再次获取
StartCoroutine(LoginToServerByTestAccount(OnTestAccountLoginSuccessCallback));
}
}
/// <summary>
/// 获取Token
/// </summary>
/// <param name="ticket"></param>
/// <param name="callback"></param>
/// <returns></returns>
private static IEnumerator GetTokenFromServerByTicket(string ticket, Action<string> callback)
{
string url = "https://***.******.com:****/***/login/loginILab";//服务器上获取token的地址,这里不方便透露
//Debug.Log("data=" + data);
WWWForm form = new WWWForm();
form.AddField("ticket", ticket);
using (UnityWebRequest webRequest = UnityWebRequest.Post(url, form))
{
webRequest.SetRequestHeader("Content-Type", "application/x-www-form-urlencoded");
webRequest.downloadHandler = (DownloadHandler)new DownloadHandlerBuffer();
yield return webRequest.SendWebRequest();
if (webRequest.isNetworkError)
Debug.LogError(webRequest.error);
else if (callback != null)
callback.Invoke(webRequest.downloadHandler.text);
}
}
#endregion
#region 登录到服务器
/// <summary>
/// 测试账户登录成功
/// </summary>
/// <param name="value"></param>
private static void OnTestAccountLoginSuccessCallback(string value)
{
Debug.Log("TestAccountCallback:" + value);
LoginSuccessJSON obj = JsonUtility.FromJson<LoginSuccessJSON>(value);
token = obj.data;
Debug.Log("TestAccountToken:"+token);
}
/// <summary>
/// 登录到服务器
/// </summary>
/// <param name="fileName"></param>
/// <param name="callback"></param>
/// <returns></returns>
private static IEnumerator LoginToServerByTestAccount(Action<string> callback)
{
string url = "https://***.******.com:****/mtq/login/login";
string testAccountInfo = "{\"account\": \"admin\",\"password\": \"******\",\"time\": 0}";
using (UnityWebRequest webRequest = new UnityWebRequest(url, "POST"))
{
byte[] bodyRaw = Encoding.UTF8.GetBytes(testAccountInfo);
webRequest.uploadHandler = (UploadHandler)new UploadHandlerRaw(bodyRaw);
webRequest.SetRequestHeader("Content-Type", "application/json");
webRequest.downloadHandler = (DownloadHandler)new DownloadHandlerBuffer();
yield return webRequest.SendWebRequest();
if (webRequest.isNetworkError)
Debug.LogError(webRequest.error);
else if (callback != null)
callback.Invoke(webRequest.downloadHandler.text);
}
}
#endregion
#region 上传分数
/// <summary>
/// 上传分数(外部调用)
/// </summary>
/// <param name="value"></param>
public void ShangChuanScore(string answer, float score, float time, int topicId)
{
this.answer = answer;
this.score = score;
this.time = time;
this.topicId = topicId;
StartCoroutine(UploadScoreCoroutine(ShangChuan));
}
private void ShangChuan(string value)
{
Debug.Log(value);
}
private string answer;
private float score;
private float time;
private int topicId;
string data_ShangChuan;
/// <summary>
/// 上传分数
/// </summary>
/// <param name="fileName"></param>
/// <param name="callback"></param>
/// <returns></returns>
private IEnumerator UploadScoreCoroutine(Action<string> callback)
{
string url = "https://***.******.com:****/***/studentTopic/uploadStudentAnswer";//
data_ShangChuan = "{\"answer\":\"" + answer + "\",\"score\":" + score + ",\"time\":" + time + ",\"topicId\":" + topicId + "}";
Debug.Log(data_ShangChuan);
//string data = "{\"account\": \"admin\",\"password\": \"123456\",\"time\": 0}";
Dictionary<string, string> requestHeader = new Dictionary<string, string>(); // header
//http header 的内容
requestHeader.Add("Content-Type", "application/json");
requestHeader.Add("token", token);
using (UnityWebRequest webRequest = new UnityWebRequest(url, "POST"))
{
byte[] bodyRaw = Encoding.UTF8.GetBytes(data_ShangChuan);
//设置header
foreach (var v in requestHeader)
{
webRequest.SetRequestHeader(v.Key, v.Value);
}
webRequest.uploadHandler = (UploadHandler)new UploadHandlerRaw(bodyRaw);
webRequest.downloadHandler = (DownloadHandler)new DownloadHandlerBuffer();
yield return webRequest.SendWebRequest();
if (webRequest.isNetworkError)
Debug.LogError(webRequest.error);
else if (callback != null)
callback.Invoke(webRequest.downloadHandler.text);
}
}
#endregion
#region 查询分数
private int id;
/// <summary>
/// 查询分数(外部调用)
/// </summary>
/// <param name="id"></param>
public void QueryScore(int id)
{
this.id = id;
StartCoroutine(SeeScoreCoroutine(See));
}
public void See(string value)
{
Debug.Log(value);
}
/// <summary>
/// 查询分数
/// </summary>
/// <param name="fileName"></param>
/// <param name="callback"></param>
/// <returns></returns>
private IEnumerator SeeScoreCoroutine(Action<string> callback)
{
string url = "https://***.******.com:****/***/topic/" + id;
//string data = "{\"account\": \"admin\",\"password\": \"******\",\"time\": 0}";
Dictionary<string, string> requestHeader = new Dictionary<string, string>(); // header
//http header 的内容
requestHeader.Add("Content-Type", "application/json");
requestHeader.Add("token", token);
using (UnityWebRequest webRequest = new UnityWebRequest(url, "POST"))
{
byte[] bodyRaw = Encoding.UTF8.GetBytes(data_ShangChuan);
//设置header
foreach (var v in requestHeader)
{
webRequest.SetRequestHeader(v.Key, v.Value);
}
webRequest.uploadHandler = (UploadHandler)new UploadHandlerRaw(bodyRaw);
webRequest.SetRequestHeader("Content-Type", "application/json");
webRequest.downloadHandler = (DownloadHandler)new DownloadHandlerBuffer();
yield return webRequest.SendWebRequest();
if (webRequest.isNetworkError)
Debug.LogError(webRequest.error);
else if (callback != null)
callback.Invoke(webRequest.downloadHandler.text);
}
}
#endregion
}
[Serializable]
public class LoginSuccessJSON
{
public int code;
public string message;
public string data;
}
然后就是js文件内容了:
//My.jslib //这个是当前js的文件名
var MyPlugin = {
StringReturnValueFunction: function()//获取当前网页的地址
{
var returnStr = window.location.search;
var buffer = _malloc(lengthBytesUTF8(returnStr) + 1);
stringToUTF8(returnStr, buffer,lengthBytesUTF8(returnStr) + 1);
return buffer;
},
GetTokenFormServerByTicket:function(objectName,methodName,ticketStr)//获取token
{
var objName = Pointer_stringify(objectName);
var mtdName = Pointer_stringify(methodName);
var str = Pointer_stringify(ticketStr);
var data = str;
var xhr = new XMLHttpRequest();
xhr.withCredentials = true;
xhr.addEventListener("readystatechange", function() {
if(this.readyState === 4) {
// var returnStr = this.responseText;
// var bufferSize = lengthBytesUTF8(returnStr) + 1;
// var buffer = _malloc(bufferSize);
// stringToUTF8(returnStr, buffer, bufferSize);
//console.log(this.responseText);
SendMessage(objName,mtdName,this.responseText);
}});
xhr.open("POST", "https://***.******.com:****/***/login/loginILab");
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.send(data);
}
};
mergeInto(LibraryManager.library, MyPlugin);
内容就这么多了。
对了,这个是全是用的post的方式去进行的。
在线HTTP POST/GET … 接口测试工具
这工具真好用,也可以装一个专门的软件Postman