1. 开户/授权
星驿支付文档中心(dev)
  • 文档说明
    • 阅读对象
    • 版本说明
  • 术语
    • 支付模式
    • 名词解释
  • 接口规则
    • 协议规则
    • 安全规范
  • 星账云管家
    • 星账云管家
    • 功能开通
      • 功能开通(XZY001)
      • 编辑上传付款凭证(XZY002)
      • 编辑(XZY003)
      • 修改生效状态(XZY004)
      • 查询详情信息(XZY005)
      • 产品开通审核通知(XZY006)
    • 公共接口
      • 上传文件(XZY013)
    • 分账
      • 交易
        • 订单查询(XZY015)
        • 分账结果回调(XZY016)
        • 分账撤销退回(XZY017)
        • 分账合并入账电子回单下载(XZY039)
        • 分账结算电子回单下载(XZY037)
        • 余额查询接口(XZY041)
        • 分账(XZY014)
      • 客户管理
        • 分账授权申请接口-收单统一结算(XZY043)
        • 新增客户(XZY018)
        • 审核通知(XZY019)
        • 合作状态调整(XZY020)
        • 查询分账客户信息(XZY021)
        • 替换客户结算卡(XZY022)
        • 编辑客户(XZY023)
        • 批量分账授权申请接口-收单统一结算(XZY044)
        • 批量查询分账客户信息(XZY-001-001)
        • 解约/重启签约(XZY-001-002)
    • 归集
      • 开户/授权
        • 归集授权申请接口-收单统一结算(XZY037)
          POST
        • 审核通知(XZY025)
          POST
        • 合作状态调整(XZY026)
          POST
        • 查询归集客户信息(XZY027)
          POST
        • 替换结算卡(XZY028)
          POST
        • 编辑信息(XZY029)
          POST
      • 交易
        • 订单查询(XZY031)
        • 归集结果回调(XZY032)
        • 归集撤销退回(XZY033)
        • 归集结算电子回单下载(XZY038)
        • 归集合并入账电子回单下载(XZY040)
        • 余额查询接口(XZY042)
        • 归集(XZY030)
    • 提现
      • 提现电子回单下载(XZY040)
      • 提现订单查询(XZY035)
      • 提现(XZY036)
      • 结算回调通知(XZY050)
    • 账户
      • 结算资金流水查询(XZY047)
      • 结算卡资金流水查询(XZY049)
  1. 开户/授权

审核通知(XZY025)

POST
/客户审核通知
1.处理成功code需返回{"code": "000000","msg": "成功","data":""}
2.mainCustomerId是星管家分账产品管理员,开通分账功能返回
3.对接异步通知需提前提供异步通知地址用于通知配置,网络开通
4.返回报文处理如下

异步返回结果验签#

