法币(卢比)代付下单

# 代码示例

TopPaySignUtil点击获取代码示例

import com.google.gson.Gson;
import java.util.HashMap;
import java.util.Map;

public class LoanOrderCreate {
    //MCH_ID: 商户ID
    //请登录商户后台,点击 个人中心 > 个人信息 在基本信息中获取商户ID
    private static final String MCH_ID = "S820211021094748000001";
    private static final String MCH_PRIVATE_KEY = "MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBAJU8gKFKD0luIYx7X8+JRdCIE0UDBctS6LjXxWLEv/EO7jDBTid6zYP1KmNgpd2DAWWtBFBSQ+gcNwVZZSBHJiSDqVvvJVs2FEbeBvfdv4X93+IYRAXksBasSW5Tpdshbo82pVL4V7wuKCuFLk9UxBHbpQjWAbfyF66RmwIbZD71AgMBAAECgYBjPe7UU2nDDSfmQg0++CyjNjqKRC5QPfxhH6w1uF1kMueXKJWOj42n2RutJpJmsj31nY8m0u4xpsG4HvCu/GGSFhhKZCHLvzp41oY2ubYj9nuFNU//81LycQjulWo2y0UUBY0k2piEt+SwPaiUNbT6nMxNMjlnjRe2okp/3rw+KQJBANG3YlZWoVbCEqzy64bJJLxiPsCA5ErGB0NzRGitq44xkhqGtR8ZZQyVz40pruNa58d73O2xyJSy5+fmZGn4E+sCQQC2LBnguj0CSCKub0mPDcunTTz9V79VXBBZdlB1/YGmRUx2s4sQrJNZS7rL4EqBQ3maIRnG+s+AXCSTfsYrV6CfAkEAxugnVfpelhoGepEAgNuggyivmgfl/2Gpm/jk5l/qOjib+ZrQiQmeBPzGWX4yiSM8eMDrP2sC8r5pJFMp5DRONwJBAJ4n4XuSFJ9jgwCPy3vvzSv9SYLk6E6yM9uHdUlKgoGYzk6Lh6M9QFuY/J49plFdBDiEnj16yCU3WeXXfTJpzB8CQQDMNMR/rIOTE9xGybS3mlQbt22AUnO6XhupWcckEKW4nPGxATwYBQzCY3i/9FTGN0vA+9ZPC2cwHtNxI2kXf3Vp";  // 商户私钥
    private static final String REQ_URL = "https://india-openapi.toppay.asia/cash/newOrder";

    public static void main(String[] args) throws Exception {
        create();
    }

    private static void create() throws Exception {
        //根据接口要求组装参数
        Map<String, String> requestParams = new HashMap<>();
        requestParams.put("merchantCode", MCH_ID);
        requestParams.put("orderNum", "T1642593166888");
        //bankCode是代付需要的分行号编码 不是写死的,要客户手动填入!!!
        requestParams.put("bankCode", "001");
        requestParams.put("bankAccount", "2021071209403321313122");
        requestParams.put("bankUsername", "test-name");
        requestParams.put("orderAmount", "999.56");
        requestParams.put("callback", "https://xxx/yyy");
        requestParams.put("timestamp", "1745377181");

        //参数格式化并计算签名 并将签名值加入到请求参数中
        String source = TopPaySignUtil.paramFormat(requestParams);
        requestParams.put("sign", TopPaySignUtil.sign(MCH_PRIVATE_KEY, source));

        //参数序列化成Json 并发起post请求
        String postJson = new Gson().toJson(requestParams);
        System.out.println("Post Json Params:" + postJson);
        String responseJson = TopPaySignUtil.doPost(REQ_URL, postJson);
        System.out.println("Response Msg:" + responseJson);
    }
}
<?php
require_once 'TopPaySignUtil.php';

