创建订单
请求地址: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加密字符串 |
|
计算签名
require 'digest'
def generate_sign(params, secret_key)
# 移除 'sign' 参数
params.delete('sign')
# 排序参数
sorted_params = params.sort.to_h
# 拼接字符串
param_string = sorted_params.map { |k, v| "#{k}=#{v}" }.join('&')
# 在拼接的字符串后面加上密钥
param_string += secret_key
# 计算MD5签名
Digest::MD5.hexdigest(param_string)
end
# 示例数据
params = {
'appid' => '100010000',
'type' => 0,
'out_trade_no' => 'Y1234567989',
'money' => '1.00',
'notify_url' => '',
'device' => 1
}
secret_key = 'your_secret_key_here'
# 生成签名
sign = generate_sign(params, secret_key)
puts sign
查询订单
请求地址:http://orderapi.liangtouyang.com/api/orders/query
请求名 | 类型 | 参考值 | 备注 | |
appid | string | 100010000 | 后台应用处获取 | |
out_trade_no | string | Y123456789 | 用户自己订单号 (二选一) | |
trade_no | string | R201400000000000000 | 平台订单号(二选一) |
查询订单 无需sign计算
验证回调签名
require 'digest'
require 'json'
require 'uri'
def verify_callback_signature(data, secret_key)
# 提取签名
signature = data.delete('sign')
# 排序参数
sorted_data = data.sort.to_h
# 拼接字符串
param_string = sorted_data.map { |k, v| "#{k}=#{v}" }.join('&')
# 在拼接的字符串后面加上密钥
param_string += secret_key
# 计算MD5签名
computed_signature = Digest::MD5.hexdigest(param_string)
# 验证签名
signature == computed_signature
end
# 假设获取到的回调数据
url_data = 'data=%7B%22appid%22%3A100100001%2C%22time%22%3A1713760397%2C%22amount%22%3A%221.100%22%2C%22status%22%3A1%2C%22out_trade_no%22%3A%22y1713760297%22%2C%22trade_no%22%3A%22R240422123135450090%22%2C%22sign%22%3A%22a7762b869a349409616ed4cbc5018dae%22%7D'
data = JSON.parse(URI.decode_www_form_component(url_data.split('=').last))
secret_key = 'your_secret_key_here'
# 验证签名
is_valid = verify_callback_signature(data, secret_key)
puts is_valid ? '签名验证通过' : '签名验证失败'
进件地址:两头羊支付