Skip to content

通用接口说明

通用请求是商户侧调用平台各业务接口都需要的参数,当前版本采用HTTPS请求头部信息的方式。

回调IP地址

  • 108.137.64.70

金额单位

Rupiah(元)

请求正式域名

参数是否必须内容
API endpointhttps://api-gateway.gsxpay.com/api

请求头信息

参数是否必须类型说明示例
AuthorizationString调用生成公共访问 令牌接口,获取 token,拼接成 Bearer {token}Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUz I1NiJ9.eyJtZXJjaGFudE5hbWUiOi J0ZXN0IiwiZXhwIjoxNzE2ODg4M TMxfQ.ec7kJArUSySYeB982LQU W3m90rIcyYvA9UnoWyRL2k8

API信息说明

参数说明
ApiKey生成token必须的参数
ApiSecret生成token必须的参数
MerchantKey用于验证我方回调数据签名

生成公共访问令牌(JWT TOKEN) ✅

INFO

用途:身份验证

请求URL:/auth/token

请求方式:POST

请求参数

参数必选类型说明示例
clientIdString用于授权生成公共令牌的key,取值同'API信息说明'中的ApiKey123456789
clientSecretString授权生成公共令牌的密码,取值同'API信息说明'中的ApiSecretabcdefgh123

请求示例

json
{
  "clientId": "123456789",
  "clientSecret": "abcdefgh123"
}

响应参数

参数类型说明示例
tokenString客户端唯一令牌,将此 令牌用于其他 APIeyJ0eXAiOiJKV1QiLCJhbGci OiJIUzI1NiJ9.eyJtZXJjaGFud E5hb923KSJI30IiwiZXhwIjox NzE2NjI2NTQ3fQ.6Katm1V YrnzMFrb0g7ZsjF3FeUW8X eEgK4_nX0oW23
expiredAtString令牌有效期2024-10-01 15:19:40

响应信息

json
{
  "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJtZXJjaGFudE5hb923KSJI30IiwiZXhwIjoxNzE2NjI 2NTQ3fQ.6Katm1VYrnzMFrb0g7ZsjF3FeUW8XeEgK4_nX0oW23",
  "expiredAt": "2024-10-01 15:19:40"
}

回调签名方法

INFO

用途:回调验签

签名规则:

将待签名字符串转换为TreeMap,按 key=value 形式拼接,并按ASCII升序排序,最后再加上 merchantKey ,进行MD5加密。将得到的签名与回调数据中的sign进行比对,一致则可以通过

注意: 待签名字符串不包括sign, 空字符串参与签名, 参数之间无任何符号拼接

仅最后的merchantKey字段前需要拼接&

示例:amount=10000.00clientId=xxxorderId=xxxpaidAmount=10000.00payMethod=203001serviceFee=5050.00status=SUCCESStransactionId=CI12345678999999&merchantKey=123456

签名方法

java
import cn.hutool.crypto.digest.DigestUtil;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.alibaba.fastjson2.TypeReference;

import java.util.TreeMap;

public class SignUtil {

  private static String getMerchantKey() {
    return "123456";
  }

  public static boolean verifySign(Object object, String sign) {
    String encode = encode(object, getMerchantKey());
    return encode.equalsIgnoreCase(sign);
  }

  public static String encode(Object o, String merchantKey) {
    TreeMap<String, String> map = JSON.parseObject(JSON.toJSONString(o), new TypeReference<TreeMap<String, String>>() {
    });
    map.remove("sign");

    StringBuilder sb = new StringBuilder();
    map.forEach((k, v) -> sb.append(k).append("=").append(v));
    sb.append("&merchantKey=").append(merchantKey);
    String encode = sb.toString();
    return DigestUtil.md5Hex(encode);
  }

  public static void main(String[] args) {
    String body = "{\"amount\":10000.00,\"clientId\":\"xxx\",\"orderId\":\"xxx\",\"paidAmount\":10000.00,\"payMethod\":\"203001\",\"serviceFee\":5050.00,\"sign\":\"aa7ae61151de42d239386ea9892aee7e\",\"status\":\"SUCCESS\",\"transactionId\":\"CI12345678999999\"}\n";
    JSONObject object = JSON.parseObject(body);
    String sign = object.getString("sign");
    System.out.println(verifySign(object, sign));
  }
}

通用返回

当接口请求处理被支付平台接收后,HTTPS状态码为200表示请求成功;非200表示请求失败。

通用错误码表

具体错误原因,请查看message返回的信息

响应参数 - errorType

错误编码可能的情况
AUTH必填参数未传,参数错误或不合法
PARAM_ERROR支付方式错误, 金额/限额错误
ORDER订单错误
BALANCE余额不足
RISK风控错误
MERCHANT商户错误
CLIENT_ID_EXIST商户订单号存在
RATE_LIMIT_EXCEEDED请求过于频繁
CHANNEL_NOT_AVAILABLE通道不可用

响应示例

json
{
  "errorType": "AUTH",
  "message": "ClientId: 2025103651364100 not found"
}