Я использую API, предоставленный RaveCapture (ранее TrustSpot) для отправки запроса на обзор, когда клиент совершает покупку.
используется для нормальной работы, перестал работать несколько месяцев назад, я имел в виду старый URL, который так модифицирован к новому URL -мышлению, но все еще продолжает терпеть неудачу
java code>
package com.jthink.store.trustspot;
import com.google.gson.FieldNamingPolicy;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.jthink.store.util.Email;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
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.DefaultHttpClient;
import org.apache.http.impl.client.HttpClients;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import javax.net.ssl.SSLContext;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.net.URL;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Base64;
import java.util.List;
/**
* Created by Paul on 27/01/2017.
*/
public class TrustSpotProductRequest
{
public static final String API_KEY = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
public static final String SECRET_KEY = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
public static final String MERCHANT_ID = "xxxx";
private Order order;
private List
products;
public TrustSpotProductRequest()
{
}
public void sendRequest(Order order)
{
HttpPost httpMethod;
URL url;
try
{
CloseableHttpClient httpclient = HttpClients.createSystem();
this.order=order;
String dataForHmac = MERCHANT_ID + order.getOrderId() + order.getCustomerEmail();
String calculatedHmac = base64sha256(dataForHmac, SECRET_KEY);
order.setHmac(calculatedHmac);
order.setKey(API_KEY);
Gson gson = new GsonBuilder().setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES).setPrettyPrinting().create();
System.out.println(gson.toJson(order));
String jsonData = gson.toJson(order);
url = new URL("https://app.ravecapture.com/api/pub/new_order_product");
httpMethod = new HttpPost(url.toExternalForm());
//httpMethod.addHeader("Accept", "application/json");
httpMethod.addHeader("Content-Type", "application/json");
StringEntity se = new StringEntity(jsonData);
httpMethod.setEntity(se);
HttpResponse httpResponse = httpclient.execute(httpMethod);
InputStreamReader is = new InputStreamReader(httpResponse.getEntity().getContent());
BufferedReader rd;
rd = new BufferedReader(is);
String line = "";
while ((line = rd.readLine()) != null)
{
System.out.println(line);
}
}
catch(Exception ex)
{
ex.printStackTrace();
StringWriter messageBody = new StringWriter();
PrintWriter pw = new PrintWriter(messageBody);
ex.printStackTrace(pw);
Email.sendAlert("Unable to send ravecpature review request:"+ order.getCustomerEmail(), messageBody.toString());
}
}
public static String base64sha256(String data, String secret) throws Exception
{
Mac sha256_HMAC = Mac.getInstance("HmacSHA256");
SecretKeySpec secret_key = new SecretKeySpec(secret.getBytes(), "HmacSHA256");
sha256_HMAC.init(secret_key);
byte[] res = sha256_HMAC.doFinal(data.getBytes());
return Base64.getEncoder().encodeToString(res);
}
public static void main(String[] args) throws Exception
{
//Read data from csv file
Path path = Paths.get("C:/code/jaikoz.csv");
System.out.println("Path exist:"+Files.isRegularFile(path));
List rows = Files.readAllLines(path);
System.out.println("RowsSize:"+rows.size());
for(int i=1; i < rows.size(); i++)
{
String row = rows.get(i);
String[] parts = row.split(",");
String purchaseDate = parts[0];
String orderId = parts[1];
String name = parts[2] + " " + parts[3];
String email = parts[4];
Order order = new Order();
order.setMerchantId(String.valueOf(MERCHANT_ID));
order.setOrderId((orderId));
order.setCustomerName(name);
order.setCustomerEmail(email);
order.setPurchaseDate(purchaseDate);
Product p1 = new Product();
p1.setProductSku(String.valueOf(1001));
p1.setProductName("Jaikoz");
p1.setProductDesc("Deceptively Powerful Automated Music Tagging");
p1.setProductPrice("30.00");
p1.setProductUrl("https://www.jthink.net/jaikoz");
p1.setProductImage("https://www.jthink.net/jaikoz/images/jaikoz128x128.png");
order.addProducts(p1);
TrustSpotProductRequest tspr = new TrustSpotProductRequest();
tspr.sendRequest(order);
}
}
public static void mainOld(String[] args) throws Exception
{
Order order = new Order();
order.setMerchantId(String.valueOf(MERCHANT_ID));
order.setOrderId(("12A49085JX0082328"));
order.setCustomerName("Karen Taylor");
order.setCustomerEmail("[email protected]");
order.setPurchaseDate("2021-11-26 22:05:56");
Product p1 = new Product();
p1.setProductSku(String.valueOf(1002));
p1.setProductName("SongKong");
p1.setProductDesc("Deceptively Powerful Automated Music Tagging");
p1.setProductPrice("30.00");
p1.setProductUrl("http://www.jthink.net/songkong");
p1.setProductImage("http://www.jthink.net/songkong/images/s ... con256.png");
order.addProducts(p1);
TrustSpotProductRequest tspr = new TrustSpotProductRequest();
tspr.sendRequest(order);
}
public static void mainTest(String[] args) throws Exception
{
Order order = new Order();
order.setMerchantId(String.valueOf(526));
order.setOrderId(String.valueOf(15));
order.setCustomerName("Tom Tester");
order.setCustomerEmail("[email protected]");
order.setPurchaseDate("2017-01-27 22:05:56");
order.setHmac("kH9AAiRPMdHTP/dZgcUCPaldhpL9ttUw+lYl7LdB32Q=");
Product p1 = new Product();
p1.setProductSku(String.valueOf(47));
p1.setProductName("HP LP3065");
p1.setProductDesc("\r\nStop your co-workers in their tracks with the stunning new 30-inc");
p1.setProductPrice("100.0000");
p1.setProductUrl("http://ts.oc-develop.com/index.php?rout ... duct_id=47");
p1.setProductImage("http://ts.oc-develop.com/image/cache/ca ... 00x500.jpg");
order.addProducts(p1);
Product p2 = new Product();
p2.setProductSku(String.valueOf(41));
p2.setProductName("iMac");
p2.setProductDesc("\r\nJust when you thought iMac had everything,");
p2.setProductPrice("100.0000");
p2.setProductUrl("http://ts.oc-develop.com/index.php?rout ... duct_id=41");
p2.setProductImage("http://ts.oc-develop.com/image/cache/ca ... 00x500.jpg");
order.addProducts(p2);
Gson gson = new GsonBuilder().setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES).setPrettyPrinting().create();
System.out.println(gson.toJson(order));
//TrustSpotProductRequest tspr = new TrustSpotProductRequest();
//tspr.sendRequest(order);
}
/**
* Created by Paul on 27/01/2017.
*/
public static class Order
{
private String merchantId;
private String customerEmail;
private String customerName;
private String orderId;
private String purchaseDate;
private String key;
private String hmac;
private List products = new ArrayList();
public String getCustomerEmail()
{
return customerEmail;
}
public void setCustomerEmail(String customerEmail)
{
this.customerEmail = customerEmail;
}
public String getCustomerName()
{
return customerName;
}
public void setCustomerName(String customerName)
{
this.customerName = customerName;
}
public String getOrderId()
{
return orderId;
}
public void setOrderId(String orderId)
{
this.orderId = orderId;
}
public String getPurchaseDate()
{
return purchaseDate;
}
public void setPurchaseDate(String purchaseDate)
{
this.purchaseDate = purchaseDate;
}
public String getMerchantId()
{
return merchantId;
}
public void setMerchantId(String merchantId)
{
this.merchantId = merchantId;
}
public String getKey()
{
return key;
}
public void setKey(String key)
{
this.key = key;
}
public String getHmac()
{
return hmac;
}
public void setHmac(String hmac)
{
this.hmac = hmac;
}
public List getProducts()
{
return products;
}
public void addProducts(Product product)
{
products.add(product);
}
}
/**
* Created by Paul on 27/01/2017.
*/
public static class Product
{
private String productSku;
private String productName;
private String productDesc;
private String productPrice;
private String productUrl;
private String productImage;
public String getProductSku()
{
return productSku;
}
public void setProductSku(String productSku)
{
this.productSku = productSku;
}
public String getProductName()
{
return productName;
}
public void setProductName(String productName)
{
this.productName = productName;
}
public String getProductDesc()
{
return productDesc;
}
public void setProductDesc(String productDesc)
{
this.productDesc = productDesc;
}
public String getProductPrice()
{
return productPrice;
}
public void setProductPrice(String productPrice)
{
this.productPrice = productPrice;
}
public String getProductUrl()
{
return productUrl;
}
public void setProductUrl(String productUrl)
{
this.productUrl = productUrl;
}
public String getProductImage()
{
return productImage;
}
public void setProductImage(String productImage)
{
this.productImage = productImage;
}
}
}
System.out.println("trustspot_start_request:"+emailAddress);
TrustSpotProductRequest ts = new TrustSpotProductRequest();
TrustSpotProductRequest.Order order = createTrustSpotOrder(emailAddress, name, orderId);
TrustSpotProductRequest.Product product = createProduct();
order.addProducts(product);
ts.sendRequest(order);
System.out.println("trustspot_end_request:"+emailAddress);
< /code>
output < /strong> < /p>
trustspot_start_request:[email protected]
{
"merchant_id": "1212",
"customer_email": "[email protected]",
", puctipe_name", "ptay_name". /> "order_id": "1LS122694B720990G",
"buy_date": "2025-08-218 05:11:27",
"Ключ": "3DD4FCC59699D43ABFA4428928D945886B6205FB31356F13CD8D0DABA8BC9F5660 9032A74FC8E505BEBF4C3DD14846C804A40BA0304E0C84EF38C279B05EDB60 ",
"hmac": "v+nvypdeokziw3mdmj /at2nrqd6frpj /1xovu8q6asm \ u003d",
"продукты": [
null
]
}
06-aug-2025 05: 11: 27.618 Warning [http-nio-8080-exec-2] org.apache.http.client.protocol.responseprocesscookies.processcookies Недостаточный заголовок печенья: «Set-cookie: AWSALB = 3NMQT20UE38U9PVICI39ETQLPBYTIL41YVJNFAJZOHR3WTC/QEYNRAXG8SX1YOFEMUW+PDXH9OT2IIN3BNAKYEVZAKRU/ZLZLRJZCUC8NXE0XSVQORFK1KUGRU/ZLZLRJZCUC8NXE0XSVQUR 2025 09:11:27 GMT; Invalid 'истекает атрибут: ср, 13 августа 2025 г. 09:11:27 Gmt
06-Aug-2025 05: 11: 27.618 ПРЕДУПРЕЖДЕНИЕ [http-nio-8080-exec-2] org.apache.http.client.protocol.ResponseProcesscesscesscessies.processie-cipecripire. AWSALBCORS = 3NMQT20UE38U9PVICI39ETQLPBYTIL41YVJNFAJZOHR3WTC/QEYNRAXG8SX1YOFEMUW+PDXH9OT2IIN3BNAKYEVZAKRU/ZLZLRJZCUC8NXE0XSVQRIPC1KRIPCRIPCRIPCRIPCRIPHR Авг 2025 г. 09:11:27 Недопустимый «истекает» атрибут: ср, 13 августа 2025 г. 09:11:27 Gmt < /p>
Поддержка контакта. UUID: 68931C3F9009B2.77074223
trustspot_end_request:[email protected]
Так что он жаловался на истечение срока службы cookie. Но не знаю, как решить это, неясно, является ли проблема моим кодом или на их сервере?
Подробнее здесь: https://stackoverflow.com/questions/797 ... invalid-ex
Protocol.responseprocesscookies.processcookies Недопустимый заголовок печенья, атрибут с истечением срока действия недей ⇐ JAVA
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Сделание истечения срока действия/истечения срока действия на странице платежей
Anonymous » » в форуме Html - 0 Ответы
- 5 Просмотры
-
Последнее сообщение Anonymous
-