class LoanOrderCreate {
    const MCH_ID = 'S820211021094748000001';
    const MCH_PRIVATE_KEY = 'MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBAJU8gKFKD0luIYx7X8+JRdCIE0UDBctS6LjXxWLEv/EO7jDBTid6zYP1KmNgpd2DAWWtBFBSQ+gcNwVZZSBHJiSDqVvvJVs2FEbeBvfdv4X93+IYRAXksBasSW5Tpdshbo82pVL4V7wuKCuFLk9UxBHbpQjWAbfyF66RmwIbZD71AgMBAAECgYBjPe7UU2nDDSfmQg0++CyjNjqKRC5QPfxhH6w1uF1kMueXKJWOj42n2RutJpJmsj31nY8m0u4xpsG4HvCu/GGSFhhKZCHLvzp41oY2ubYj9nuFNU//81LycQjulWo2y0UUBY0k2piEt+SwPaiUNbT6nMxNMjlnjRe2okp/3rw+KQJBANG3YlZWoVbCEqzy64bJJLxiPsCA5ErGB0NzRGitq44xkhqGtR8ZZQyVz40pruNa58d73O2xyJSy5+fmZGn4E+sCQQC2LBnguj0CSCKub0mPDcunTTz9V79VXBBZdlB1/YGmRUx2s4sQrJNZS7rL4EqBQ3maIRnG+s+AXCSTfsYrV6CfAkEAxugnVfpelhoGepEAgNuggyivmgfl/2Gpm/jk5l/qOjib+ZrQiQmeBPzGWX4yiSM8eMDrP2sC8r5pJFMp5DRONwJBAJ4n4XuSFJ9jgwCPy3vvzSv9SYLk6E6yM9uHdUlKgoGYzk6Lh6M9QFuY/J49plFdBDiEnj16yCU3WeXXfTJpzB8CQQDMNMR/rIOTE9xGybS3mlQbt22AUnO6XhupWcckEKW4nPGxATwYBQzCY3i/9FTGN0vA+9ZPC2cwHtNxI2kXf3Vp';
    const REQ_URL = 'https://india-openapi.toppay.asia/cash/newOrder';

    public static function create() {
        $requestParams = [
            'merchantCode' => self::MCH_ID,
            'orderNum' => 'T1642593166888',
            'bankCode' => '001',
            'bankAccount' => '2021071209403321313122',
            'bankUsername' => 'test-name',
            'orderAmount' => '999.56',
            'callback' => 'https://xxx/yyy',
            'timestamp' => '1745377181'
        ];

        $source = TopPaySignUtil::paramFormat($requestParams);
        $requestParams['sign'] = TopPaySignUtil::sign(self::MCH_PRIVATE_KEY, $source);

        $postJson = json_encode($requestParams);
        echo "Post Json Params: $postJson\n";
        $responseJson = TopPaySignUtil::doPost(self::REQ_URL, $postJson);
        echo "Response Msg: $responseJson\n";
    }
}

LoanOrderCreate::create();
?>
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Threading.Tasks;
using Newtonsoft.Json;

class LoanOrderCreate
{
    private const string MCH_ID = "S820211021094748000001";
    private const string MCH_PRIVATE_KEY = "MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBAJU8gKFKD0luIYx7X8+JRdCIE0UDBctS6LjXxWLEv/EO7jDBTid6zYP1KmNgpd2DAWWtBFBSQ+gcNwVZZSBHJiSDqVvvJVs2FEbeBvfdv4X93+IYRAXksBasSW5Tpdshbo82pVL4V7wuKCuFLk9UxBHbpQjWAbfyF66RmwIbZD71AgMBAAECgYBjPe7UU2nDDSfmQg0++CyjNjqKRC5QPfxhH6w1uF1kMueXKJWOj42n2RutJpJmsj31nY8m0u4xpsG4HvCu/GGSFhhKZCHLvzp41oY2ubYj9nuFNU//81LycQjulWo2y0UUBY0k2piEt+SwPaiUNbT6nMxNMjlnjRe2okp/3rw+KQJBANG3YlZWoVbCEqzy64bJJLxiPsCA5ErGB0NzRGitq44xkhqGtR8ZZQyVz40pruNa58d73O2xyJSy5+fmZGn4E+sCQQC2LBnguj0CSCKub0mPDcunTTz9V79VXBBZdlB1/YGmRUx2s4sQrJNZS7rL4EqBQ3maIRnG+s+AXCSTfsYrV6CfAkEAxugnVfpelhoGepEAgNuggyivmgfl/2Gpm/jk5l/qOjib+ZrQiQmeBPzGWX4yiSM8eMDrP2sC8r5pJFMp5DRONwJBAJ4n4XuSFJ9jgwCPy3vvzSv9SYLk6E6yM9uHdUlKgoGYzk6Lh6M9QFuY/J49plFdBDiEnj16yCU3WeXXfTJpzB8CQQDMNMR/rIOTE9xGybS3mlQbt22AUnO6XhupWcckEKW4nPGxATwYBQzCY3i/9FTGN0vA+9ZPC2cwHtNxI2kXf3Vp";
    private const string REQ_URL = "https://india-openapi.toppay.asia/cash/newOrder";

