创建订单
请求地址: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
fun generateSign(parameters: Map<String, String>, secretKey: String): String {
// 移除 'sign' 参数
val params = parameters.toMutableMap()
params.remove("sign")
// 排序参数
val sortedParams = params.toSortedMap()
// 拼接字符串
val paramString = sortedParams.entries.joinToString("&") { "${it.key}=${it.value}" }
// 在拼接的字符串后面加上密钥
val stringToSign = paramString + secretKey
// 计算MD5签名
val md = MessageDigest.getInstance("MD5")
val hash = md.digest(stringToSign.toByteArray())
return hash.joinToString("") { "%02x".format(it) }
}
fun main() {
val parameters = mapOf(
"appid" to "100010000",
"type" to "0",
"out_trade_no" to "Y1234567989",
"money" to "1.00",
"notify_url" to "",
"device" to "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
fun verifyCallbackSignature(data: Map<String, String>, secretKey: String): Boolean {
// 提取签名
val signature = data["sign"] ?: return false
val params = data.toMutableMap()
params.remove("sign")
// 排序参数
val sortedParams = params.toSortedMap()
// 拼接字符串
val paramString = sortedParams.entries.joinToString("&") { "${it.key}=${it.value}" }
// 在拼接的字符串后面加上密钥
val stringToSign = paramString + secretKey
// 计算MD5签名
val md = MessageDigest.getInstance("MD5")
val hash = md.digest(stringToSign.toByteArray())
val computedSignature = hash.joinToString("") { "%02x".format(it) }
// 验证签名
return signature.equals(computedSignature, ignoreCase = true)
}
fun main() {
val data = mapOf(
"appid" to "100100001",
"time" to "1713760397",
"amount" to "1.100",
"status" to "1",
"out_trade_no" to "y1713760297",
"trade_no" to "R240422123135450090",
"sign" to "a7762b869a349409616ed4cbc5018dae"
)
val secretKey = "your_secret_key_here"
进件地址:两头羊支付