强大、稳定、易用的API接口,让您快速对接虚拟商品采购能力
毫秒级响应,单接口QPS支持1000+,99.99%可用性保障
签名验证防篡改,HTTPS加密传输,IP白名单控制
详细的接口文档,在线调试工具,多语言SDK示例
专属技术支持,7x12小时在线,快速响应您的问题
| 项 | 说明 |
|---|---|
| 网关地址 | https://api.aimaika.com/v1 |
| 字符编码 | UTF-8 |
| 请求方式 | HTTP POST / GET |
| 响应格式 | JSON |
| 签名算法 | MD5 |
{
"code": 200,
"message": "success",
"data": {
// 业务数据
}
}
// 参数示例 appid: "10001" product_id: "1001" mobile: "13800138000" timestamp: "1620000000" // 1. 排序后拼接 stringA = "appid=10001&mobile=13800138000&product_id=1001×tamp=1620000000" // 2. 拼接密钥 stringSignTemp = stringA + "&key=您的AppSecret" // 3. MD5签名 sign = MD5(stringSignTemp).toUpperCase()
function generateSign($params, $appSecret) {
ksort($params);
$stringA = '';
foreach ($params as $k => $v) {
if ($k != 'sign' && $v != '') {
$stringA .= $k . '=' . $v . '&';
}
}
$stringSignTemp = rtrim($stringA, '&') . '&key=' . $appSecret;
return strtoupper(md5($stringSignTemp));
}
/api/goods/list
| 参数名 | 必填 | 类型 | 说明 |
|---|---|---|---|
| appid | 是 | string | 分配的应用ID |
| timestamp | 是 | int | 当前时间戳(10位) |
| category | 否 | string | 商品分类:video/music/game等 |
| sign | 是 | string | 签名值 |
{
"code": 200,
"message": "success",
"data": [
{
"id": "1001",
"name": "腾讯视频VIP会员月卡",
"price": "15.00",
"category": "video",
"stock": 99999,
"status": 1
}
]
}
/api/order/create
| 参数名 | 必填 | 类型 | 说明 |
|---|---|---|---|
| appid | 是 | string | 分配的应用ID |
| product_id | 是 | string | 商品ID |
| mobile | 是 | string | 接收手机号 |
| quantity | 是 | int | 购买数量 |
| out_trade_no | 是 | string | 商户订单号 |
| notify_url | 否 | string | 回调通知地址 |
| timestamp | 是 | int | 当前时间戳 |
| sign | 是 | string | 签名值 |
{
"code": 200,
"message": "success",
"data": {
"order_id": "AM2024010100001",
"out_trade_no": "您的订单号",
"product_name": "腾讯视频VIP月卡",
"price": "15.00",
"status": "success",
"cards": [
{"card_no": "AMXXXXXXXX", "card_pwd": "XXXXXXXX"}
]
}
}
当订单状态发生变化时,系统会向您设置的notify_url发送POST回调通知。
| 参数名 | 类型 | 说明 |
|---|---|---|
| order_id | string | 平台订单号 |
| out_trade_no | string | 商户订单号 |
| status | string | 订单状态:success/fail |
| cards | array | 卡密列表 |
| timestamp | int | 通知时间戳 |
| sign | string | 签名值,用于验证 |
处理成功后请输出字符串:success,否则系统会尝试多次重发
| 错误码 | 状态 | 说明 |
|---|---|---|
| 200 | 成功 | 请求成功 |
| 400 | 参数错误 | 请求参数不完整或格式错误 |
| 401 | 签名错误 | 签名验证失败,请检查签名算法 |
| 402 | 余额不足 | 账户余额不足,请充值 |
| 403 | IP受限 | 请求IP不在白名单中 |
| 404 | 商品不存在 | 商品ID错误或已下架 |
| 405 | 库存不足 | 商品库存不足 |
| 500 | 系统错误 | 服务器内部错误,请稍后重试 |
| 步骤 | 操作 | 链接入口 |
|---|---|---|
| 1 | 开发者登录91卡券开放平台,创建应用申请AppId | 应用列表 |
| 2 | 在应用管理中获取AppSecret,配置推送URL和回调URL | 应用管理 |
| 3 | 商家在授权页面输入AppId进行授权,获取AccessToken | 商家授权 |
| 4 | 使用Token + AppSecret签名,调用各API接口 | API网关地址 |
| 项 | 说明 |
|---|---|
| 网关地址 | https://gw-api.agiso.com/acpr/ |
| API网关 | https://gw-api.agiso.com/ |
| 授权入口 | https://mai.91kami.com/#/open/authorize |
| 字符编码 | UTF-8 |
| 请求方式 | HTTP POST |
| 响应格式 | JSON |
| 签名算法 | MD5 |
| 调用频率 | 20次/秒 |
调用任何API都必须把以下参数添加到HTTP头部:
Authorization: Bearer {AccessToken}
ApiVersion: 1
Content-Type: application/x-www-form-urlencoded
| 参数名 | 必选 | 类型 | 说明 |
|---|---|---|---|
| timestamp | 是 | int | 当前时间戳(秒级),误差不超过10分钟 |
| sign | 是 | string | API输入参数签名结果 |
// 示例参数
const params = {
pageNo: "1",
pageSize: "20",
timestamp: 1468476350
};
// 1. 按键名ASCII排序
// 排序后顺序: pageNo, pageSize, timestamp
// 拼接后: pageNo1pageSize20timestamp1468476350
// 2. 前后加上AppSecret
const signString = AppSecret + "pageNo1pageSize20timestamp1468476350" + AppSecret;
// 3. MD5签名
const sign = md5(signString).toLowerCase();
// 结果示例: 935671331572ebf7f419ebb55ea28558
function generate91KamiSign(params, appSecret) {
// 1. 按参数名称ASCII排序
const keys = Object.keys(params).sort();
// 2. 拼接参数名和参数值
let query = appSecret;
for (const key of keys) {
if (key !== 'sign' && params[key] !== '') {
query += key + params[key];
}
}
query += appSecret;
// 3. MD5加密(使用blueimp-md5库)
return md5(query).toLowerCase();
}
// 使用示例
const params = {
pageNo: "1",
pageSize: "20",
timestamp: Math.floor(Date.now() / 1000)
};
const sign = generate91KamiSign(params, "你的AppSecret");
function generate91KamiSign($params, $appSecret) {
ksort($params);
$query = $appSecret;
foreach ($params as $key => $value) {
if ($key != 'sign' && $value !== '') {
$query .= $key . $value;
}
}
$query .= $appSecret;
return md5($query);
}
| 接口方法 | 说明 |
|---|---|
Trade/LogisticsDummySend |
更新订单发货状态(虚拟发货) |
Trade/FullinfoGet |
获取单个订单详情 |
Trade/SoldGet |
获取卖出的交易订单列表 |
Item/StockGet |
查询商品库存 |
Item/CardListGet |
获取卡密列表 |
Item/CardAdd |
添加卡密 |
// JavaScript调用示例
async function call91KamiApi(apiMethod, bizParams, accessToken, appSecret) {
const url = `https://gw-api.agiso.com/acpr/${apiMethod}`;
const params = {
...bizParams,
timestamp: Math.floor(Date.now() / 1000)
};
params.sign = generate91KamiSign(params, appSecret);
const formData = new URLSearchParams();
for (const key in params) {
formData.append(key, params[key]);
}
const response = await fetch(url, {
method: 'POST',
headers: {
'Authorization': 'Bearer ' + accessToken,
'ApiVersion': '1',
'Content-Type': 'application/x-www-form-urlencoded'
},
body: formData
});
return await response.json();
}
// 调用示例
const result = await call91KamiApi(
'Trade/SoldGet',
{ pageNo: '1', pageSize: '20' },
'你的AccessToken',
'你的AppSecret'
);