    public static async Task Main()
    {
        await Create();
    }

    private static async Task Create()
    {
        Dictionary<string, string> requestParams = new Dictionary<string, string>
        {
            { "merchantCode", MCH_ID },
            { "orderNum", "T1642593166888" },
            { "bankCode", "001" },
            { "bankAccount", "2021071209403321313122" },
            { "bankUsername", "test-name" },
            { "orderAmount", "999.56" },
            { "callback", "https://xxx/yyy" },
            { "timestamp", "1745377181" }
        };

        var source = TopPaySignUtil.ParamFormat(requestParams);
        requestParams["sign"] = TopPaySignUtil.Sign(MCH_PRIVATE_KEY, source);

        string postJson = JsonConvert.SerializeObject(requestParams);
        Console.WriteLine($"Post Json Params: {postJson}");
        string responseJson = await TopPaySignUtil.DoPost(REQ_URL, postJson);
        Console.WriteLine($"Response Msg: {responseJson}");
    }
}
package main

import (
    "encoding/json"
    "fmt"
)

const (
    MCH_ID          = "S820211021094748000001"
    MCH_PRIVATE_KEY = "MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBAJU8gKFKD0luIYx7X8+JRdCIE0UDBctS6LjXxWLEv/EO7jDBTid6zYP1KmNgpd2DAWWtBFBSQ+gcNwVZZSBHJiSDqVvvJVs2FEbeBvfdv4X93+IYRAXksBasSW5Tpdshbo82pVL4V7wuKCuFLk9UxBHbpQjWAbfyF66RmwIbZD71AgMBAAECgYBjPe7UU2nDDSfmQg0++CyjNjqKRC5QPfxhH6w1uF1kMueXKJWOj42n2RutJpJmsj31nY8m0u4xpsG4HvCu/GGSFhhKZCHLvzp41oY2ubYj9nuFNU//81LycQjulWo2y0UUBY0k2piEt+SwPaiUNbT6nMxNMjlnjRe2okp/3rw+KQJBANG3YlZWoVbCEqzy64bJJLxiPsCA5ErGB0NzRGitq44xkhqGtR8ZZQyVz40pruNa58d73O2xyJSy5+fmZGn4E+sCQQC2LBnguj0CSCKub0mPDcunTTz9V79VXBBZdlB1/YGmRUx2s4sQrJNZS7rL4EqBQ3maIRnG+s+AXCSTfsYrV6CfAkEAxugnVfpelhoGepEAgNuggyivmgfl/2Gpm/jk5l/qOjib+ZrQiQmeBPzGWX4yiSM8eMDrP2sC8r5pJFMp5DRONwJBAJ4n4XuSFJ9jgwCPy3vvzSv9SYLk6E6yM9uHdUlKgoGYzk6Lh6M9QFuY/J49plFdBDiEnj16yCU3WeXXfTJpzB8CQQDMNMR/rIOTE9xGybS3mlQbt22AUnO6XhupWcckEKW4nPGxATwYBQzCY3i/9FTGN0vA+9ZPC2cwHtNxI2kXf3Vp"
    REQ_URL         = "https://india-openapi.toppay.asia/cash/newOrder"
)

