查询订单

应用场景

商户可以通过查询订单接口主动查询订单状态,完成下一步的业务逻辑。查询订单状态可通过[易码付平台订单号]或[商户订单号]两种方式查询。

接口链接

请求方式:POST

URL地址:{BASE_URL}/v1/transactions/orderid.html

请求参数

字段名 变量名 必填 类型 示例值 描述
应用ID app_id String app_9ba59abbe56e057f20f 由易码付平台生成的应用ID,全局唯一。
商户订单号 out_trade_no String 1217752501201407

商户订单号

参数必传,值可以传空

商户订单号和易码付平台订单号不能同时为空,out_trade_no,trade_no如果同时存在优先取out_trade_no

易惠平台订单号 trade_no String YH2307190009507085358

该交易在易码付系统中的交易流水号。

商户订单号

商户订单号和易码付平台订单号不能同时为空,out_trade_no,trade_no如果同时存在优先取out_trade_no

签名串 sign String e10adc3949ba59abbe56e057f20f883e 待签名字符串进行MD5加密得出的32位签名值,参考签名规则

举例如下:

{BASE_URL}/v1/transactions/orderid.html?app_id=app_159f7a1756bf8b08&out_trade_no=&trade_no=YH2307190009507085358&sign=f74e3b4a9e2bcb971c3a68c80286bc8e

返回结果

字段名 变量名 必填 类型 示例值 描述
业务状态码 resultCode Int 200

200/201/500

此字段是业务标识状态码,200代表业务处理成功,并成功返回

业务状态描述 message String 成功

当resultCode非200时返回信息为错误原因 ,例如

app_id错误或不存在

数据集 Data String -

当resultCode为200时,数据会装入该字段一并返回

out_trade_no String 1217752501201407 Data内的字段:商户订单号
trade_no String YH2307190011178361713 Data内的字段:易码付平台订单号
create_time String 2021-07-19 00:09:50 Data内的字段:订单创建时间
notify_url String http://api.qdoto.com/transactions/notify.html Data内的字段:通知URL
time_expire String 60 Data内的字段:订单超时时长,单位为分钟
description String 苹果13Pro Data内的字段:商品描述
app_id String app_9ba59abbe56e057f20f Data内的字段:应用ID
platform_trade_no String 2021080121001004890293599497 Data内的字段:第三方支付平台订单号
channel String alipay_qr Data内的字段:支付渠道
attach String {"userId":888,"level":3} Data内的字段:附加数据,创建订单时由商户上传,查单和异步通知时原样返回
trade_state String success

Data内的字段:支付状态

success:支付成功

closed:订单关闭

wait:等待付款

client_ip String 127.0.0.1 Data内的字段:发起支付请求客户端的 IP地址
notify_state String success

Data内的字段:异步回调通知状态

success:通知成功

failed:通知失败

none:未通知

pay_time String 2021-07-19 00:09:58 Data内的字段:付款时间
amount String 100 Data内的字段:订单金额,单位为分。

举例如下:

{
    "resultCode":200,
    "message":"成功",
    "Data":{
        "amount":2,
        "time_expire":0,
        "trade_state":"wait",
        "create_time":"2023-08-25 17:15:57",
        "channel":"alipay_app",
        "description":"iPhone+13+Pro",
        "notify_url":"http://notify.qdoto.com/payment/callback.html",
        "pay_time":"2023-08-25 17:15:57",
        "out_trade_no":"MER1692954956218",
        "notify_state":"none",
        "platform_trade_no":"",
        "trade_no":"YH2308251715577476213",
        "client_ip":"0:0:0:0:0:0:0:1",
        "attach":"%7B%22channel%22%3A%22alipay_app%22%7D",
        "app_id":"app_7ca649d7cef5deb2"
    }
}

状态码

状态码 描述
200 成功
201 业务错误,具体错误信息请参照message字段
500 系统错误

代码示例

# 查询订单
curl -X POST "{BASE_URL}/v1/transactions/orderid.html" \
  -d "app_id={YOUR_APP_ID}" \
  -d "out_trade_no=20240101123456" \
  -d "sign=E10ADC3949BA59ABBE56E057F20F883E"
<?php
$appId  = '{YOUR_APP_ID}';
$apiKey = '{YOUR_API_KEY}';
$params = [
    'app_id'       => $appId,
    'out_trade_no' => '20240101123456',
];
ksort($params);
$signStr = urldecode(http_build_query($params)) . '&key=' . $apiKey;
$params['sign'] = strtoupper(md5($signStr));

$ch = curl_init('{BASE_URL}/v1/transactions/orderid.html');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
curl_close($ch);
$response = json_decode($result, true);
print_r($response);
import hashlib
import requests

