1.创建数据结构
cs
public class JsCode
{
public string js_code;
}
public class OpenID
{
public string openid;
}
2.网络请求
cs
using System;
using System.Collections;
using System.Text;
using UnityEngine;
using UnityEngine.Networking;
public class HttpManager : MonoBehaviour
{
public static HttpManager instance;
private void Awake()
{
if (instance == null)
{
instance = this;
}
else
{
Destroy(this);
}
}
/// <summary>
/// 请求数据
/// </summary>
/// <typeparam name="Treq">请求数据类型</typeparam>
/// <typeparam name="Tres">接收数据类型<</typeparam>
/// <param name="url">请求地址</param>
/// <param name="req">请求数据</param>
/// <param name="callback">回显</param>
public void GetData<Treq, Tres>(string url, Treq req, Action<Tres> callback) where Treq : class where Tres : class
{
StartCoroutine(LoadData<Treq, Tres>(url, req, callback));
}
/// <summary>
/// 请求数据
/// </summary>
/// <typeparam name="Treq">请求数据类型</typeparam>
/// <typeparam name="Tres">接收数据类型</typeparam>
/// <param name="url">请求地址</param>
/// <param name="req">请求数据</param>
/// <param name="callback">回显</param>
/// <returns></returns>
IEnumerator LoadData<Treq, Tres>(string url, Treq req, Action<Tres> callback) where Treq : class where Tres : class
{
string json = JsonUtility.ToJson(req);
//创建一个UnityWebRequest对象,这里以POST方法为例
using (UnityWebRequest request = new UnityWebRequest(url, "POST"))
{
//创建一个UploadHandlerRaw对象,并设置内容类型
Debug.Log("请求地址:" + url);
Debug.Log("请求json:" + json);
request.uploadHandler = new UploadHandlerRaw(Encoding.UTF8.GetBytes(json));
//为请求分配 DownloadHandlerBuffer,用于存储下载数据
request.downloadHandler = new DownloadHandlerBuffer();
//设置请求头
request.SetRequestHeader("content-type", "application/json;charset=utf-8");
//签名验证采用Bearer Token认证方式
//request.SetRequestHeader("Authorization", "Bearer YOUR_ACCESS_TOKEN");
//发送网络请求并等待完成
yield return request.SendWebRequest();
//网络有响应并且成功了
if (request.isDone && request.result == UnityWebRequest.Result.Success)
{
Debug.Log("请求数据:" + request.downloadHandler.text);
Tres res = JsonUtility.FromJson<Tres>(request.downloadHandler.text);
callback?.Invoke(res);
}
else
{
Debug.Log("网络请求失败: " + request.error);
callback?.Invoke(null);
}
}
}
}
3.运用
cs
//成功获取到用户Code
JsCode msg = new JsCode();
msg.js_code = e.code;
HttpManager.instance.GetData<JsCode, OpenID>(WXCodeUrl, msg, (res) => {
Debug.Log("整体接收:" + res);
Debug.Log("openid:" + res.openid);
WXOpenID = res.openid;
});