Skip to content

通用接口说明

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

回调IP地址

  • 52.77.59.184

金额单位

Peso(元)

请求正式域名

参数是否必须内容
API endpointhttps://api-gateway.yoyipayment.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
expireAtString令牌有效期2024-10-01 15:19:40

响应信息

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

回调签名方法

INFO

用途:回调验签

签名规则:

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

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

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

示例:amount=100.00clientId=xxxorderId=xxxpaidAmount=100.00payMethod=101001serviceFee=0.50status=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\":100.00,\"clientId\":\"xxx\",\"orderId\":\"xxx\",\"paidAmount\":100.00,\"payMethod\":\"301001\",\"serviceFee\":0.50,\"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": "CLIENT_ID_EXIST",
	"message": "clientId: 2025103651364100 already exist"
}