Android网络请求-sign参数的设置

 最近做项目,碰着一个奇怪的请求,后台说在调用接口之前需要验证签名和有效时间,当场就懵逼了,要生成一个sign签名,下面来说说怎么做

首先说说大致思路: sign 的生成:按照规则来是键值对的形式(key=value),拼接的时候按照key=value&key=value(注意:key:后台所需的参数名,value:前台所获取到的值)&time=系统所获取的时间&salt = fangzhou(这个参数按照后台要求),而后进行 urlencode 编码(Java中有方法),下一步进行MD5加密,如果需要将加密后的值全部转化为大写(小写),Java中有方法直接调用即可;

 接下来说说具体怎么实现:

1.请求数值的拼接(key=value&key=value):

String name = "宋小宝";
String address = "东北";

String panameter = "name="+ name + "& address = "+address;
 
  

 
  2.在请求数值的拼接字符串后面加上时间戳和特定值(根据后台要求来) 
  

//获取系统时间戳
Date dt= new Date();
Long timeStamp= dt.getTime();

String signText = panameter +"&time="+timeStamp + "&salt=fangzhou";
 
  

 
  3.拼接完成后,对signText进行 urlencode 编码 
  

try {
  String urlencoderText =  URLEncoder.encode(signText,"utf-8");
} catch (UnsupportedEncodingException e) {
    e.printStackTrace();
}
 
  
 
  

 
  
 注:这里会抛出一个异常,直接 try 就可以了,这只是一个Java方法直接调用就完毕了 
  

4.然后进行md5加密

//MD5加密
String md5Text = md5(urlencoderText);
md5加密的方法了,网上有,直接c,v就ok了;

如果要对加密后的值,字母全部转化为大写(小写)直接这样:

//MD5加密
String md5Text = md5(urlencoderText).trim().toUpperCase();
注:这是转化为大写的方法(小写的方法:直接在字符串后面这样加就可以了
.trim().toLowerCase();
 

这样就可以了;但是你以为这样就完了? 哥们儿,你想的太简单了;下面才是最坑...的时候,怎么形容了,直接上代码吧!

首先说明一点我用的xutils请求框架(具体怎么用我就不说了,相信大家都会用的-中国的程序猿是最棒的);

//设置请求地址
params = new RequestParams(url);

//添加请求参数
params.addBodyParameter("name",name);
params.addBodyParameter("address",address);
//---添加时间戳---
params.addBodyParameter("time",timeStamp+"");

//加密的参数-sign
params.addBodyParameter("sign",md5Text );

看见没有, 没有进行转码的请求参数,照样去添加,一个都不能少,反而还多了一个时间戳的参数,但是注意我上面加密了salt请求参数,这里没有添加!!在最后面添加了转码加密后的请求参数-sign


而后就用正常的发请求的流程就可以啦,,,就是这样--完美


总之一句话-先拼接-后转码-再加密-再发请求

给自己学到的东西-记录下来,别忘了,有问题可以咨询我,我的邮箱:[email protected];

如果有不对,欢迎骚扰我-我乐意奉陪哟,最好是妹子........

同时分享是美德











你可能感兴趣的:(android,java)