创建订单
请求地址:http://orderapi.liangtouyang.com/api/orders/pay
请求名 | 类型 | 参考值 | 备注 | |
appid | String | 100010000 | 后台应用中心获取 | |
type | int | 0 | 0:微信支付 1:支付宝支付 | |
out_trade_no | string | Y1234567989 | 用户订单号 | |
money | string | 1.00 | 付款金额,注意必须是标准的金额格式如1.00 1.01 | |
notify_url | string | 可填可不填 不填则用后台应用内设置的为准 | ||
device | int | 1 | 1:电脑 2:手机 填写的类型会利于接口的返回类型 | |
sign | string | 32位的MD5加密字符串 |
|
计算签名
import java.security.MessageDigest
import scala.collection.immutable.TreeMap
object SignUtils {
def generateSign(parameters: Map[String, String], secretKey: String): String = {
// 移除 'sign' 参数
val params = parameters - "sign"
// 排序参数
val sortedParams = TreeMap(params.toSeq: _*)
// 拼接字符串
val paramString = sortedParams.map { case (k, v) => s"$k=$v" }.mkString("&")
// 在拼接的字符串后面加上密钥
val stringToSign = paramString + secretKey
// 计算MD5签名
val md = MessageDigest.getInstance("MD5")
val digest = md.digest(stringToSign.getBytes)
digest.map("%02x".format(_)).mkString
}
def main(args: Array[String]): Unit = {
val parameters = Map(
"appid" -> "100010000",
"type" -> "0",
"out_trade_no" -> "Y1234567989",
"money" -> "1.00",
"notify_url" -> "",
"device" -> "1"
)
val secretKey = "your_secret_key_here"
val sign = generateSign(parameters, secretKey)
println(sign)
}
}
查询订单
请求地址:http://orderapi.liangtouyang.com/api/orders/query
请求名 | 类型 | 参考值 | 备注 | |
appid | string | 100010000 | 后台应用处获取 | |
out_trade_no | string | Y123456789 | 用户自己订单号 (二选一) | |
trade_no | string | R201400000000000000 | 平台订单号(二选一) |
// 查询订单 无需sign计算
验证回调签名
import java.security.MessageDigest
import scala.collection.immutable.TreeMap
object VerifyUtils {
def verifyCallbackSignature(data: Map[String, String], secretKey: String): Boolean = {
// 提取签名
val signature = data.getOrElse("sign", return false)
val params = data - "sign"
// 排序参数
val sortedParams = TreeMap(params.toSeq: _*)
// 拼接字符串
val paramString = sortedParams.map { case (k, v) => s"$k=$v" }.mkString("&")
// 在拼接的字符串后面加上密钥
val stringToSign = paramString + secretKey
// 计算MD5签名
val md = MessageDigest.getInstance("MD5")
val digest = md.digest(stringToSign.getBytes)
val computedSignature = digest.map("%02x".format(_)).mkString
// 验证签名
signature.equalsIgnoreCase(computedSignature)
}
def main(args: Array[String]): Unit = {
val data = Map(
"appid" -> "100100001",
"time" -> "1713760397",
"amount" -> "1.100",
"status" -> "1",
"out_trade_no" -> "y1713760297",
"trade_no" -> "R240422123135450090",
"sign" -> "a7762b869a349409616ed4cbc5018dae"
)
val secretKey = "your_secret_key_here"
val isValid = verifyCallbackSignature(data, secretKey)
println(if (isValid) "签名验证通过" else "签名验证失败")
}
}
进件地址:两头羊支付