Код: Выделить всё
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/songkong_icon256.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?route=product/product&product_id=47");
p1.setProductImage("http://ts.oc-develop.com/image/cache/catalog/demo/hp_1-500x500.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?route=product/product&product_id=41");
p2.setProductImage("http://ts.oc-develop.com/image/cache/catalog/demo/imac_1-500x500.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);
trustspot_start_request:[email protected]
{
"merchant_id": "1212",
"customer_email": "[email protected]",
"customer_name": "P Taylor",
"order_id": "1LS122694B720990G",
"purchase_date": "2025-08-218 05:11:27",
"key": "3dd4fcc59699d43abfa4428928d945886b6205fb31356f13cd8d0daba8bc9f56609032a74fc8e505bebf4c3dd14846c804a40ba0304e0c84ef38c279b05edb60",
"hmac": "V+NvYpdeokziw3MdmJ/AT2nrqD6FrpJ/1xovu8Q6asM\u003d",
"products": [
null
]
}
06-Aug-2025 05:11:27.618 WARNING [http-nio-8080-exec-2] org.apache.http.client.protocol.ResponseProcessCookies.processCookies Invalid cookie header: "Set-Cookie: AWSALB=3NMQt20uE38u9PViCI39etqLpbYTIL41YvJnFAjzOHr3wTC/Qeynraxg8sx1yOfeMUW+pdXh9Ot2IIN3bNaKyEVZAKRu/zlZLRJZKuc8nxE0XsvqoRFk1KuGIpFJ; Expires=Wed, 13 Aug 2025 09:11:27 GMT; Path=/". Invalid 'expires' attribute: Wed, 13 Aug 2025 09:11:27 GMT
06-Aug-2025 05:11:27.618 WARNING [http-nio-8080-exec-2] org.apache.http.client.protocol.ResponseProcessCookies.processCookies Invalid cookie header: "Set-Cookie: AWSALBCORS=3NMQt20uE38u9PViCI39etqLpbYTIL41YvJnFAjzOHr3wTC/Qeynraxg8sx1yOfeMUW+pdXh9Ot2IIN3bNaKyEVZAKRu/zlZLRJZKuc8nxE0XsvqoRFk1KuGIpFJ; Expires=Wed, 13 Aug 2025 09:11:27 GMT; Path=/; SameSite=None; Secure". Invalid 'expires' attribute: Wed, 13 Aug 2025 09:11:27 GMT
failPlease contact support. UUID: 68931c3f9009b2.77074223
trustspot_end_request:[email protected]
< /code>
Так что он жалуется на истечение срока службы cookie. Но не знаю, как решить это, неясно, является ли проблема моим кодом или на их сервере?
Подробнее здесь: https://stackoverflow.com/questions/797 ... invalid-ex