我开发了一个网络平台,允许我们的客户(多个)使用 PayPal REST API 接收付款。
在开发中一切运行良好,但在生产中,经过一段时间的不活动后,看起来需要重新生成所需的身份验证令牌。
为了处理多个客户,当键是 customer_id 和 payment_method_id 之间的组合并且值是 POJO,包含令牌和创建日期时,我正在使用同步的 HashMap。
令牌是当前的 OAuthTokenCredential,由以下代码生成:
Properties p = new Properties();
// Evaluate the right endpoint
if (STATUS_ACTIVE) {
p.put("service.EndPoint", "https://api.paypal.com");
}
else {
p.put("service.EndPoint", "https://api.sandbox.paypal.com");
}
p.put("clientID", clientId);
p.put("clientSecret", clientSecret);
p.put("http.ConnectionTimeOut", "5000");
p.put("http.Retry", "1");
p.put("http.ReadTimeOut", "30000");
p.put("http.MaxConnection", "100");
p.put("http.UseProxy", "false");
Payment.initConfig(p);
OAuthTokenCredential tokenGen = new OAuthTokenCredential(
clientId,
clientSecret
);
问题是用户无法购买,所以这是我需要快速解决的错误。
我从贝宝收到的消息如下:
Error Code 401 with response : Server returned HTTP response code 401 for url https://api.paypal.com/v1/payments/payment
你知道 OAuthTokenCredential Validity 是否有一些超时?我使用 junit 测试了代码,因此正确生成并缓存了令牌。
现在我有一个 5'(300 秒)的令牌超时。做这件事有最佳实践吗?有什么我错了吗?
非常感谢,戴维德。