OAuthTokenCredential 不活动
OAuthTokenCredential Inactivity
我开发了一个网络平台,允许我们的客户(不止一个)使用 PayPal REST 接收付款 API。
在开发中一切运行良好,但在生产中,在一段时间不活动后,看起来需要重新生成所需的身份验证令牌。
为了处理多个客户,当键是 customer_id 和 payment_method_id 之间的组合并且值是 POJO,包含令牌和创建日期时,我使用同步的 HashMap .
token为当前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
);
问题是用户买不到,所以是个bug,我要赶紧解决
我从 paypal 收到的消息如下:
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 秒)的令牌超时。做这些事情有最佳实践吗?我有什么问题吗?
非常感谢,大卫。
是的,PayPal 颁发的访问令牌将在特定时间后过期,请参阅 How PayPal uses OAuth 2.0。有效期与访问令牌请求作为参数返回expires_in
(以秒为单位):
{
"scope": "https://api.paypal.com/v1/payments/.* ...",
"access_token": "...",
"token_type": "Bearer",
"app_id": "...",
"expires_in": 28800
}
PayPal 沙盒环境(如上)的典型访问令牌生命周期为 8 小时,实时环境为 15 分钟。如果您的实施需要更长的令牌生命周期,您可以联系 PayPal 的技术支持。
JavaREST SDK的OAuthTokenCredential
classexposes a method expiresIn()
,可用于查看剩余有效期:值为<= 0
表示已过期令牌,可用于在发出请求之前检查当前令牌的有效性(使用此方法时您可能应该使用一些缓冲区)。
或者,您可以检查 401 响应状态并在必要时触发重新获取令牌——您应始终确保您的实施能够处理这种情况。
我开发了一个网络平台,允许我们的客户(不止一个)使用 PayPal REST 接收付款 API。
在开发中一切运行良好,但在生产中,在一段时间不活动后,看起来需要重新生成所需的身份验证令牌。
为了处理多个客户,当键是 customer_id 和 payment_method_id 之间的组合并且值是 POJO,包含令牌和创建日期时,我使用同步的 HashMap .
token为当前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
);
问题是用户买不到,所以是个bug,我要赶紧解决
我从 paypal 收到的消息如下:
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 秒)的令牌超时。做这些事情有最佳实践吗?我有什么问题吗?
非常感谢,大卫。
是的,PayPal 颁发的访问令牌将在特定时间后过期,请参阅 How PayPal uses OAuth 2.0。有效期与访问令牌请求作为参数返回expires_in
(以秒为单位):
{
"scope": "https://api.paypal.com/v1/payments/.* ...",
"access_token": "...",
"token_type": "Bearer",
"app_id": "...",
"expires_in": 28800
}
PayPal 沙盒环境(如上)的典型访问令牌生命周期为 8 小时,实时环境为 15 分钟。如果您的实施需要更长的令牌生命周期,您可以联系 PayPal 的技术支持。
JavaREST SDK的OAuthTokenCredential
classexposes a method expiresIn()
,可用于查看剩余有效期:值为<= 0
表示已过期令牌,可用于在发出请求之前检查当前令牌的有效性(使用此方法时您可能应该使用一些缓冲区)。
或者,您可以检查 401 响应状态并在必要时触发重新获取令牌——您应始终确保您的实施能够处理这种情况。