MaxPay 支付接口文档

本文档提供了MaxPay支付平台所有接口的详细说明和使用方法,包括代收、代付、订单查询及回调处理等核心功能。

3. 代付接口

POST
https://{请联系客服}/api/transfer/apply
application/json

输入参数

参数名 是否可空 类型 描述
amount N number 金额
merchant N string 商户ID
bankname N string 代付银行名称
subbankname Y string 代付支行名称
cardno N string 代付账户
cardname N string 代付账户所有人姓名
notifyurl N string 代付成功回调地址
outtransferno N string 商户代付订单号
verifyChannelNo Y string 验证地址编号
remark Y string 备注
sign N string 签名

输入参数示例

JSON 示例
{
  "amount": 2000,
  "merchant": "1904572121431658498",
  "bankname": "xx银行",
  "subbankname": "xx支行",
  "cardno": "1224323423",
  "cardname": "张三",
  "notifyurl": "www.xx.com",
  "outtransferno": "TEST12311221",
  "verifyChannelNo": "1",
  "remark": "备注",
  "sign": "sign1"
}

接口返回示例

JSON 返回
{
  "code": 0,
  "results": "success",
  "uid": ""
}

Java 示例

Java 示例代码
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.util.*;
import com.google.gson.*;

public class TransferExample   {
    public static void main(String[] args) {
        String merchantId = "1904572121431658498";
        String secret = "your_secret_key";
        String apiUrl = "https://{请联系客服}/api/transfer/apply";



        Map params = new HashMap<>();
        params.put("amount", "2000");
        params.put("merchant", merchantId);
        params.put("bankname", "xx银行");
        params.put("cardno", "1224323423");
        params.put("cardname", "张三");
        params.put("notifyurl", "https://yourdomain.com/notify");
        params.put("outtransferno", "TRANSFER_" + System.currentTimeMillis());
        params.put("remark", "测试代付");

        // 生成签名
        String sign = generateSign(params, secret);
        params.put("sign", sign);

        // 发送请求
        try {
            String response = sendPostRequest(apiUrl, params);
            System.out.println("API响应: " + response);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private static String generateSign(Map params, String secret) {
        // 过滤空值参数并去除空格
        Map filteredParams = new TreeMap<>();
        for (Map.Entry entry : params.entrySet()) {
            if (entry.getValue() != null && !entry.getValue().trim().isEmpty()) {
                filteredParams.put(entry.getKey(), entry.getValue().trim());
            }
        }

        // 构建参数字符串
        StringBuilder paramBuilder = new StringBuilder();
        for (Map.Entry entry : filteredParams.entrySet()) {
            if (paramBuilder.length() > 0) {
                paramBuilder.append("&");
            }
            String encodedValue = URLEncoder.encode(entry.getValue(), StandardCharsets.UTF_8).toLowerCase();
            paramBuilder.append(entry.getKey()).append("=").append(encodedValue);
        }

        // 追加secret
        String paramString = paramBuilder.toString();
        String strToHash = paramString + "&secret=" + secret;

        // 生成MD5签名
        return md5(strToHash);
    }

    private static String md5(String input) {
        try {
            MessageDigest md = MessageDigest.getInstance("MD5");
            byte[] hash = md.digest(input.getBytes(StandardCharsets.UTF_8));
            StringBuilder hexString = new StringBuilder();
            for (byte b : hash) {
                String hex = Integer.toHexString(0xff & b);
                if (hex.length() == 1) hexString.append("0");
                hexString.append(hex);
            }
            return hexString.toString();
        } catch (Exception e) {
            throw new RuntimeException("MD5计算失败", e);
        }
    }

    private static String sendPostRequest(String url, Map params) throws Exception {
        HttpURLConnection conn = (HttpURLConnection) new URL(url).openConnection();
        conn.setRequestMethod("POST");
        conn.setRequestProperty("Content-Type", "application/json");
        conn.setDoOutput(true);

        // 将参数转换为JSON字符串
        String jsonInputString = new Gson().toJson(params);

        // 发送请求
        try (OutputStream os = conn.getOutputStream()) {
            byte[] input = jsonInputString.getBytes("utf-8");
            os.write(input, 0, input.length);
        }

        // 读取响应
        try (BufferedReader br = new BufferedReader(
            new InputStreamReader(conn.getInputStream(), "utf-8"))) {
            StringBuilder response = new StringBuilder();
            String responseLine;
            while ((responseLine = br.readLine()) != null) {
                response.append(responseLine.trim());
            }
            return response.toString();
        }
    }
}