Details
diff --git a/api/src/main/java/com/ning/billing/payment/api/PaymentApi.java b/api/src/main/java/com/ning/billing/payment/api/PaymentApi.java
index df7d8ef..fd84927 100644
--- a/api/src/main/java/com/ning/billing/payment/api/PaymentApi.java
+++ b/api/src/main/java/com/ning/billing/payment/api/PaymentApi.java
@@ -55,5 +55,6 @@ public interface PaymentApi {
PaymentAttempt getPaymentAttemptForInvoiceId(String invoiceId);
+ PaymentInfo getPaymentInfoForPaymentAttemptId(String paymentAttemptId);
}
diff --git a/payment/src/main/java/com/ning/billing/payment/api/DefaultPaymentApi.java b/payment/src/main/java/com/ning/billing/payment/api/DefaultPaymentApi.java
index c2e4883..3b1a6f9 100644
--- a/payment/src/main/java/com/ning/billing/payment/api/DefaultPaymentApi.java
+++ b/payment/src/main/java/com/ning/billing/payment/api/DefaultPaymentApi.java
@@ -288,4 +288,9 @@ public class DefaultPaymentApi implements PaymentApi {
return paymentDao.getPaymentAttemptForInvoiceId(invoiceId);
}
+ @Override
+ public PaymentInfo getPaymentInfoForPaymentAttemptId(String paymentAttemptId) {
+ return paymentDao.getPaymentInfoForPaymentAttemptId(paymentAttemptId);
+ }
+
}
diff --git a/payment/src/main/java/com/ning/billing/payment/dao/DefaultPaymentDao.java b/payment/src/main/java/com/ning/billing/payment/dao/DefaultPaymentDao.java
index 7366deb..a86db13 100644
--- a/payment/src/main/java/com/ning/billing/payment/dao/DefaultPaymentDao.java
+++ b/payment/src/main/java/com/ning/billing/payment/dao/DefaultPaymentDao.java
@@ -94,4 +94,9 @@ public class DefaultPaymentDao implements PaymentDao {
return sqlDao.getPaymentAttemptById(paymentAttemptId.toString());
}
+ @Override
+ public PaymentInfo getPaymentInfoForPaymentAttemptId(String paymentAttemptIdStr) {
+ return sqlDao.getPaymentInfoForPaymentAttemptId(paymentAttemptIdStr);
+ }
+
}
diff --git a/payment/src/main/java/com/ning/billing/payment/dao/PaymentDao.java b/payment/src/main/java/com/ning/billing/payment/dao/PaymentDao.java
index 01716c5..de2d8cc 100644
--- a/payment/src/main/java/com/ning/billing/payment/dao/PaymentDao.java
+++ b/payment/src/main/java/com/ning/billing/payment/dao/PaymentDao.java
@@ -45,5 +45,6 @@ public interface PaymentDao {
List<PaymentInfo> getPaymentInfo(List<String> invoiceIds);
PaymentAttempt getPaymentAttemptById(UUID paymentAttemptId);
+ PaymentInfo getPaymentInfoForPaymentAttemptId(String paymentAttemptId);
}
diff --git a/payment/src/main/java/com/ning/billing/payment/dao/PaymentSqlDao.java b/payment/src/main/java/com/ning/billing/payment/dao/PaymentSqlDao.java
index b2566e4..9919d34 100644
--- a/payment/src/main/java/com/ning/billing/payment/dao/PaymentSqlDao.java
+++ b/payment/src/main/java/com/ning/billing/payment/dao/PaymentSqlDao.java
@@ -65,6 +65,10 @@ public interface PaymentSqlDao extends Transactional<PaymentSqlDao>, CloseMe, Tr
@Mapper(PaymentAttemptMapper.class)
List<PaymentAttempt> getPaymentAttemptsForInvoiceIds(@BindIn("invoiceIds") List<String> invoiceIds);
+ @SqlQuery
+ @Mapper(PaymentInfoMapper.class)
+ PaymentInfo getPaymentInfoForPaymentAttemptId(@Bind("payment_attempt_id") String paymentAttemptId);
+
@SqlUpdate
void updatePaymentAttemptWithPaymentId(@Bind("payment_attempt_id") String paymentAttemptId,
@Bind("payment_id") String paymentId);
diff --git a/payment/src/main/java/com/ning/billing/payment/RetryService.java b/payment/src/main/java/com/ning/billing/payment/RetryService.java
index 027ee28..d6db526 100644
--- a/payment/src/main/java/com/ning/billing/payment/RetryService.java
+++ b/payment/src/main/java/com/ning/billing/payment/RetryService.java
@@ -27,6 +27,7 @@ import com.ning.billing.lifecycle.LifecycleHandlerType;
import com.ning.billing.lifecycle.LifecycleHandlerType.LifecycleLevel;
import com.ning.billing.payment.api.PaymentApi;
import com.ning.billing.payment.api.PaymentAttempt;
+import com.ning.billing.payment.api.PaymentInfo;
import com.ning.billing.payment.setup.PaymentConfig;
import com.ning.billing.util.notificationq.NotificationKey;
import com.ning.billing.util.notificationq.NotificationQueue;
@@ -93,6 +94,10 @@ public class RetryService implements KillbillService {
}
private void retry(String paymentAttemptId) {
- paymentApi.createPayment(UUID.fromString(paymentAttemptId));
+ PaymentInfo paymentInfo = paymentApi.getPaymentInfoForPaymentAttemptId(paymentAttemptId);
+
+ if (paymentInfo != null && !"Processed".equalsIgnoreCase(paymentInfo.getStatus())) {
+ paymentApi.createPayment(UUID.fromString(paymentAttemptId));
+ }
}
}
diff --git a/payment/src/main/resources/com/ning/billing/payment/dao/PaymentSqlDao.sql.stg b/payment/src/main/resources/com/ning/billing/payment/dao/PaymentSqlDao.sql.stg
index a2ea441..6576ecb 100644
--- a/payment/src/main/resources/com/ning/billing/payment/dao/PaymentSqlDao.sql.stg
+++ b/payment/src/main/resources/com/ning/billing/payment/dao/PaymentSqlDao.sql.stg
@@ -83,6 +83,14 @@ updatePaymentInfo() ::= <<
WHERE payment_id = :payment_id
>>
+updatePaymentAttemptWithRetryInfo() ::= <<
+ UPDATE payment_attempts
+ SET retry_count = :retry_count,
+ next_retry_dt = :next_retry_dt,
+ updated_dt = NOW()
+ WHERE payment_attempt_id = :payment_attempt_id
+>>
+
getPaymentInfos(invoiceIds) ::= <<
SELECT <paymentInfoFields("p.")>
FROM payments p, payment_attempts pa
diff --git a/payment/src/test/java/com/ning/billing/payment/dao/MockPaymentDao.java b/payment/src/test/java/com/ning/billing/payment/dao/MockPaymentDao.java
index 4c60171..b245e55 100644
--- a/payment/src/test/java/com/ning/billing/payment/dao/MockPaymentDao.java
+++ b/payment/src/test/java/com/ning/billing/payment/dao/MockPaymentDao.java
@@ -133,4 +133,10 @@ public class MockPaymentDao implements PaymentDao {
return paymentAttempts.get(paymentAttemptId);
}
+ @Override
+ public PaymentInfo getPaymentInfoForPaymentAttemptId(String paymentAttemptId) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
}