func create() {
    requestParams := map[string]string{
        "merchantCode":  MCH_ID,
        "orderNum":      "T1642593166888",
        "bankCode":      "001",
        "bankAccount":   "2021071209403321313122",
        "bankUsername":  "test-name",
        "orderAmount":   "999.56",
        "callback":      "https://xxx/yyy",
        "timestamp":     "1745377181",
    }

    source := paramFormat(requestParams)
    requestParams["sign"] = sign(MCH_PRIVATE_KEY, source)

    postJson, err := json.Marshal(requestParams)
    if err != nil {
        panic(err)
    }
    fmt.Printf("Post Json Params: %s\n", string(postJson))
    responseJson, err := doPost(REQ_URL, string(postJson))
    if err != nil {
        panic(err)
    }
    fmt.Printf("Response Msg: %s\n", responseJson)
}

func main() {
    create()
}
import json
from TopPaySignUtil import TopPaySignUtil


class LoanOrderCreate:
    MCH_ID = 'S820211021094748000001'
    MCH_PRIVATE_KEY = 'MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBAJU8gKFKD0luIYx7X8+JRdCIE0UDBctS6LjXxWLEv/EO7jDBTid6zYP1KmNgpd2DAWWtBFBSQ+gcNwVZZSBHJiSDqVvvJVs2FEbeBvfdv4X93+IYRAXksBasSW5Tpdshbo82pVL4V7wuKCuFLk9UxBHbpQjWAbfyF66RmwIbZD71AgMBAAECgYBjPe7UU2nDDSfmQg0++CyjNjqKRC5QPfxhH6w1uF1kMueXKJWOj42n2RutJpJmsj31nY8m0u4xpsG4HvCu/GGSFhhKZCHLvzp41oY2ubYj9nuFNU//81LycQjulWo2y0UUBY0k2piEt+SwPaiUNbT6nMxNMjlnjRe2okp/3rw+KQJBANG3YlZWoVbCEqzy64bJJLxiPsCA5ErGB0NzRGitq44xkhqGtR8ZZQyVz40pruNa58d73O2xyJSy5+fmZGn4E+sCQQC2LBnguj0CSCKub0mPDcunTTz9V79VXBBZdlB1/YGmRUx2s4sQrJNZS7rL4EqBQ3maIRnG+s+AXCSTfsYrV6CfAkEAxugnVfpelhoGepEAgNuggyivmgfl/2Gpm/jk5l/qOjib+ZrQiQmeBPzGWX4yiSM8eMDrP2sC8r5pJFMp5DRONwJBAJ4n4XuSFJ9jgwCPy3vvzSv9SYLk6E6yM9uHdUlKgoGYzk6Lh6M9QFuY/J49plFdBDiEnj16yCU3WeXXfTJpzB8CQQDMNMR/rIOTE9xGybS3mlQbt22AUnO6XhupWcckEKW4nPGxATwYBQzCY3i/9FTGN0vA+9ZPC2cwHtNxI2kXf3Vp'
    REQ_URL = 'https://india-openapi.toppay.asia/cash/newOrder'

    @staticmethod
    def create():
        request_params = {
            'merchantCode': LoanOrderCreate.MCH_ID,
            'orderNum': 'T1642593166888',
            'bankCode': 'SBIN0001234',
            'payType': '1',
            'bankAccount': '2021071209403321313122',
            'bankUsername': 'test-name',
            'orderAmount': '999.56',
            'callback': 'https://xxx/yyy',
            'timestamp': '1745377181'
        }

        source = TopPaySignUtil.param_format(request_params)
        request_params['sign'] = TopPaySignUtil.sign(LoanOrderCreate.MCH_PRIVATE_KEY, source)

        post_json = json.dumps(request_params)
        print(f"Post Json Params: {post_json}")
        response_json = TopPaySignUtil.do_post(LoanOrderCreate.REQ_URL, post_json)
        print(f"Response Msg: {response_json}")


if __name__ == "__main__":
    LoanOrderCreate.create()
