Skip to content

服务端 API

通过 uTools 的服务端 API,可以将你的应用和 uTools 用户关联,实现帐号互通、接收支付通知、查询用户支付记录等,为保护密钥安全,请仅在服务端调用接口。

公共定义

返回状态码

状态码说明
200成功
400客户端错误
401位置用户(sign 错误)
403无权限访问(timestamp 过期)
404未找到对应插件
422请求参数校验失败
500uTools 暂时无法提供服务

获取用户基础信息

此接口用于获取 uTools 用户的基础信息、验证用户真实性,与第三方系统进行帐号打通,实现系统间免登录跳转等。

接口定义

http
GET https://open.u-tools.cn/baseinfo
Accept: application/json

请求参数

参数名类型必填说明
plugin_idstring插件 ID
access_tokenstring用户登录凭证,点击查看获取方式
timestampstring请求时间戳(秒),误差需小于 10 分钟
signstring签名,详见签名算法

响应数据

状态200时返回

json
{
  "resource": {
    "avatar": "https://res.u-tools.cn/assets/avatars/eZCBIawAkspLw8Xg.png",
    "member": 1, // 是否 uTools 会员(0: 否,1: 是)
    "nickname": "却步.",
    "open_id": "00a50cd81c37c4e381e8161b2d762158", // uTools 用户 ID, 对于此插件应用不变且唯一
    "timestamp": 1624329616
  },
  "sign": "4dbf21a9d5a0f0e3906a0180522fd6393b4e91f738d57cafddf309afc6c547bb" // 签名算法与 1.3 相同
}

其他状态时返回

json
{
  "message": "The given data was invalid.", // message 字段始终存在
  "errors": {
    // 可能没有详细错误信息
    "access_token": ["access token 必须是 32 个字符。"]
  }
}

调用步骤

  1. 在客户端获取用户登录凭证 access_token,通过utools.fetchUserServerTemporaryToken获取

  2. 服务端签名算法

  • 对请求参数按参数名升序排序
  • 对参数内容进行 url_encode 编码后,组合成 URL 参数形式的字符串,如:access_token=aaaaaaa&plugin_id=ccccc&timestamp=1624329435
  • 使用 HMAC 方法对字符串生成带有密钥的哈希值,得到签名
php
$params = [
  "plugin_id" => "zueadppw", // 可在开发者插件应用中获得
  "access_token" => "user access_token 32位",
  "timestamp" => "1624329435",
];
// 1. 按照键名对数组进行升序排序
ksort($params);
// 2. 生成 URL-encode 之后的请求字符串
$str = http_build_query($params);
// 3. 使用 HMAC 方法生成带有密钥的哈希值
$secret = "your secret 32位"; // secret 在开发者插件应用中通过重置获取
$sign = hash_hmac("sha256", $str, $secret);
js
const crypto = require("crypto");
const params = {
  plugin_id: "zueadppw", // 可在开发者插件应用中获得
  access_token: "user access_token 32位",
  timestamp: "1624329435",
};
// 1. 按照键名对数组进行升序排序
const keys = Object.keys(params).sort();
const sortedParams = keys.reduce((acc, key) => {
  acc[key] = params[key];
  return acc;
}, {});
// 2. 生成 URL-encode 之后的请求字符串
const str = new URLSearchParams(sortedParams).toString();
// 3. 使用 HMAC 方法生成带有密钥的哈希值
const secret = "your secret 32位"; // secret 在开发者插件应用中通过重置获取
const sign = crypto.createHmac("sha256", secret).update(str).digest("hex");
  1. 发起请求
bash
curl --location --request GET 'https://open.u-tools.cn/baseinfo' \
--header 'Content-Type: application/json' \
--data-raw '{
  "plugin_id": "zueadppw", // 可在开发者插件应用中获得
  "access_token": "user access_token 32位",
  "timestamp": "1624329435",
  "sign": "xxx"
  }'
