POST https://selfpay.myclass.top/submit(Content-Type: application/x-www-form-urlencoded)
下单成功后返回收款页地址 pay_url,引导用户跳转或输出二维码即可。
| 字段 | 必填 | 说明 |
|---|---|---|
| appid | 是 | 商户APPID(后台「商户密钥」中获取) |
| out_trade_no | 是 | 商户订单号,64位内唯一 |
| money | 是 | 订单金额,单位元,两位小数,如 10.00 |
| type | 是 | alipay=支付宝 / wechat=微信 |
| title | 否 | 商品名称 |
| notify_url | 否 | 异步回调地址,支付成功后POST通知 |
| return_url | 否 | 支付成功后的同步跳转地址 |
| param | 否 | 透传参数,回调时原样返回 |
| sign | 是 | 签名,见下方规则 |
1. 排除 sign、sign_type 和空值参数,按参数名 ASCII 码升序排序;
2. 拼接成 k1=v1&k2=v2...;
3. 末尾拼接 &key=你的商户密钥secret;
4. 整体 MD5 后转小写即为 sign。
sign = md5("appid=10001&money=10.00&out_trade_no=20240101123456&type=alipay&key=sk_xxxxxx")
{
"code": 1,
"msg": "下单成功",
"data": {
"trade_no": "20240101120000123456", // 系统订单号
"out_trade_no": "20240101123456", // 商户订单号
"money": "10.00", // 提交金额
"pay_money": "10.37", // 实际应付金额(含识别尾数)
"pay_url": "http://yourdomain.com/pay/20240101120000123456", // 收款页
"qr_img": "https://...", // 收款码图片
"expiretime": 1704072000 // 过期时间戳
}
}
GET https://selfpay.myclass.top/api/status?trade_no=系统订单号
返回 data.status:0=待支付 1=已支付 2=已过期。
支付成功后系统向 notify_url 发送 POST 表单请求,参数包含:
appid、out_trade_no、trade_no、money、pay_money、type、status(=1)、param、paytime、sign。
签名规则与下单一致,商户务必验签并核对金额后处理业务,处理成功请输出 success(区分大小写不限)。
未响应 success 视为失败,可在后台「订单管理」中重发回调。
<?php
$param = [
'appid' => '10001',
'out_trade_no' => date('YmdHis') . rand(100, 999),
'money' => '10.00',
'type' => 'alipay',
'title' => '测试商品',
'notify_url' => 'https://yoursite.com/notify.php',
'return_url' => 'https://yoursite.com/return.php',
];
ksort($param);
$str = '';
foreach ($param as $k => $v) {
if ($v === '' || $v === null) continue; // 空值不参与签名
$str .= ($str ? '&' : '') . $k . '=' . $v;
}
$param['sign'] = md5($str . '&key=sk_xxxxxx');
$ch = curl_init('https://selfpay.myclass.top/submit');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => http_build_query($param),
CURLOPT_RETURNTRANSFER => true,
]);
echo curl_exec($ch);