const { TopPaySignUtil } = require('./TopPaySignUtil');

class LoanOrderCreate {
    static MCH_ID = 'S820211021094748000001';
    static MCH_PRIVATE_KEY =`
-----BEGIN PRIVATE KEY-----
MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBAJU8gKFKD0luIYx7X8+JRdCIE0UDBctS6LjXxWLEv/EO7jDBTid6zYP1KmNgpd2DAWWtBFBSQ+gcNwVZZSBHJiSDqVvvJVs2FEbeBvfdv4X93+IYRAXksBasSW5Tpdshbo82pVL4V7wuKCuFLk9UxBHbpQjWAbfyF66RmwIbZD71AgMBAAECgYBjPe7UU2nDDSfmQg0++CyjNjqKRC5QPfxhH6w1uF1kMueXKJWOj42n2RutJpJmsj31nY8m0u4xpsG4HvCu/GGSFhhKZCHLvzp41oY2ubYj9nuFNU//81LycQjulWo2y0UUBY0k2piEt+SwPaiUNbT6nMxNMjlnjRe2okp/3rw+KQJBANG3YlZWoVbCEqzy64bJJLxiPsCA5ErGB0NzRGitq44xkhqGtR8ZZQyVz40pruNa58d73O2xyJSy5+fmZGn4E+sCQQC2LBnguj0CSCKub0mPDcunTTz9V79VXBBZdlB1/YGmRUx2s4sQrJNZS7rL4EqBQ3maIRnG+s+AXCSTfsYrV6CfAkEAxugnVfpelhoGepEAgNuggyivmgfl/2Gpm/jk5l/qOjib+ZrQiQmeBPzGWX4yiSM8eMDrP2sC8r5pJFMp5DRONwJBAJ4n4XuSFJ9jgwCPy3vvzSv9SYLk6E6yM9uHdUlKgoGYzk6Lh6M9QFuY/J49plFdBDiEnj16yCU3WeXXfTJpzB8CQQDMNMR/rIOTE9xGybS3mlQbt22AUnO6XhupWcckEKW4nPGxATwYBQzCY3i/9FTGN0vA+9ZPC2cwHtNxI2kXf3Vp
-----END PRIVATE KEY-----
`;
    static REQ_URL = 'https://india-openapi.toppay.asia/cash/newOrder';

    static async create() {
        const requestParams = {
            merchantCode: this.MCH_ID,
            orderNum: 'T1642593166888',
            bankCode: '001',
            bankAccount: '2021071209403321313122',
            bankUsername: 'test-name',
            orderAmount: '999.56',
            callback: 'https://xxx/yyy',
            timestamp: '1745377181'
        };

        const source = TopPaySignUtil.paramFormat(requestParams);
        requestParams.sign = TopPaySignUtil.sign(this.MCH_PRIVATE_KEY, source);

        const postJson = JSON.stringify(requestParams);
        console.log(`Post Json Params: ${postJson}`);
        const responseJson = await TopPaySignUtil.doPost(this.REQ_URL, postJson);
        console.log(`Response Msg: ${responseJson}`);
    }
}

LoanOrderCreate.create();

# 请求地址

  • 请求方式 : POST
  • 请求地址 : https://india-openapi.toppay.asia/cash/newOrder

# 请求参数

注:所有的参数中,不要填写中文!!! 注:bankCode不是固定值,千万不能写死!!!SBIN0001234 只是案例 注:bankCode就是IFSC,规则是4位大写英文字母和7位数字的组合(前四位必须是大写字母) 注:本接口新增 payTypeupi 字段,老商户不传时按 payType=1(银行卡代付) 处理,签名规则不变,无需任何改动。

