『壹』 有人用过环信吗,会话列表怎么做的
微信授权登录并获取用户基本信息
微信授权使用的是OAuth2.0授权的方式。主要有以下简略步骤:
第一步:用户同意授权,获取code
第二步:通过code换取网页授权access_token
第三步:刷新access_token(如果需要)
第四步:拉取用户信息(需scope为 snsapi_userinfo)
详细的步骤如下:
1.用户关注微信公众账号。
2.微信公众账号提供用户请求授权页面URL。
3.用户点击授权页面URL,将向服务器发起请求
4.服务器询问用户是否同意授权给微信公众账号(scope为snsapi_base时无此步骤)
5.用户同意(scope为snsapi_base时无此步骤)
6.服务器将CODE通过回调传给微信公众账号
7.微信公众账号获得CODE
8.微信公众账号通过CODE向服务器请求Access Token
9.服务器返回Access Token和OpenID给微信公众账号
10.微信公众账号通过Access Token向服务器请求用户信息(scope为snsapi_base时无此步骤)
11.服务器将用户信息回送给微信公众账号(scope为snsapi_base时无此步骤)
『贰』 如何处理 环信获取token慢的问题
1、直接设置token为永不失抄效,但是没能查到环信是否支持这种设置的信息。
2、把对环信的操作放到一个单独的线程中,无需在等待返回结果,我们项目里面这样做无法保证环信的操作和我们自己服务器上操作的一致性,而且线程会暂用比较多的资源。
3、把token取到自己的后台,利用定期(比如6天激发一次更新token的操作),这样实现起来可能会稍微有点麻烦
4、设置一个更新token的时间点,比如token有效期不足一天时,提前更新。具体是每次调用完token后,判断token是否已经需要更新,如果需要在另起一个线程用于更新token。(具体更新方法是,设置有效期为过期,然后访问getToken()方法)。
『叁』 怎么用C# 获取环信app管理员的token值
这个 Response 明显是一个 JSON 格式的数据,所以在C#程序里反序列化它就可以了。
『肆』 如何通过REST接口获取token
可以实现,环信rest对语言没限制,比如获取token ,就是写http请求,设置url headers body
,json请求,不同的语言有不同的写内法。只是容不建议在客户端做rest的操作,如果client_id
和client_secret在客户端被别人恶意获取,app有极大风险的。
『伍』 nodejs集成环信服务器怎么获取token
const get = () => new Promise((resolve, reject) => {
// 获取token的逻辑
// 成功的话调用resolve
// 失败的话调用reject
});
// 判断token是否获取成功,如果失专败的话重新获取一次,不过属这里会陷入循环?
const getToken = get().then(
token => token
).catch(
err => getToken()
)
getToken().then(token => {
// 获得token要干的事情……
});
『陆』 环信 c#转义 怎么发json
publicclassEaseMobService
{
///<summary>
///企业的唯一标识
///</summary>
publicstringorg_name{set;get;}
///<summary>
///同一“企业”下“APP”唯一标识
///</summary>
publicstringapp_name{set;get;}
publicstringclient_id{set;get;}
publicstringclient_secret{set;get;}
stringIM_ParamUrl=System.AppDomain.CurrentDomain.BaseDirectory+@""+"IM_Param.ini";
stringApiUrl{get{return"http://a1.easemob.com/"+org_name+"/"+app_name;}}
Newtonsoft.Json.=newJsonSerializerSettings(){NullValueHandling=NullValueHandling.Ignore};
///<summary>
///获取令牌
///</summary>
stringGetToken()
{
Request_TokenRequest_Token_Model=newRequest_Token();
Request_Token_Model.grant_type="client_credentials";
Request_Token_Model.client_id=client_id;
Request_Token_Model.client_secret=client_secret;
Response_TokenResponse_Token_Model=null;
if(File.Exists(IM_ParamUrl))
{
Response_Token_Model=newResponse_Token();
System.Reflection.PropertyInfo[]Response_Token_Pros=typeof(Response_Token).GetProperties();
foreach(System.Reflection._Token_Pros)
{
if(PropertyInfoI.CanWrite)
{
PropertyInfoI.SetValue(Response_Token_Model,Convert.ChangeType(TCustomDLL.FileHelper.IniHelper.ReadIni(IM_ParamUrl,"token",PropertyInfoI.Name),PropertyInfoI.PropertyType),null);
}
}
if(Response_Token_Model.get_time.AddSeconds(Convert.ToDouble(Response_Token_Model.expires_in))<=DateTime.Now)
{
Response_Token_Model=null;
}
}
else
{
FileStreamfs=File.Create(IM_ParamUrl);
fs.Close();
}
if(Response_Token_Model==null)
{
System.Net.HttpStatusCodeOpStatusCode=System.Net.HttpStatusCode.ExpectationFailed;
stringOpStatusDescription=string.Empty;
JObjectResultObj=EaseMobFuc(Request_Token_Model,"token",outOpStatusCode,outOpStatusDescription,Authorization_Token:false);
if(OpStatusCode==HttpStatusCode.OK)
{
Response_Token_Model=newResponse_Token()
{
get_time=DateTime.Now
};
System.Reflection.PropertyInfo[]Response_Token_Pros=typeof(Response_Token).GetProperties();
foreach(System.Reflection._Token_Pros)
{
if(PropertyInfoI.CanWrite)
{
if(ResultObj[PropertyInfoI.Name]!=null)
{
PropertyInfoI.SetValue(Response_Token_Model,ResultObj[PropertyInfoI.Name].ToObject(PropertyInfoI.PropertyType),null);
}
TCustomDLL.FileHelper.IniHelper.WriteIni(IM_ParamUrl,"token",PropertyInfoI.Name,PropertyInfoI.GetValue(Response_Token_Model,null).ToString());
}
}
}
else
{
returnstring.Empty;
}
}
returnResponse_Token_Model.access_token;
}
///<summary>
///调用环信后台接口函数
///</summary>
publicJObjectEaseMobFuc(objectRequest_Model,stringFucName,outHttpStatusCodeOpStatusCode,outstringOpStatusDescription,WebHelper.RequestTyperequesttype=WebHelper.RequestType.Post,boolAuthorization_Token=true)
{
WebHeaderCollectionheaders=null;
if(Authorization_Token)
{
headers=newWebHeaderCollection();
headers.Add("Authorization:Bearer"+GetToken());
}
stringRequestBodyStr=string.Empty;
if(Request_Model!=null)
{
RequestBodyStr=JsonConvert.SerializeObject(Request_Model,MyJsonSerializerSettings);
}
JObjectResultObj=(JObject)JsonConvert.DeserializeObject(ResponseHelper.GetResult(requesttype,outOpStatusCode,outOpStatusDescription,ApiUrl+"/"+FucName,RequestBodyStr,headers:headers,contentType:"application/json"));
if(OpStatusCode==System.Net.HttpStatusCode.OK)
{
returnResultObj;
}
returnnull;
}
///<summary>
///获取历史消息
///</summary>
publicJObjectGet_ChatMessages(DateTimeStartTime)
{
JObjectResultObj=null;
stringChatMessages_Url=System.AppDomain.CurrentDomain.BaseDirectory+@"ChatMessages"+app_name;
stringChatMessages_FileUrl=ChatMessages_Url+@"ChatMessages_"+StartTime.ToString("yyyyMMddHH")+".json";
TCustomDLL.FileHelper.FolderHelper.CreateFolder(ChatMessages_Url);
if(File.Exists(IM_ParamUrl))
{
DateTimeLastRequestTime=DateTime.MinValue;
DateTime.TryParse(TCustomDLL.FileHelper.IniHelper.ReadIni(IM_ParamUrl,"params","get_ChatMessages_time"),outLastRequestTime);
if(LastRequestTime.AddSeconds(8)>DateTime.Now)
{
if(File.Exists(ChatMessages_FileUrl))
{
FileStreamfs=newFileStream(ChatMessages_FileUrl,FileMode.Open,FileAccess.Read,FileShare.ReadWrite);
StreamReadersr=newStreamReader(fs);
ResultObj=(JObject)JsonConvert.DeserializeObject(sr.ReadToEnd());
sr.Close();
fs.Close();
}
}
}
else
{
FileStreamfs=File.Create(IM_ParamUrl);
fs.Close();
}
if(ResultObj==null)
{
System.Net.HttpStatusCodeOpStatusCode=System.Net.HttpStatusCode.ExpectationFailed;
stringOpStatusDescription=string.Empty;
ResultObj=EaseMobFuc(null,"chatmessages/"+StartTime.ToString("yyyyMMddHH"),outOpStatusCode,outOpStatusDescription,WebHelper.RequestType.Get);
if(OpStatusCode==HttpStatusCode.OK)
{
TCustomDLL.FileHelper.IniHelper.WriteIni(IM_ParamUrl,"params","get_ChatMessages_time",DateTime.Now.ToString());
FileStreamfs=newFileStream(ChatMessages_FileUrl,FileMode.Create,FileAccess.Write,FileShare.ReadWrite);
StreamWritersw=newStreamWriter(fs);
sw.Write(JsonConvert.SerializeObject(ResultObj));
sw.Flush();
sw.Close();
fs.Close();
}
}
returnResultObj;
}
}
『柒』 环信即时通讯REST API中下载图片和语音文件怎么下载(PHP curl)
该问题已解决