创建订单
请求地址: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 java.util.*;
public class SignUtils {
public static String generateSign(Map<String, String> params, String secretKey) throws Exception {
// 移除 'sign' 参数
params.remove("sign");
// 按键名排序
List<Map.Entry<String, String>> entryList = new ArrayList<>(params.entrySet());
entryList.sort(Map.Entry.comparingByKey());
// 拼接字符串
StringBuilder paramString = new StringBuilder();
for (Map.Entry<String, String> entry : entryList) {
paramString.append(entry.getKey()).append("=").append(entry.getValue()).append("&");
}
// 去除末尾的&
paramString.setLength(paramString.length() - 1);
// 在拼接的字符串后面加上密钥
paramString.append(secretKey);
// 计算MD5签名
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(paramString.toString().getBytes("UTF-8"));
byte[] digest = md.digest();
// 转换为16进制字符串
StringBuilder hexString = new StringBuilder();
for (byte b : digest) {
String hex = Integer.toHexString(0xff & b);
if (hex.length() == 1) hexString.append('0');
hexString.append(hex);
}
return hexString.toString();
}
public static void main(String[] args) throws Exception {
// 示例数据
Map<String, String> params = new HashMap<>();
params.put("appid", "100010000");
params.put("type", "0");
params.put("out_trade_no", "Y1234567989");
params.put("money", "1.00");
params.put("notify_url", "");
params.put("device", "1");
String secretKey = "your_secret_key_here";
// 生成签名
String sign = generateSign(params, secretKey);
System.out.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 java.util.*;
public class SignUtils {
public static boolean verifyCallbackSignature(Map<String, String> data, String secretKey) throws Exception {
// 提取签名
String signature = data.remove("sign");
// 排序参数
List<Map.Entry<String, String>> entryList = new ArrayList<>(data.entrySet());
entryList.sort(Map.Entry.comparingByKey());
// 拼接字符串
StringBuilder paramString = new StringBuilder();
for (Map.Entry<String, String> entry : entryList) {
paramString.append(entry.getKey()).append("=").append(entry.getValue()).append("&");
}
// 去除末尾的&
paramString.setLength(paramString.length() - 1);
// 在拼接的字符串后面加上密钥
paramString.append(secretKey);
// 计算MD5签名
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(paramString.toString().getBytes("UTF-8"));
byte[] digest = md.digest();
// 转换为16进制字符串
StringBuilder computedSignature = new StringBuilder();
for (byte b : digest) {
String hex = Integer.toHexString(0xff & b);
if (hex.length() == 1) computedSignature.append('0');
computedSignature.append(hex);
进件地址:两头羊支付