diff --git a/src/main/java/com/bunq/sdk/examples/CardDebitExample.java b/src/main/java/com/bunq/sdk/examples/CardDebitExample.java index 7c1867ce..7dfacaee 100644 --- a/src/main/java/com/bunq/sdk/examples/CardDebitExample.java +++ b/src/main/java/com/bunq/sdk/examples/CardDebitExample.java @@ -2,7 +2,9 @@ import com.bunq.sdk.context.ApiContext; import com.bunq.sdk.model.generated.endpoint.CardDebit; +import com.bunq.sdk.model.generated.object.CardPinAssignment; import com.bunq.sdk.model.generated.object.Pointer; + import java.io.IOException; import java.math.BigInteger; import java.security.SecureRandom; @@ -20,8 +22,10 @@ public class CardDebitExample { private static final String EMAIL_YOUR_COMPANY = "at@at.at"; // Put your user email here private static final String POINTER_NAME_TEST = "test pointer"; private static final int USER_ITEM_ID = 0; // Put your user ID here + private static final int MONETARY_ACCOUNT_ID = 0; // Put your monetary account ID here private static final int NUM_BITS_20_DECIMAL_DIGITS = 66; private static final int RADIX_DIGITS_AND_LATIN_LETTERS = 36; + private static final String CARD_PIN_ASSIGNMENT_TYPE_PRIMARY = "PRIMARY"; /** * @param args Command line arguments. @@ -29,10 +33,16 @@ public class CardDebitExample { public static void main(String[] args) throws IOException { ApiContext apiContext = ApiContext.restore(API_CONTEXT_FILE_PATH); + CardPinAssignment cardPinAssignment = new CardPinAssignment( + CARD_PIN_ASSIGNMENT_TYPE_PRIMARY, + PIN_CODE, + MONETARY_ACCOUNT_ID + ); + HashMap requestMap = new HashMap<>(); requestMap.put(CardDebit.FIELD_NAME_ON_CARD, NAME_YOUR_COMPANY); requestMap.put(CardDebit.FIELD_SECOND_LINE, generateRandomSecondLine()); - requestMap.put(CardDebit.FIELD_PIN_CODE, PIN_CODE); + requestMap.put(CardDebit.FIELD_PIN_CODE_ASSIGNMENT, new CardPinAssignment[]{cardPinAssignment}); Pointer pointer = new Pointer(POINTER_TYPE_EMAIL, EMAIL_YOUR_COMPANY); pointer.setName(POINTER_NAME_TEST); requestMap.put(CardDebit.FIELD_ALIAS, pointer); diff --git a/src/main/java/com/bunq/sdk/model/generated/endpoint/CardDebit.java b/src/main/java/com/bunq/sdk/model/generated/endpoint/CardDebit.java index 444c27d0..68ef7c46 100644 --- a/src/main/java/com/bunq/sdk/model/generated/endpoint/CardDebit.java +++ b/src/main/java/com/bunq/sdk/model/generated/endpoint/CardDebit.java @@ -38,7 +38,6 @@ public class CardDebit extends BunqModel { */ public static final String FIELD_SECOND_LINE = "second_line"; public static final String FIELD_NAME_ON_CARD = "name_on_card"; - public static final String FIELD_PIN_CODE = "pin_code"; public static final String FIELD_ALIAS = "alias"; public static final String FIELD_TYPE = "type"; public static final String FIELD_PIN_CODE_ASSIGNMENT = "pin_code_assignment"; diff --git a/src/main/java/com/bunq/sdk/model/generated/endpoint/IdealMerchantTransaction.java b/src/main/java/com/bunq/sdk/model/generated/endpoint/IdealMerchantTransaction.java index 98b10d19..df699601 100644 --- a/src/main/java/com/bunq/sdk/model/generated/endpoint/IdealMerchantTransaction.java +++ b/src/main/java/com/bunq/sdk/model/generated/endpoint/IdealMerchantTransaction.java @@ -35,6 +35,7 @@ public class IdealMerchantTransaction extends BunqModel { */ public static final String FIELD_AMOUNT_REQUESTED = "amount_requested"; public static final String FIELD_ISSUER = "issuer"; + public static final String FIELD_CALLBACK_TYPE = "callback_type"; /** * Object type. diff --git a/src/main/java/com/bunq/sdk/model/generated/endpoint/MasterCardAction.java b/src/main/java/com/bunq/sdk/model/generated/endpoint/MasterCardAction.java index 6b28d8fb..96c7b5f3 100644 --- a/src/main/java/com/bunq/sdk/model/generated/endpoint/MasterCardAction.java +++ b/src/main/java/com/bunq/sdk/model/generated/endpoint/MasterCardAction.java @@ -204,6 +204,13 @@ public class MasterCardAction extends BunqModel { @SerializedName("eligible_whitelist_id") private Integer eligibleWhitelistId; + /** + * The secure code id for this mastercard action or null. + */ + @Expose + @SerializedName("secure_code_id") + private Integer secureCodeId; + public static BunqResponse get(ApiContext apiContext, Integer userId, Integer monetaryAccountId, Integer masterCardActionId) { return get(apiContext, userId, monetaryAccountId, masterCardActionId, new HashMap<>()); } @@ -499,6 +506,17 @@ public void setEligibleWhitelistId(Integer eligibleWhitelistId) { this.eligibleWhitelistId = eligibleWhitelistId; } + /** + * The secure code id for this mastercard action or null. + */ + public Integer getSecureCodeId() { + return this.secureCodeId; + } + + public void setSecureCodeId(Integer secureCodeId) { + this.secureCodeId = secureCodeId; + } + /** */ public boolean isAllFieldNull() { @@ -598,6 +616,10 @@ public boolean isAllFieldNull() { return false; } + if (this.secureCodeId != null) { + return false; + } + return true; } diff --git a/src/main/java/com/bunq/sdk/model/generated/endpoint/RequestResponse.java b/src/main/java/com/bunq/sdk/model/generated/endpoint/RequestResponse.java index 60904e1c..09de5060 100644 --- a/src/main/java/com/bunq/sdk/model/generated/endpoint/RequestResponse.java +++ b/src/main/java/com/bunq/sdk/model/generated/endpoint/RequestResponse.java @@ -167,7 +167,8 @@ public class RequestResponse extends BunqModel { private Geolocation geolocation; /** - * The type of the RequestInquiry. Can be DIRECT_DEBIT, DIRECT_DEBIT_B2B, IDEAL or INTERNAL. + * The type of the RequestInquiry. Can be DIRECT_DEBIT, DIRECT_DEBIT_B2B, IDEAL, SOFORT or + * INTERNAL. */ @Expose @SerializedName("type") @@ -458,7 +459,8 @@ public void setGeolocation(Geolocation geolocation) { } /** - * The type of the RequestInquiry. Can be DIRECT_DEBIT, DIRECT_DEBIT_B2B, IDEAL or INTERNAL. + * The type of the RequestInquiry. Can be DIRECT_DEBIT, DIRECT_DEBIT_B2B, IDEAL, SOFORT or + * INTERNAL. */ public String getType() { return this.type; diff --git a/src/main/java/com/bunq/sdk/model/generated/endpoint/TokenQrRequestSofort.java b/src/main/java/com/bunq/sdk/model/generated/endpoint/TokenQrRequestSofort.java new file mode 100644 index 00000000..0eb2c11f --- /dev/null +++ b/src/main/java/com/bunq/sdk/model/generated/endpoint/TokenQrRequestSofort.java @@ -0,0 +1,67 @@ +package com.bunq.sdk.model.generated.endpoint; + +import com.bunq.sdk.context.ApiContext; +import com.bunq.sdk.http.ApiClient; +import com.bunq.sdk.http.BunqResponse; +import com.bunq.sdk.http.BunqResponseRaw; +import com.bunq.sdk.model.core.BunqModel; +import com.bunq.sdk.model.core.MonetaryAccountReference; +import com.google.gson.annotations.Expose; +import com.google.gson.annotations.SerializedName; +import com.google.gson.stream.JsonReader; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import javax.lang.model.type.NullType; + +/** + * Using this call you can create a SOFORT Request assigned to your User by providing the Token + * of the request. + */ +public class TokenQrRequestSofort extends BunqModel { + + /** + * Endpoint constants. + */ + private static final String ENDPOINT_URL_CREATE = "user/%s/token-qr-request-sofort"; + + /** + * Field constants. + */ + public static final String FIELD_TOKEN = "token"; + + /** + * Object type. + */ + private static final String OBJECT_TYPE_POST = "RequestResponse"; + + public static BunqResponse create(ApiContext apiContext, Map requestMap, Integer userId) { + return create(apiContext, requestMap, userId, new HashMap<>()); + } + + /** + * Create a request from an SOFORT transaction. + */ + public static BunqResponse create(ApiContext apiContext, Map requestMap, Integer userId, Map customHeaders) { + ApiClient apiClient = new ApiClient(apiContext); + byte[] requestBytes = gson.toJson(requestMap).getBytes(); + BunqResponseRaw responseRaw = apiClient.post(String.format(ENDPOINT_URL_CREATE, userId), requestBytes, customHeaders); + + return fromJson(TokenQrRequestSofort.class, responseRaw, OBJECT_TYPE_POST); + } + + /** + */ + public boolean isAllFieldNull() { + return true; + } + + /** + */ + public static TokenQrRequestSofort fromJsonReader(JsonReader reader) { + return fromJsonReader(TokenQrRequestSofort.class, reader); + } + +} diff --git a/src/main/java/com/bunq/sdk/model/generated/endpoint/UserCompany.java b/src/main/java/com/bunq/sdk/model/generated/endpoint/UserCompany.java index 314b0a6c..58c599a1 100644 --- a/src/main/java/com/bunq/sdk/model/generated/endpoint/UserCompany.java +++ b/src/main/java/com/bunq/sdk/model/generated/endpoint/UserCompany.java @@ -9,6 +9,8 @@ import com.bunq.sdk.model.generated.object.Address; import com.bunq.sdk.model.generated.object.Amount; import com.bunq.sdk.model.generated.object.Avatar; +import com.bunq.sdk.model.generated.object.BunqId; +import com.bunq.sdk.model.generated.object.CardLimit; import com.bunq.sdk.model.generated.object.LabelUser; import com.bunq.sdk.model.generated.object.NotificationFilter; import com.bunq.sdk.model.generated.object.Pointer; @@ -233,6 +235,20 @@ public class UserCompany extends BunqModel { @SerializedName("session_timeout") private Integer sessionTimeout; + /** + * Card ids used for centralized card limits. + */ + @Expose + @SerializedName("card_ids") + private List cardIds; + + /** + * The centralized limits for user's cards. + */ + @Expose + @SerializedName("card_limits") + private List cardLimits; + /** * The amount the company can pay in the session without asking for credentials. */ @@ -565,6 +581,28 @@ public void setSessionTimeout(Integer sessionTimeout) { this.sessionTimeout = sessionTimeout; } + /** + * Card ids used for centralized card limits. + */ + public List getCardIds() { + return this.cardIds; + } + + public void setCardIds(List cardIds) { + this.cardIds = cardIds; + } + + /** + * The centralized limits for user's cards. + */ + public List getCardLimits() { + return this.cardLimits; + } + + public void setCardLimits(List cardLimits) { + this.cardLimits = cardLimits; + } + /** * The amount the company can pay in the session without asking for credentials. */ @@ -720,6 +758,14 @@ public boolean isAllFieldNull() { return false; } + if (this.cardIds != null) { + return false; + } + + if (this.cardLimits != null) { + return false; + } + if (this.dailyLimitWithoutConfirmationLogin != null) { return false; } diff --git a/src/main/java/com/bunq/sdk/model/generated/endpoint/UserPerson.java b/src/main/java/com/bunq/sdk/model/generated/endpoint/UserPerson.java index 192dca71..20a014ef 100644 --- a/src/main/java/com/bunq/sdk/model/generated/endpoint/UserPerson.java +++ b/src/main/java/com/bunq/sdk/model/generated/endpoint/UserPerson.java @@ -63,6 +63,8 @@ public class UserPerson extends BunqModel { public static final String FIELD_SUB_STATUS = "sub_status"; public static final String FIELD_LEGAL_GUARDIAN_ALIAS = "legal_guardian_alias"; public static final String FIELD_SESSION_TIMEOUT = "session_timeout"; + public static final String FIELD_CARD_IDS = "card_ids"; + public static final String FIELD_CARD_LIMITS = "card_limits"; public static final String FIELD_DAILY_LIMIT_WITHOUT_CONFIRMATION_LOGIN = "daily_limit_without_confirmation_login"; public static final String FIELD_COUNTER_BANK_IBAN = "counter_bank_iban"; public static final String FIELD_NOTIFICATION_FILTERS = "notification_filters"; diff --git a/src/main/java/com/bunq/sdk/model/generated/object/CardPinAssignment.java b/src/main/java/com/bunq/sdk/model/generated/object/CardPinAssignment.java index c6172fdb..6e061185 100644 --- a/src/main/java/com/bunq/sdk/model/generated/object/CardPinAssignment.java +++ b/src/main/java/com/bunq/sdk/model/generated/object/CardPinAssignment.java @@ -34,10 +34,12 @@ public class CardPinAssignment extends BunqModel { */ @Expose @SerializedName("monetary_account_id") - private String monetaryAccountId; + private Integer monetaryAccountId; - public CardPinAssignment(String type) { + public CardPinAssignment(String type, String pinCode, Integer monetaryAccountId) { this.type = type; + this.pinCode = pinCode; + this.monetaryAccountId = monetaryAccountId; } /** @@ -54,11 +56,11 @@ public void setType(String type) { /** * The ID of the monetary account to assign to this pin for the card. */ - public String getMonetaryAccountId() { + public Integer getMonetaryAccountId() { return this.monetaryAccountId; } - public void setMonetaryAccountId(String monetaryAccountId) { + public void setMonetaryAccountId(Integer monetaryAccountId) { this.monetaryAccountId = monetaryAccountId; } diff --git a/src/test/java/com/bunq/sdk/model/generated/endpoint/CardDebitTest.java b/src/test/java/com/bunq/sdk/model/generated/endpoint/CardDebitTest.java index 968dffdd..684f39d2 100644 --- a/src/test/java/com/bunq/sdk/model/generated/endpoint/CardDebitTest.java +++ b/src/test/java/com/bunq/sdk/model/generated/endpoint/CardDebitTest.java @@ -3,6 +3,7 @@ import com.bunq.sdk.BunqSdkTestBase; import com.bunq.sdk.Config; import com.bunq.sdk.context.ApiContext; +import com.bunq.sdk.model.generated.object.CardPinAssignment; import com.bunq.sdk.model.generated.object.Pointer; import org.junit.BeforeClass; import org.junit.Test; @@ -34,6 +35,7 @@ public class CardDebitTest extends BunqSdkTestBase { private static final int RADIX_DIGITS_AND_LATIN_LETTERS = 36; private static final int NUM_BITS_23_DECIMAL_DIGITS = 76; private static final int FIRST_INDEX = 0; + private static final String CARD_PIN_ASSIGNMENT_TYPE_PRIMARY = "PRIMARY"; /** * The name that is going to be shown on the card @@ -70,10 +72,16 @@ private static String generateRandomSecondLine() { public void orderNewMaestroCardTest() throws Exception { String secondLine = generateRandomSecondLine(); + CardPinAssignment cardPinAssignment = new CardPinAssignment( + CARD_PIN_ASSIGNMENT_TYPE_PRIMARY, + PIN_CODE, + Config.getMonetaryAccountId() + ); + HashMap requestMap = new HashMap<>(); requestMap.put(CardDebit.FIELD_SECOND_LINE, secondLine); requestMap.put(CardDebit.FIELD_NAME_ON_CARD, nameOnCard); - requestMap.put(CardDebit.FIELD_PIN_CODE, PIN_CODE); + requestMap.put(CardDebit.FIELD_PIN_CODE_ASSIGNMENT, new CardPinAssignment[]{cardPinAssignment}); requestMap.put(CardDebit.FIELD_ALIAS, alias); CardDebit cardDebit = CardDebit.create(apiContext, requestMap, userId).getValue();