app_id = '{YOUR_APP_ID}'
api_key = '{YOUR_API_KEY}'
params = {
    'app_id': app_id,
    'out_trade_no': '20240101123456',
}
sorted_keys = sorted(params.keys())
sign_str = '&'.join(f'{k}={params[k]}' for k in sorted_keys) + '&key=' + api_key
params['sign'] = hashlib.md5(sign_str.encode()).hexdigest().upper()

resp = requests.post('{BASE_URL}/v1/transactions/orderid.html', data=params)
print(resp.json())
import java.io.*;
import java.net.*;
import java.security.MessageDigest;
import java.util.*;

public class QueryOrder {
    public static void main(String[] args) throws Exception {
        String appId = "{YOUR_APP_ID}";
        String apiKey = "{YOUR_API_KEY}";
        Map<String, String> params = new TreeMap<>();
        params.put("app_id", appId);
        params.put("out_trade_no", "20240101123456");
        StringBuilder sb = new StringBuilder();
        for (Map.Entry<String, String> e : params.entrySet())
            sb.append(e.getKey()).append("=").append(e.getValue()).append("&");
        sb.append("key=").append(apiKey);
        String sign = md5(sb.toString()).toUpperCase();
        params.put("sign", sign);
        String result = doPost("{BASE_URL}/v1/transactions/orderid.html", params);
        System.out.println(result);
    }
    static String md5(String s) throws Exception {
        MessageDigest md = MessageDigest.getInstance("MD5");
        byte[] digest = md.digest(s.getBytes("UTF-8"));
        StringBuilder sb = new StringBuilder();
        for (byte b : digest) sb.append(String.format("%02x", b));
        return sb.toString();
    }
    static String doPost(String url, Map<String, String> params) throws Exception {
        StringBuilder body = new StringBuilder();
        for (Map.Entry<String, String> e : params.entrySet())
            body.append(URLEncoder.encode(e.getKey(), "UTF-8"))
                .append("=").append(URLEncoder.encode(e.getValue(), "UTF-8")).append("&");
        HttpURLConnection conn = (HttpURLConnection) new URL(url).openConnection();
        conn.setRequestMethod("POST");
        conn.setDoOutput(true);
        conn.getOutputStream().write(body.toString().getBytes("UTF-8"));
        BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
        StringBuilder resp = new StringBuilder();
        String line; while ((line = br.readLine()) != null) resp.append(line);
        return resp.toString();
    }
}
const crypto = require('crypto');
const axios = require('axios');
const querystring = require('querystring');

const appId = '{YOUR_APP_ID}';
const apiKey = '{YOUR_API_KEY}';
const params = { app_id: appId, out_trade_no: '20240101123456' };
const sortedKeys = Object.keys(params).sort();
const signStr = sortedKeys.map(k => `=`).join('&') + '&key=' + apiKey;
params.sign = crypto.createHash('md5').update(signStr).digest('hex').toUpperCase();

axios.post('{BASE_URL}/v1/transactions/orderid.html', querystring.stringify(params))
    .then(res => console.log(res.data));
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Security.Cryptography;
using System.Text;

var appId = "{YOUR_APP_ID}";
var apiKey = "{YOUR_API_KEY}";
var paramList = new List<KeyValuePair<string, string>> {
    new("app_id", appId),
    new("out_trade_no", "20240101123456"),
};
paramList.Sort((a, b) => string.Compare(a.Key, b.Key, StringComparison.Ordinal));
var signStr = string.Join("&", paramList.Select(p => $"{p.Key}={p.Value}")) + "&key=" + apiKey;
using var md5 = MD5.Create();
var sign = BitConverter.ToString(md5.ComputeHash(Encoding.UTF8.GetBytes(signStr))).Replace("-","").ToUpper();
paramList.Add(new("sign", sign));

using var client = new HttpClient();
var resp = await client.PostAsync("{BASE_URL}/v1/transactions/orderid.html", new FormUrlEncodedContent(paramList));
Console.WriteLine(await resp.Content.ReadAsStringAsync());
package main

import (
    "crypto/md5"
    "fmt"
    "io"
    "net/http"
    "net/url"
    "sort"
    "strings"
)

func main() {
    appId := "{YOUR_APP_ID}"
    apiKey := "{YOUR_API_KEY}"
    params := url.Values{}
    params.Set("app_id", appId)
    params.Set("out_trade_no", "20240101123456")
    keys := make([]string, 0)
    for k := range params { keys = append(keys, k) }
    sort.Strings(keys)
    var parts []string
    for _, k := range keys { parts = append(parts, k+"="+params.Get(k)) }
    signStr := strings.Join(parts, "&") + "&key=" + apiKey
    sign := fmt.Sprintf("%X", md5.Sum([]byte(signStr)))
    params.Set("sign", sign)

    resp, _ := http.PostForm("{BASE_URL}/v1/transactions/orderid.html", params)
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}