import org.apache.commons.codec.digest.DigestUtils;
import org.apache.jmeter.config.Arguments;
import java.util.Base64;
import sun.misc.BASE64Encoder;
//開始處理
log.info("接口調用前置處理器-簽名/加密相關處理");
Arguments args = sampler.getArguments();
//獲取請求參數
String bodyin = args.getArgument(0).getValue();
log.info("業務參數:{}",bodyin);
""因為字符串中含有中文,導致簽名驗證總是失敗,后來百度發現是編碼方式不一致的問題,給含中文的字符串加上編碼方式,問題解決了""
""此處啰嗦一句,fastJson對json序列化的時候,會導致原來的順序發生變化,那么也可能導致驗證簽名失敗""
String body = URLEncoder.encode(bodyin, "utf-8"); //參數增加編碼方式,避免因為字符串含中文而驗簽失敗
//獲取時間
long dateTime = new Date().getTime();
String Stime = String.valueOf(dateTime);
//獲取key
String Skey = "${H_key}";
//組合加密字符串
String madei = body + Skey + Stime;
//MD5加密
String p_md5 = DigestUtils.md5Hex(bodyin + Skey + Stime);
//base64加密
BASE64Encoder encode = new sun.misc.BASE64Encoder();
String Bincode = encode.encode(p_md5.getBytes());;
log.info("64weijiamijieguo:"+Bincode);
log.info("MD加密結果:"+p_md5);
log.info("驗簽字符串為:"+ madei);
vars.put("rbody",body);
vars.put("newdate",Stime);
vars.put("Comment",Bincode);