# Unified API Param
# Content
| parameter name | required | type | description |
|---|---|---|---|
| sign | Yes | string | RSA sign of param |
| param | Yes | string | request param content string |
# Example
{
"sign": "abcdef",
"param": "{}"
}
# Descrption
- PayCools will construct the request parameters according to the specific interface documents, and format the request parameters into JSON format as the value of
param; - PayCools uses PayCools' RSA private key to sign
param, and the obtained value is used as the value ofsign; - When the merchant receives the request from PayCools, it uses the RSA public key of PayCools to verify and sign
param. If the signature is consistent withsign, it proves that the request is requested by PayCools; - Please ask the PayCools administrator for the RSA public key of PayCools.
# Appendix RSA using case(in Java)
Generate RSA key pair:
import java.security.*;
import java.util.Base64;
public class RsaGenerateKeyPair {
public static void main(String[] args) throws NoSuchAlgorithmException {
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
keyPairGenerator.initialize(4096);
KeyPair keyPair = keyPairGenerator.genKeyPair();
PublicKey publicKey = keyPair.getPublic();
byte[] publicKeyBytes = publicKey.getEncoded();
String publicKeyBase64 = Base64.getEncoder().encodeToString(publicKeyBytes);
System.out.println(publicKeyBase64);
PrivateKey privateKey = keyPair.getPrivate();
byte[] privateKeyBytes = privateKey.getEncoded();
String privateKeyBase64 = Base64.getEncoder().encodeToString(privateKeyBytes);
System.out.println(privateKeyBase64);
}
}
RSA key length should be 4096
RSA public key should be provided to PayCools, and do not disclose to any other.
RSA private key is kept by merchant, and do not disclose to any other.
When the merchant calls the PayCools Open API, it uses the RSA private key to sign the request param, and the PayCools server uses the RSA public key provided by the merchant to verify the signature. If the verification fails, it will refuse to process the request.
# key pair example
RSA public key:
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAnFPgpmzqcKVGp1Ci/WUPzPkhBnojDwPDBFWbB6RBXKjU8Pdp+n9K7rA0ZP6BD19O4MMJwYxG9n7zf7/IboA+bFfW/jsBGi41g7wBafbJxBKXQeXsdE8aRw7BcvjrTbL6EVUn2kMci2d9BMPMsPHCyDmubVIVVN+0rxft0vw2R5jbD/kg7e0K4+ls505eY8KRv2rpLdElhyYoA+PpFGZ/84FhO0nCGTQZCz4dcIK9axZ8RXKpVZQUotBfbKzzYmC8FQU4MeQp5vTttyEudyO0/9PtZUEEg1sN217YZywHeS274031F8dDC7afD2iVTES1obIoqvwEnD9CDfSbmF0pwLvheLhdGyVnh3FmMvQeturf+cTYZotP7igToL1MkmTIlSJ2q2pzPNaz0dyBorxB28WlxCuPRZuRCNzhdz/H694ytymEpwqXUo5Vbcfe+QgVFKduhnYapY4Ntv8oSdsH2MeKb5dhc1sO+I0fqrIW25zUOH8ECWQbgV50I7QIPOhKuLOkZW/EEG2epwlY83HqNrKhH6Wd+DXEjimz9zRmCNRboA8MswN8TRv6vGnmP8rFbPiIl/pBADFViiF+TP08O2VWb/9RaXils0MJfhMvTZ6PjhScIKtX9q6wT28gHYIdBD5UfrKLPndJMxM9u3HzWYCwhxa4boxu2+3KLwd7zFECAwEAAQ==
RSA private key:
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
# RSA sign
import java.security.KeyFactory;
import java.security.Signature;
import java.security.spec.PKCS8EncodedKeySpec;
import java.util.Base64;
public class RsaSign {
public static final String PRIVATE_KEY = "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";
public static void main(String[] args) throws Exception {
String param = "{\"appId\":\"str1\",\"appName\":\"str2\",\"channelCode\":\"str3\",\"mchOrderId\":\"str4\",\"amunt\":200,\"notifyUrl\":\"str5\",\"customerName\":\"str6\",\"email\":\"str7\",\"mobile\":\"str8\",\"remark\":\"str\"}";
Signature signature = Signature.getInstance("SHA256withRSA");
signature.initSign(KeyFactory.getInstance("RSA").generatePrivate(new PKCS8EncodedKeySpec(Base64.getDecoder().decode(PRIVATE_KEY))));
signature.update(param.getBytes());
byte[] bytes = signature.sign();
String sign = Base64.getEncoder().encodeToString(bytes);
System.out.println(sign);
}
}
the value of
signshould be:
TRFUJBoPDGaxXGCPp6BdMtRX4KjsfcPLQNkB95WCbO47LCU6NEohiNcIj1G7RG9OfbeYC3VrMXj7NnRrsvVnZQNUq1F5FIOb0C52qYjYimzY5MXpTBEgZ/Fxg75b9g5/tQAN48tQX3/gPTaJudeyT3POwsHx2jNBiJoV59nPEXFT56X3BzsXjLejEVlB2CuVBAOo8zQ0smq9eqrplWY+nTgwS3LY5tdrbHlMbxIj4Jfn+GTZBqrlC80GgFlaAR3iU8p4Jyjmb2HBjUUO6cs/F6JRwPrZdVjlmL+4dFd+GCL8QEAWs+7epVjIE5rIF7XoLSvenryW3IR0H3OPAtj3ETEekCkttC7sDynPDOkjhSE5uwc0HtYyUFVxXQJAYPNSNWXYxVQFSXzaVdEzgdqSaRzLuSrYzpT38ua/ZtzhvpWAyeWvUSONP6q4ZJEWcDsafDhy4/LLKjdOisiLgaBHiiaOYZQYqo6p7pPE9Rv8/MIZgm5qXqVEC5OI+tYeMssSMZIrnd1jDkjW+h1RpuuvD0pmYQjrhk9/+hH6empXLnCfSA5kzGw6shi8c/XbiKWOaqgSTLsHXxmjATDdSKjuQk4VJ4aNxcve1G8Tx7FqWxBCVESkJPRODMnp6S//dZmCO9+xNVPCwhFOArMH/AB+YwbFPsMVku2J12Kk96sy/mo=
# RSA verification
import java.security.KeyFactory;
import java.security.Signature;
import java.security.spec.X509EncodedKeySpec;
import java.util.Base64;
public class RsaVerifySign {
public static final String PUBLIC_KEY = "MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAnFPgpmzqcKVGp1Ci/WUPzPkhBnojDwPDBFWbB6RBXKjU8Pdp+n9K7rA0ZP6BD19O4MMJwYxG9n7zf7/IboA+bFfW/jsBGi41g7wBafbJxBKXQeXsdE8aRw7BcvjrTbL6EVUn2kMci2d9BMPMsPHCyDmubVIVVN+0rxft0vw2R5jbD/kg7e0K4+ls505eY8KRv2rpLdElhyYoA+PpFGZ/84FhO0nCGTQZCz4dcIK9axZ8RXKpVZQUotBfbKzzYmC8FQU4MeQp5vTttyEudyO0/9PtZUEEg1sN217YZywHeS274031F8dDC7afD2iVTES1obIoqvwEnD9CDfSbmF0pwLvheLhdGyVnh3FmMvQeturf+cTYZotP7igToL1MkmTIlSJ2q2pzPNaz0dyBorxB28WlxCuPRZuRCNzhdz/H694ytymEpwqXUo5Vbcfe+QgVFKduhnYapY4Ntv8oSdsH2MeKb5dhc1sO+I0fqrIW25zUOH8ECWQbgV50I7QIPOhKuLOkZW/EEG2epwlY83HqNrKhH6Wd+DXEjimz9zRmCNRboA8MswN8TRv6vGnmP8rFbPiIl/pBADFViiF+TP08O2VWb/9RaXils0MJfhMvTZ6PjhScIKtX9q6wT28gHYIdBD5UfrKLPndJMxM9u3HzWYCwhxa4boxu2+3KLwd7zFECAwEAAQ==";
public static void main(String[] args) throws Exception {
String param = "{\"appId\":\"str1\",\"appName\":\"str2\",\"channelCode\":\"str3\",\"mchOrderId\":\"str4\",\"amunt\":200,\"notifyUrl\":\"str5\",\"customerName\":\"str6\",\"email\":\"str7\",\"mobile\":\"str8\",\"remark\":\"str\"}";
String sign = "TRFUJBoPDGaxXGCPp6BdMtRX4KjsfcPLQNkB95WCbO47LCU6NEohiNcIj1G7RG9OfbeYC3VrMXj7NnRrsvVnZQNUq1F5FIOb0C52qYjYimzY5MXpTBEgZ/Fxg75b9g5/tQAN48tQX3/gPTaJudeyT3POwsHx2jNBiJoV59nPEXFT56X3BzsXjLejEVlB2CuVBAOo8zQ0smq9eqrplWY+nTgwS3LY5tdrbHlMbxIj4Jfn+GTZBqrlC80GgFlaAR3iU8p4Jyjmb2HBjUUO6cs/F6JRwPrZdVjlmL+4dFd+GCL8QEAWs+7epVjIE5rIF7XoLSvenryW3IR0H3OPAtj3ETEekCkttC7sDynPDOkjhSE5uwc0HtYyUFVxXQJAYPNSNWXYxVQFSXzaVdEzgdqSaRzLuSrYzpT38ua/ZtzhvpWAyeWvUSONP6q4ZJEWcDsafDhy4/LLKjdOisiLgaBHiiaOYZQYqo6p7pPE9Rv8/MIZgm5qXqVEC5OI+tYeMssSMZIrnd1jDkjW+h1RpuuvD0pmYQjrhk9/+hH6empXLnCfSA5kzGw6shi8c/XbiKWOaqgSTLsHXxmjATDdSKjuQk4VJ4aNxcve1G8Tx7FqWxBCVESkJPRODMnp6S//dZmCO9+xNVPCwhFOArMH/AB+YwbFPsMVku2J12Kk96sy/mo=";
Signature signature = Signature.getInstance("SHA256withRSA");
signature.initVerify(KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(Base64.getDecoder().decode(PUBLIC_KEY))));
signature.update(param.getBytes());
boolean result = signature.verify(Base64.getDecoder().decode(sign));
System.out.println(result);
}
}
the value of result should be
true