需要MD5哈希我的查询参数为Play! 2.0 Web服务请求。这是我用来处理散列的骨架方法:
def API_SIG(params: Seq[(String,String)]) = {
val hashParams = params.sortBy(_._1) :+ ("api_secret",API_SECRET)
getMD5Hash(hashParams.toStringWhateverNativeMethod)
}
Seq[(String,String)]
是将一系列查询参数传递给Play的正确类型!网络服务。对于上下文:
val requestParams = Seq() // nothing here, yet
val finalParams = Seq(("api_key",API_KEY)) ++ requestParams
val sigParams = requestParams :+ ("api_secret",API_SECRET)
val signature = ("sig" -> API_SIG(params))
val finalQueries = Seq(sigParam) ++ finalParams
val request =
WS
.url(requestUri)
.withQueryString(finalQueries:_*)
回顾一下:我基本上需要将Seq[(String,String)]
转换为查询参数字符串,如param=value&more=better&etc=keepsgoing
。不确定是否玩!有一个本机方法,或者如果有人知道一个简单的方法来做到这一点。谢谢你的帮助!
答案 0 :(得分:3)
在Play 2.0中没有这方面的便利方法。但是,这是他们在自己的源代码中如何做到这一点:
params.map(pair => pair._1 + "=" + URLEncoder.encode(pair._2, "UTF-8")).mkString("&")
(更改了变量名并删除了不必要的部分)。
对于更高级的选项,您还可以在Apache HttpClient中使用URLEncodedUtils。