请教老师PHP调用WEBAPI时用户密码如何加密?
金蝶云社区-nmgzjf
nmgzjf
0人赞赏了该文章 2,011次浏览 未经作者许可,禁止转载编辑于2015年12月28日 09:07:19

首先,我做了一些.NET的数据集成功能,理解了JSON组织数据提交的思路,但是对一些底层的技术架构不理解。

真心希望老师们能耐心解答一下:

1.关于CLOUD数据对接,我理解的方法有下面三种,以登录为例:

1).NET客户端调用WebApi.dll,使用Execute()方法提交JSON;
特点:.NET 习惯写C/S结构的程序员的福音,不用管什么POST请求,调用方法测试也相对简单。
string serviceName = "Kingdee.BOS.WebApi.ServicesStub.AuthService.ValidateUser"; object[] loginInfo = new object[] { "001c420d973a862711e4a5daacd70218",//帐套Id "demo",//用户名 "888888",//密码 CultureInfo.CurrentCulture.LCID};//语言id
return client.Execute(serviceName, loginInfo);
2)通过SI服务形式,采用HTTP/POST提交,一般的请求地址是:http://localhost/K3CloudServiceInterface/
特点:这个需要在CLOUD里设置,默认是不开放的,能够设置登录认证或无许登录即调用服务;
public static final String POST_URL_Login = "http://localhost/K3CloudServiceInterface/json/syncreply/Auth ";
URL postUrl = new URL(POST_URL_Login);
HttpURLConnection connection = (HttpURLConnection) postUrl.openConnection();
if(!connection.getDoOutput())
{
connection.setDoOutput(true);
}
connection.setRequestMethod("POST");
connection.setUseCaches(false);
connection.setInstanceFollowRedirects(true);
connection.setRequestProperty("Content-Type", "application/json");
DataOutputStream out = new DataOutputStream(connection.getOutputStream());
//登陆验证字串
String content = "{\"provider\":\"credentials\",\"UserName\":\"Administrator\",\"Password\":\"888888\",\"RememberMe\":false\"PasswordIsEncrypted\":false}";
out.writeBytes(content);
out.flush();
out.close();
3)HTTP请求webapi服务接口,我不知道这种方法是不是该这么叫,就是HTTP/POST提交,但不像SI服务那样需要设置,CLOUD默认就提供,这个应该
是.NET B/S架构的后端服务直接调用方法吧,但我真的不知道该叫什么方法:
请是这样的调用方法:
http://localhost/K3Cloud/Kingdee.BOS.WebApi.ServicesStub.AuthService.ValidateUser.common.kdsvc
httpClient.Url = string.Concat(CloudUrl, "Kingdee.BOS.WebApi.ServicesStub.AuthService.ValidateUser.common.kdsvc");
//List Parameters = new List
// {
// DataCenterID ,
// strUser,
// strPwd,
// 2052
// };
httpClient.Content = JsonConvert.SerializeObject(Parameters);
return httpClient.SysncRequest();

这种方法本质上和第1种应该是一样的,只不过是没有了WEBAPI.dll的封装,是支持JAVA和PHP通过HTTP请求来实现的。

不知道我的理解对不对?
现在我的问题是,我想在登录验证时加密用户密码,客户看到是明文传递,直接就嘲笑了。
但是,我看到的都是SI方式有PasswordIsEncrypted这个参数,WEBAPI有吗?
如果有的话,我看到又需要Kingdee.BOS.Util.ConfidentialDataSecurityUtil.CipherText("需加密字串")

到这里,我就彻底蒙了。

现在我们想实现PHP以WEBAPI方式调用,但要求密钥验证。该怎么实现呢?密码加密的方法又该怎么调用