假设接收到通知的示例如下:
注意:以下示例报文仅供参考,实际返回的详细报文请以实际返回为准。
{"agetId":"61000000103774","pdata":"O619w1fPFR76cKt1QVastYzxm7qdxaS2JnlhZG0WFLFXV3atb1WT8uuCwRgqRhM5sUPGE8DyKgHI+rhfDfIKoGdMNx97oftvdRM11QTlDnldD9T9y//k6OPKWNvCZx6x/tOYYwta550aqsqC8hYRAZdPhZymuF7ydi2Xu0VHOMbkpYBAaz4l0vZvUGxzJoImwDiPB8jZP8Ri7bltVGfkwGlGOSjcwJMqYlG4c7U49jgoDtgs051z54yRDjpCEWmu5YkavkQhqHaj5yg2zltPrbhztY/X5WZ1EGZgt1EtP7hZ9D7DSpdyTjWa9yZeQNY0zn7i9aAM7hA8yhITXEcpFWz8sb7ZY9zBVkmXOfqRl+mek7DJ4CwRNjolraY4kRq9tIVJYlA/2SfkNZEABa+vhwMzy3CChoQNdLgf8T2rq/Rv03x8HW39G9YYzkONZnmofXylLy5sWqFnGlSQu3y7sORcIkBjvPL2CQfoPNWKZ7MPY9vXzlXCNuxNzTYzeJ0uK4sITT0PZ9yKWfFFfJWY//kojPnhXkEI2f28T9V5FPKVfrv5637yG4MiqA0Mqn1eKBMQ5b8guqNUQcAwdqbtikPLXzWDCPXPG2oXaWE0Q9slJgDCOFIU4Nx/E3ee1mEpo6ywyyEQLIi0SWouM4MrIek6gGGtIg5f7R2M6Brk1zRpN12V4FybRPFr2O6uE23GlWUYkj/8bGrPaEIMFLn6PeK80T6WMtRiN3coC4Z6yInK3cBQAPKpZe51FyYEGdyEjQ42fwmNlKW1AV95Lz/0PQLLEVUP14AQs68XgB4jQI0mCBbFgbYoRZkmuG537KmZEy48r2E0nWImI/VLym2JEbAKf/GCmrDcVcFqPCQqP++6CFFDEKI1yepVZizFjUMQvK6vYAgQuRNeMI+dHiioIZZFJXdj7AJOhNYRnNInFZlRVcuvFr7O8Lp/TZwXe7HuFjnanYXPvdETsvtn3sXzuc/qClyp9TWbd4fE8/g5aHa9aqOAIzKst7ueRPZw3kxpjYJ9z/MiEDE3+O+UC5zqIZ/Zv8KpPwWmAjB0B3AY3jq3Aikspc2ypA3XISYfLrQ7pnNTIC+9hIrp0mOQE+qrzo0fk47n+l5HxbC2LIfm4N9tVjc+ZNSWmT4j2DNUTq1MLq7S4FRgG5HnlpUfyUl3meG/0XxkFVg/E7BISaCClgW9kNy1FKmZWGa8+Ygi0I4PpX3xaUOFkaxyHGorSmQm/0PtSD+dGo5vp1ER7ZROL/EjVNNijuFD7UkE/XmD/vNdc5aLgZQvFws93BKfzo+A5KbrK1oW/4cCYBQV2HjhTqD0ycjow7UDs1Nh44CpA6o06rakfl5tBXvCjxhQdVtfvVsEsJ9UthSHNx5et7vbxd1NWZhtdWRRP6aTQeUCCCRqFburI53t/xNNea0F3BJ1L5UZ5u94eEl8f+wLdV21np52pDDOd5XOCtBwVFzuveumQfn3mlleB4hxTKSt/JLH1rQgLXS83JYnpjkxtmJLAQ7cWzYoPDWSzf7bdC0KODC2usokUR9RNVL5yMm6uBv12+8xduuC8zBrgEjsBTEeM1ulLz1k5/oo0Kvv/ITNdaHiD+XcEo+PMElQKPTgH/Inth7DZOa5N3hR/jXYTMQQIwGfJ11uKZ/TBCKSNApZGNl87PKqTThN+aEjM4yc4SFx2hPQLAkD5PG4qqyGGWRykcw="}
第一步:将加密参数(pdata)使用 RSA 公钥解密成明文:
{"auditRemark":null,"auditStatus":"1","authId":"8496379813794816000","custId":"2
0000000001203","customerId":"20000000001203","isManage":"0","mainCustId":"60000001057073","operationType":"0","sign":"d9FmeZoeoRblzvbqYywCQWBmuXR5x5B1oTS/csZx0L3OWBZK7NYccFSo3GXIGjr9I
NU5V8ZdSfTf157P4SWk81AJyieJ9WRAYuhMkcLBweofyPqv1coox4lHF/1wYNwun8fBo7jxjs/fCOEaGFRfm0BIO1nDduID8ciaPB1QUYDYpajeZanql7y/epBKucMW5Hy/C5v6gtNVUEz/rk2yuTkSUkk5ttjDC6ZYeDSBWRQ4SjTm4Wkb53G/
VegJzm0Z6hqS8YNNHMstzd94eC8/5acA4iMs4gTXAvHdulEiiz7KZYQzmfAjToVquh+Bf/23U6szDkcNV0jpBI0RK6S4MA==","signId":"8496379815405428736"}
第二步:在明文参数列表中,除去 sign 参数外,其他参数均为待验签的参数。
第三步:将剩下明文参数进行字典排序,组成字符串,得到拼接串:
auditRemark=null&auditStatus=1&authId=8496485944751955968&custId=20000000001206&customerId=20000000001206&isManage=0&mainCustId=60000001057073&operationType=0&signId=8496485947201429504
第四步:将拼接串使用 SHA256 编码,生成字符串1:
00afe4449dd26aa727bd7354e848219aeda2c48caee7dfe96b30ff8498040437
第五步:将明文中签名参数(sign)使用 RSA 公钥解密为字符串2。
第六步:将字符串1和字符串2进行比较,相同即为验签通过,反之验签失败。
第7步:处理成功返回{"code": "000000","msg": "成功","data":""}。

异步通知验签Demo-java#

公钥解签demo
展开查看完整demo
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import lombok.extern.log4j.Log4j2;
import org.apache.commons.lang3.ArrayUtils;
import sun.misc.BASE64Decoder;

import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import java.security.InvalidKeyException;
import java.security.KeyFactory;
import java.security.NoSuchAlgorithmException;
import java.security.PublicKey;
import java.security.spec.X509EncodedKeySpec;
import java.util.TreeMap;


/**
 * 公钥解签
 */
@Log4j2
public class RUtil {
    /**
     * 公钥解密过程
     *
     * @param key  公钥
     * @param data 密文数据
     * @return 明文
     * @throws Exception 解密过程中的异常信息
     */
    public static String decrypt(String key, String data) throws Exception {
        if (key == null) {
            throw new Exception("解密公钥为空, 请设置");
        }
        PublicKey publicKey = getPublicKey(key);
        byte[] cipherData = Base64Util.decode(data);
        Cipher cipher = null;
        try {
            // 使用默认RSA
            cipher = Cipher.getInstance("RSA");
            cipher.init(Cipher.DECRYPT_MODE, publicKey);

            byte[] buf = (byte[]) null;
            for (int i = 0; i < cipherData.length; i += 256) {
                byte[] doFinal = cipher.doFinal(ArrayUtils.subarray(cipherData, i, i + 256));
                if(buf == null) {
                    buf = doFinal;
                } else {
                    buf = addBytes(buf,doFinal);
                }
            }
            return new String(buf);
        } catch (NoSuchAlgorithmException e) {
            throw new Exception("无此解密算法");
        } catch (NoSuchPaddingException e) {
            e.printStackTrace();
            return null;
        } catch (InvalidKeyException e) {
            throw new Exception("解密公钥非法,请检查");
        } catch (IllegalBlockSizeException e) {
            throw new Exception("密文长度非法");
        } catch (BadPaddingException e) {
            throw new Exception("密文数据已损坏");
        }
    }

    /**
     * 数组拼接
     * @param data1 数组1
     * @param data2 数组2
     * @return
     */
    public static byte[] addBytes(byte[] data1, byte[] data2) {
        byte[] data3 = new byte[data1.length + data2.length];
        System.arraycopy(data1, 0, data3, 0, data1.length);
        System.arraycopy(data2, 0, data3, data1.length, data2.length);
        return data3;
    }

    /**
     *  验证sign
     *  plainText 返回数据报文
     *  publicKey 公钥
     * @return
     */
    public static boolean checkSign(String plainText,String publicKey) throws Exception {
        TreeMap<String ,Object> map = JSONObject.parseObject(plainText, new TypeReference<TreeMap<String, Object>>(){});
        System.out.println(JSONObject.toJSONString(map));
        StringBuilder sb = new StringBuilder();
        String sign = "";
        for (String key : map.keySet()){
            if("sign".equals(key)){
                sign =(String) map.get(key);
                continue;
            }
            sb.append(key).append("=").append(map.get(key)).append("&");
        }
        String res = sb.substring(0,sb.lastIndexOf("&"));
        log.info("拼接字符串:"+res);
        String sha256 = SHA256.getSHA256(res);
        log.info("拼接串的SHA256:"+sha256);
        String decodeSha256 = decrypt(publicKey,sign);
        log.info("sign解密的SHA256:"+decodeSha256);

        return sha256.equals(decodeSha256);
    }

    /**
     * 得到公钥
     *
     * @param key 密钥字符串(经过base64编码)
     * @throws Exception
     */
    public static PublicKey getPublicKey(String key) throws Exception {
        byte[] keyBytes;
        keyBytes = new BASE64Decoder().decodeBuffer(key);
        X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBytes);
        KeyFactory keyFactory = KeyFactory.getInstance("RSA");
        PublicKey publicKey = keyFactory.generatePublic(keySpec);
        return publicKey;
    }
}
Base64工具类
展开查看完整demo
SHA256工具类
展开查看完整demo

请求参数

Body 参数application/json

示例
{
    "agetId": "string",
    "pdata": {
        "mainCustId": "string",
        "authId": "string",
        "signId": "string",
        "custId": "string",
        "isManage": "string",
        "operationType": "string",
        "auditStatus": "string",
        "auditRemark": "string",
        "sign": "string"
    }
}

请求示例代码

Java
Shell
C#
PHP
Python
请求示例请求示例
Java
Shell
C#
PHP

返回响应

🟢200成功
application/json
Bodyapplication/json

示例
{
    "code": "string",
    "msg": "string"
}
修改于 2026-01-12 02:06:29
上一页
归集授权申请接口-收单统一结算(XZY037)
下一页
合作状态调整(XZY026)
Built with