参数 必填 描述 示例
merchantCode Y 商户ID,在商户平台获取 S820211021094748000001
orderNum Y 商户订单号 10000001
payType N 出款类型,不传默认为 1
1 = 银行卡代付
2 = UPI 代付
1
bankCode payType=1 时必填 银行编号(IFSC),4 位大写字母 + 7 位数字 SBIN0001234
bankAccount payType=1 时必填 客户银行卡号 1234567890
bankUsername payType=1 时必填 客户名称(UPI 代付无需传) mike
upi payType=2 时必填 收款 UPI VPA 地址 test@ybl
orderAmount Y 订单金额(单位:1卢比) 10000.00
callback Y 回调地址 https://123123.com
timestamp Y 时间戳(秒),取系统实时时间戳 1745377181
sign Y 签名 Yg+ePvTFhiRrARcZKBcRG0l8 ...

签名注意: payTypeupi 也参与签名。签名规则不变(按 key 字母升序,空值/未传的字段会被自动跳过),因此老商户不传这两个字段时签名串与历史一致,无需迁移。

# 请求报文示例

注:bankCode不是固定值,千万不能写死!!!SBIN0001234 只是案例 注:bankCode就是IFSC,规则是4位大写英文字母和7位数字的组合(前四位必须是大写字母)

# 1. 银行卡代付(payType=1,默认)

推荐写法:显式传 payType=1,更清晰、更规范,也方便后续扩展。

{
  "merchantCode": "S820211021094748000001",
  "orderNum": "186888188666",
  "payType": "1",
  "bankCode": "SBIN0001234",
  "bankAccount": "2021071209403321313122",
  "bankUsername": "test cash name",
  "orderAmount": "10000.00",
  "callback": "your notify url",
  "timestamp": "20220101235959",
  "sign": "Yg+ePvTFhiRrARcZKBcRG0l89rqisPIuZQStYqBIwSMPaqwH77qRXI1J+jElOBpa"
}

待签名串示例(按字母升序拼接):

bankAccount=2021071209403321313122&bankCode=SBIN0001234&bankUsername=test cash name&callback=your notify url&merchantCode=S820211021094748000001&orderAmount=10000.00&orderNum=186888188666&payType=1&timestamp=20220101235959

向后兼容说明: 老商户原有请求(不传 payType)会被服务端按 payType=1 处理,签名串里也不会出现 payType 字段(空值跳过),与历史签名完全一致,无需任何改动。新接入或希望规范化的商户建议改为显式传 payType=1

# 2. UPI 代付(payType=2,新增)

⚠ 开通提示:使用 UPI 代付前请先联系您的专属客服开通 UPI 代付通道。未开通通道直接发起 UPI 代付请求会返回失败,开通后即可使用 payType=2 模式下单。

UPI 模式下:必须payType=2upibankCode / bankAccount / bankUsername 不需要传

{
  "merchantCode": "S820211021094748000001",
  "orderNum": "186888188667",
  "payType": "2",
  "upi": "test@ybl",
  "orderAmount": "100.00",
  "callback": "your notify url",
  "timestamp": "1745377181",
  "sign": "Yg+ePvTFhiRrARcZKBcRG0l89rqisPIuZQStYqBIwSMPaqwH77qRXI1J+jElOBpa"
}

待签名串示例(按字母升序拼接,跳过空字段):

callback=your notify url&merchantCode=S820211021094748000001&orderAmount=100.00&orderNum=186888188667&payType=2&timestamp=1745377181&upi=test@ybl

# 响应参数

  • 外层统一返回结构
参数 类型 必填 描述 示例
code int Y 接口响应码 0代表成功,其他的都为失败
message String Y 接口响应信息 返回具体响应信息
data Json Y 接口响应参数 参考如下data字段内部结构
  • data字段内部结构
参数 类型 必填 描述 示例
platOrderNum String Y 平台订单号 PI1453242857400963072

# 响应报文示例

{
  "success": true,
  "code": 0,
  "message": "Success",
  "data": {
    "platOrderNum": "PAY1483771634191044608"
  }
}

# 白名单不匹配

如果返回: {"code":999,"message":"白名单不匹配","data":null},可以做以下简单排查或联系您的客服:

1,查看您的网络IP是否在菜单:【收付款配置->API配置->商户API提现IP白名单】文本内

2,您的网络IP在白名单内,请检查是否在使用VPN等工具,并关闭后再尝试。

Withdrawal_ip_ch