import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.parser.Feature;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.example.common.SignUtil;
import org.junit.jupiter.api.Test;
import java.util.Map;
import java.util.TreeMap;
public class StarPayTest {
// merchantId
private final static String mchId = "101510000001";
// request Url
private final static String BASE_URL = "http://127.0.0.1:9012/finance-payment-service/v1";
// merchantPrivateKey
private static String priKey = "MIIEugIBADANBgkqhkiG9w0BAQEFAASCBKQwggSgAgEAAoIBAQCcomI4fYcJ8fOW+KGRTFos85WQcGIP+tRH/WYuaBJs+jWPm2W870WgKwJUk1AUtSlTP6FjRI5XB1y9jpdE5mupwlF6tvwKsAa8FqBF/mSkDXyttE4HZFau/D+qDKbfUZROZRSoObBF256qJE/bw/gLcDGe7Vli8rEPnRFtwZuvgx0KQyQ9IW6paR13bSykfLTjTlFezQtoKetOUEQqPXmz4xaRz0U5oiICPM2D2qT3lALDKEZmbDKaMsNrMdYr37JXE+U+xl6+Mowq+LnbDMvYcNUaNrUYr2sPZnbdhnn2JON0fqj874QyzV5vKZyD8QpMZLXNFFuVI7b6ztz3kdcLAgMBAAECggEATYA/Tyo1JeOUnm+ZKdZ4i+NebqBctQFsBc7Iv095RnirBcpjFY/iiHSfa4+UQRq+PtWuGfry3vbimVwzVsEYJl/ihvCBVxxvyKL9XISZ8V5HAX/EV/36sgxXx+EItFieJAf5p58brAUVxaO/68JUOfyiYLuZzc69czdJR2BTkwxqE5pqFzkxkG++gPXLGye+XTtss2HnA+47RMB/0Q1x6GNZ4FYyU8iPfZlR1QN14YOhi2BT1TW9kNqZYNrfzcoqJTHhbSif1kYPysOvMLHLlJe3K82Z6EgxhJQq3kBAHiWOR7Q/w7LLdUa1TkR8ichxfvnuDJrv7oNESelx06ioCQKBgQDjO4V3Q+Uc0cBYduvmfDTe1WQRaE73BlJEIxKwSvukNdsR9JV6TMKLhdYtnQDTOw5F/cPclG/OsoN+Y+g0rdYeLVK+s0J1nyidZOTDoasrhqsiFQoazIP0JIxULlTz0lS+RTFaiUXGHoTBQnN5cfV3fNDSaUFmgme3TfCcQv+Q/wKBgQCwdtBzmyELm0lQ05kLWbfXZ49+UP34S1k7+7l0wUFiX66l/8o6YddsL2PXoKQxFJNKw6gLk9ewlMQJ5NdbvuZwroLFHeG9F/NAN2Tj6dfCfAOkg32SlduSerwTtnis9GyNAV3fppZJ8L2XpgnGRjrMsO9nI75E4nT85RqaAEDt9QKBgCH6nJKhDHmqw+B2p//nQuCveC9CMcyunU6jEABcthRwGTouIMwQ/mZutQBNIfp0MkY1FDy/1ZhLCW608dwuwn3wuRbbJ2z/R8uBctPuMPJpSN3n14L6YiD39iQAaaOsKA/ruN2Y+V4O4jsj/LCEYfhkKbXNF4KErY2zke9L9XtxAoGAWYBpybjs0c45KV2pSjB/JinIhfDeX4kYAWxza9x5JUQSeO97ypDFioGeykcYACzHaCxEl1qtE0rhA4OmF0qD5rMccI3vaNE092UhLtf0LxhnYJGwpyCK9Yh6zCTIoDB4vivrSPxdTbNk9f2pB3+nYxp60n02jAmv/HTXQTTPueECfzVuICm56p9+N1yyoESg5kPORkEliNXy2mGSL7P4iL12zVKWumXH/oHPtRst+1f2NvisXg2Gi5M3y3k8sFrnb21KAvh2oPZyZ8vBKQl/OmlTIM1cJToIbA0TeT6vulAL4eeMnB4vifm9R/Gv4aaHq5f4LFXnKaQWR841yjK0LHg=";
// merchantPublicKey
private static String pubKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnKJiOH2HCfHzlvihkUxaLPOVkHBiD/rUR/1mLmgSbPo1j5tlvO9FoCsCVJNQFLUpUz+hY0SOVwdcvY6XROZrqcJRerb8CrAGvBagRf5kpA18rbROB2RWrvw/qgym31GUTmUUqDmwRdueqiRP28P4C3Axnu1ZYvKxD50RbcGbr4MdCkMkPSFuqWkdd20spHy0405RXs0LaCnrTlBEKj15s+MWkc9FOaIiAjzNg9qk95QCwyhGZmwymjLDazHWK9+yVxPlPsZevjKMKvi52wzL2HDVGja1GK9rD2Z23YZ59iTjdH6o/O+EMs1ebymcg/EKTGS1zRRblSO2+s7c95HXCwIDAQAB";
// verifySignPublicKey
private static String verifySignPublicKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1mqbEfv3xjN306OXIEmvPW2zcP+hcREpxDxsgUQAlrRJz/SEhvg1Pm7t6gIrtlPcVh0dlSuydNHsi53nQqTSesS9K/6pIyvQ64d4Hw5/qAfYtgw8DL9n4x4fCduXvwkCmawwmxevPx6zXC9uWj1G+0ZU6ENJNi+9yCbksq75h1PdzjSwhvrYH6yeXy9fv1fUSpef7S1/8i/BxxIeYyGXOYlXqGelGwKfnU9cJ3gtKwDjVm8HmazbI8VPqkjKe+HeO8Lulqmscx9B8bFMRNPjEdiCgsVjBh3HPhdKqd/9G45/3Ez7q/yE+VayoEOJM/U0u2kYjBUFWE5mV0sshdgbuwIDAQAB";
/**
* Repayment
*/
@Test
public void starpayRepayment() {
String timtStamp = System.currentTimeMillis() + "";
Map<String, Object> headerMap = new TreeMap<>();
headerMap.put("msgId", timtStamp);
headerMap.put("deviceInfo", "deviceInfo");
headerMap.put("trxAmount", "5555");
headerMap.put("currency", "PHP");
headerMap.put("service", "pay.starpay.repayment");
headerMap.put("mchId", mchId);
headerMap.put("notifyUrl", "http://localhost:8080/notify");
// headerMap.put("timeStart", "20240109141200");
// headerMap.put("timeExpire", "20240109141200");
JSONObject bodyJson = new JSONObject(headerMap);
String body = bodyJson.toString();
String sign = SignUtil.signBySHA256WithRSA(body, priKey);
// The complete request message
JSONObject reqJson = new JSONObject();
reqJson.put("request", body);
reqJson.put("signature", sign);
String req = JSON.toJSONString(reqJson);
String requestUrl = BASE_URL + "/repayment";
System.out.println("request url: " + requestUrl);
System.out.println("request reqBody: " + req);
String responseBody = doPost(requestUrl, req);
System.out.println("response: " + responseBody);
JSONObject responseJson = JSONObject.parseObject(responseBody, Feature.OrderedField);
String requestStr = responseJson.getString("response");
String signStr = responseJson.getString("signature");
boolean success = SignUtil.verifyBySHA256WithRSA(requestStr, signStr, verifySignPublicKey);
if (success) {
System.out.println("verifyBySHA256WithRSA: success");
} else {
System.out.println("verifyBySHA256WithRSA: fail");
}
}
protected static String doPost(String url, String reqBody) {
try {
CloseableHttpClient client = HttpClients.custom().build();
HttpPost httpPost = new HttpPost(url);
StringEntity entityParams = new StringEntity(reqBody, "utf-8");
httpPost.setEntity(entityParams);
httpPost.setHeader("Content-Type", "application/json");
CloseableHttpResponse resp = client.execute(httpPost);
String res = EntityUtils.toString(resp.getEntity(), "utf-8");
return res;
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}