У меня есть такой сценарий: -
Мне нужно интегрировать платежный шлюз на веб-сайт.
Мы используем угловой 6 на переднем конце и подпружиненный на задней части.
Платежный шлюз просит публиковать данные в кодировке formurl, поэтому я публикую данные в кодировке formurl.
Теперь это дает мне перекрестную ошибку контроля доступа.
Итак, что я сделал сейчас, так это то, что я создал API, который принимает строки в кодировке Formurl и сообщения на их API.
Теперь их код ответа 302, который перенаправления.
Теперь я получаю URL и cookie от заголовков.
но если я отправлю этот URL и Cokkie на веб-интерфейс, я не смогу открыть страницу с желаемым выводом, которая не может установить cookie на другом домене в угловом формате.
Сейчас я получаю HTML, но я не могу создать страницу динамически с этим HTML в угловом формате.
Пожалуйста, скажите мне решение этого в угловом или javascript, если есть.
Мой код выглядит следующим образом: -
-> service.ts
makePayment(data: MakePaymentModel) {
let body = new URLSearchParams();
let headers = new HttpHeaders({ 'Content-Type': 'application/x-www-form-urlencoded' });
for (let i in data) {
if (data[i] != undefined) {
body.append(i, data[i]);
}
}
return this.http.post(this.resourceUrl2, body.toString(), { responseType: 'text', observe: 'response', withCredentials: false });
}
это разместить форму в формате urlencoded на API.
Resource.java
@PostMapping(value = "/make-payment")
public ResponseEntity<String> makePayment(@RequestBody String request) throws IOException {
byte[] postData = request.getBytes(StandardCharsets.UTF_8);
int postDataLength = postData.length;
URL url = new URL(this.payementGatewayUrl+this.challanUrl);
HttpURLConnection conn= (HttpURLConnection) url.openConnection();
conn.setDoOutput(true);
conn.setInstanceFollowRedirects(false);
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
conn.setRequestProperty("charset", "utf-8");
conn.setRequestProperty("Content-Length", Integer.toString(postDataLength ));
conn.setUseCaches(false);
try(DataOutputStream wr = new DataOutputStream(conn.getOutputStream())) {
wr.write(postData);
}
boolean redirect = false;
int status = conn.getResponseCode();
if (status != HttpURLConnection.HTTP_OK) {
if (status == HttpURLConnection.HTTP_MOVED_TEMP
|| status == HttpURLConnection.HTTP_MOVED_PERM
|| status == HttpURLConnection.HTTP_SEE_OTHER)
redirect = true;
}
if (redirect) {
// get redirect url from "location" header field
String newUrl = conn.getHeaderField("Location");
// get the cookie if need, for login
String cookies = conn.getHeaderField("Set-Cookie");
// open the new connnection again
conn = (HttpURLConnection) new URL(this.payementGatewayUrl+newUrl).openConnection();
conn.setRequestProperty("Cookie", cookies);
conn.addRequestProperty("Accept-Language", "en-US,en;q=0.8");
conn.addRequestProperty("Referer", "google.com");
}
BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String inputLine;
StringBuffer html = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
html.append(inputLine);
}
in.close();
System.out.println("URL Content... \n" + html.toString());
return ResponseEntity.ok("OK");
}
Размести данные на своих API и верни перенаправление