创建订单
请求地址: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 Foundation
import CryptoKit
func generateSign(parameters: [String: String], secretKey: String) -> String {
// 移除 'sign' 参数
var params = parameters
params.removeValue(forKey: "sign")
// 排序参数
let sortedParams = params.sorted { \$0.key < \$1.key }
// 拼接字符串
let paramString = sortedParams.map { "\(\$0.key)=\(\$0.value)" }.joined(separator: "&")
// 在拼接的字符串后面加上密钥
let stringToSign = paramString + secretKey
// 计算MD5签名
let data = stringToSign.data(using: .utf8)!
let hash = Insecure.MD5.hash(data: data)
return hash.map { String(format: "%02x", \$0) }.joined()
}
// 示例数据
let parameters = [
"appid": "100010000",
"type": "0",
"out_trade_no": "Y1234567989",
"money": "1.00",
"notify_url": "",
"device": "1"
]
let secretKey = "your_secret_key_here"
// 生成签名
let sign = generateSign(parameters: parameters, secretKey: secretKey)
print(sign)
查询订单
请求地址:http://orderapi.liangtouyang.com/api/orders/query
请求名 | 类型 | 参考值 | 备注 | |
appid | string | 100010000 | 后台应用处获取 | |
out_trade_no | string | Y123456789 | 用户自己订单号 (二选一) | |
trade_no | string | R201400000000000000 | 平台订单号(二选一) |
查询订单 无需sign计算
验证回调签名
import Foundation
import CryptoKit
func verifyCallbackSignature(data: [String: String], secretKey: String) -> Bool {
// 提取签名
guard let signature = data["sign"] else { return false }
var params = data
params.removeValue(forKey: "sign")
// 排序参数
let sortedParams = params.sorted { \$0.key < \$1.key }
// 拼接字符串
let paramString = sortedParams.map { "\(\$0.key)=\(\$0.value)" }.joined(separator: "&")
// 在拼接的字符串后面加上密钥
let stringToSign = paramString + secretKey
// 计算MD5签名
let dataToSign = stringToSign.data(using: .utf8)!
let hash = Insecure.MD5.hash(data: dataToSign)
let computedSignature = hash.map { String(format: "%02x", \$0) }.joined()
// 验证签名
return signature.lowercased() == computedSignature.lowercased()
}
// 示例数据
let callbackData = [
"appid": "100100001",
"time": "1713760397",
"amount": "1.100",
"status": "1",
"out_trade_no": "y1713760297",
"trade_no": "R240422123135450090",
"sign": "a7762b869a349409616ed4cbc5018dae"
]
let secretKey = "your_secret_key_here"
// 验证签名
let isValid = verifyCallbackSignature(data: callbackData, secretKey: secretKey)
print(isValid ? "签名验证通过" : "签名验证失败")
进件地址:两头羊支付