【发布时间】:2023-02-03 23:35:54
【问题描述】:
我试图从 binance pay api 获取“创建订单”api 以在我的 kotlin android 应用程序中进行付款。我正在关注 api documentation 来构建有效负载和签名,但不幸的是它不起作用。 我收到此错误:“errorMessage”:“此请求的签名无效。”
任何人都可以帮忙吗?
private fun createSignature(payload: String, secretKey: String): String {
val sha512HMAC = Mac.getInstance("HmacSHA512")
val secretKeySpec =
SecretKeySpec(secretKey.toByteArray(), "HmacSHA512") // bokra jarrib HMAC-SHA512
sha512HMAC.init(secretKeySpec)
val digest = sha512HMAC.doFinal(payload.toByteArray())
return digest.toHex()
}
val timestamp = System.currentTimeMillis() + clockOffset
val nonceStr = generateNonce()
val body = Gson().toJson(
OrderRequest(
Env("APP"),
merchantTradeNb,
0.02,
"USDT",
Goods("01", "D000", "7876763A3C", "phone", "Good new phone")
)
)
val payload = timestamp.toString() + "\n" + nonceStr + "\n" + body + "\n"
val signature: String = createSignature(
payload.toByteArray(Charsets.UTF_8).toString(), secretKey
).uppercase()
val retrofitData = retrofitBuilder.binanceApi.createOrder(
"application/json", timestamp, nonceStr, certSn, signature, body
)
retrofitData.enqueue(object : Callback<OrderResponse> {
override fun onResponse(
call: Call<OrderResponse>,
response: Response<OrderResponse>,
) {
response.body()
}
override fun onFailure(call: Call<OrderResponse>, t: Throwable) {
}
})
}
interface BinancePayApi {
@POST("/binancepay/openapi/v2/order")
fun createOrder(
@Header("Content-type") contentType: String,
@Header("BinancePay-Timestamp") timestamp: Long,
@Header("BinancePay-Nonce") nonce: String,
@Header("BinancePay-Certificate-SN") apiKey: String,
@Header("BinancePay-Signature") signature: String,
@Body request: String
): Call<OrderResponse>
}
【问题讨论】:
标签: android kotlin signature binance