php
$ch = curl_init();
$url = "https://open.u-tools.cn/baseinfo?" . http_build_query($params);
$headers = array(
  "Content-Type: application/json",
  "Accept: application/json",
)
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$response = curl_exec($ch);
if (!curl_errno($ch)) {
  $json = json_decode($response, true);
  echo $json;
}
curl_close($ch);
js
const fetch = require('node-fetch')
const params = {
  plugin_id: "zueadppw", // 可在开发者插件应用中获得
  access_token: "user access_token 32位",
  timestamp: "1624329435",
  sign: "xxx"
}
fetch('https://open.u-tools.cn/baseinfo?' + new URLSearchParams(params), {
  method: 'GET',
  headers: {
    'Content-Type': 'application/json'
  },
).then(res => res.json()).then(data => {
  console.log(data)
})

支付订单查询接口

此接口用于主动查询订单支付状态。

接口定义

http
GET https://open.u-tools.cn/payments/record
Accept: application/json

请求参数

参数名类型必填说明
plugin_idstring插件 ID
out_order_idstring第三方订单 ID
timestampint时间戳(秒),误差需小于 10 分钟
signstring签名,详见签名算法

响应数据

状态200时返回

json
{
  "resource": {
    "attach": "", // 附加数据
    "body": "会员1年", // 支付内容
    "created_at": "2021-06-18 16:42:16", // 订单生成时间
    "goods_id": "6n193s7P95p9gA13786YkwQ5oxHpVW4f", // 商品ID
    "open_id": "a331127d654761ac91d086b942aae7b6", // uTools 用户 ID
    "order_id": "KMFSOZt5cMe5A0ClkdCAAyPasyXZJzP6", // uTools 订单号
    "out_order_id": "123456", // 外部订单号
    "paid_at": "", // 用户支付时间
    "pay_fee": 1, // 支付金额(分)
    "plugin_id": "FFFFFFFF",
    "status": 0, // 是否支付(0: 未支付,10: 已支付)
    "timestamp": 1624346603 // 请求发送时间戳
  },
  "sign": "dbb3d05f6e794ca3b2bc2fa7ef45c3f7cd6a3b20c601b37317863b67998d535e"
}

创建商品接口

此接口用于动态创建商品,主要解决不固定金额商品问题,一般为一次性使用,通过此 API 创建的商品不会出现在开发者工具的商品列表中

接口定义

http
POST https://open.u-tools.cn/goods
Accept: application/json

请求参数

参数名类型必填说明
plugin_idstring插件 ID
access_tokenstring用户登录凭证,点击查看获取方式
timestampint时间戳(秒),误差需小于 10 分钟
signstring签名,点击查看签名方式

响应数据

json
{
  "message": "ZyxrbSpWBH360pSWG0ueYI3rKSWXMcic"
}

用户支付成功回调接口

当用户通过 uTools 在你的插件应用内完成支付,且在开发者工具中配置了回调地址,在收到付款时,会将信息推送到配置的回调地址。

接口定义

此处的接口定义指的是开发者工具中配置的回调地址,将会以 POST 方式推送数据到开发者工具中配置的回调地址。

http
POST /<*api_path>
Content-Type: application/json

请求参数

此处的请求参数指的是将对开发者工具中配置的回调地址发起 POST 请求时,会被携带的参数。

json
{
  "resource": {
    "attach": "", // 附加数据
    "body": "支付内容", // 支付内容
    "created_at": "2021-06-18 16:42:16", // 订单生成时间
    "goods_id": "xxx", // 商品ID
    "open_id": "xxx", // uTools 用户 ID
    "order_id": "xxx", // uTools 订单号
    "out_order_id": "123456", // 外部订单号
    "paid_at": "2021-06-18 16:42:36", // 用户支付时间
    "pay_fee": 1, // 支付金额(分)
    "plugin_id": "FFFFFFFF",
    "status": 10, // 是否支付(0: 未支付,10: 已支付)
    "timestamp": 1624346603 // 请求发送时间戳
  },
  "sign": "xxx"
}

注意事项

  1. 当处理完成后,请返回字符串 SUCCESS
  2. 如果返回值为其他,uTools 会延时后再次通知,最多通知 5 次,时间间隔 [15, 30, 60, 300, 600] 秒。
  3. 通知最长等待 10 秒。
  4. 避免消息伪造,请务必验证 sign,签名方式与获取用户基础信息接口 1.3 一致