diff --git a/src/main/java/co/omise/models/Source.java b/src/main/java/co/omise/models/Source.java index fdaf148e..dbf71a56 100644 --- a/src/main/java/co/omise/models/Source.java +++ b/src/main/java/co/omise/models/Source.java @@ -25,6 +25,7 @@ public class Source extends Model { private ChargeStatus chargeStatus; private String currency; private String email; + private String ip; private FlowType flow; @JsonProperty("installment_term") private long installmentTerm; @@ -89,10 +90,18 @@ public String getEmail() { return this.email; } + public String getIp() { + return this.ip; + } + public void setEmail(String email) { this.email = email; } + public void setIp(String ip) { + this.ip = ip; + } + public FlowType getFlow() { return this.flow; } @@ -217,6 +226,8 @@ public static class CreateRequestBuilder extends RequestBuilder { private String currency; @JsonProperty private String email; + @JsonProperty + private String ip; @JsonProperty("installment_term") private long installmentTerm; @JsonProperty("mobile_number") @@ -282,6 +293,11 @@ public CreateRequestBuilder email(String email) { return this; } + public CreateRequestBuilder ip(String ip) { + this.ip = ip; + return this; + } + public CreateRequestBuilder installmentTerm(long installmentTerm) { this.installmentTerm = installmentTerm; return this; diff --git a/src/main/java/co/omise/models/SourceType.java b/src/main/java/co/omise/models/SourceType.java index eb4bfb74..087e60b3 100644 --- a/src/main/java/co/omise/models/SourceType.java +++ b/src/main/java/co/omise/models/SourceType.java @@ -82,7 +82,9 @@ public enum SourceType { @JsonProperty("atome") Atome, @JsonProperty("duitnow_obw") - DuitNowOBW; + DuitNowOBW, + @JsonProperty("wechat_pay") + WeChatPay; @Override public String toString() { diff --git a/src/main/java/co/omise/requests/Request.java b/src/main/java/co/omise/requests/Request.java index 3a8feb61..0cde9b29 100644 --- a/src/main/java/co/omise/requests/Request.java +++ b/src/main/java/co/omise/requests/Request.java @@ -1,9 +1,12 @@ package co.omise.requests; +import java.io.IOException; + import co.omise.Client; import co.omise.models.OmiseObjectBase; import okhttp3.HttpUrl; import okhttp3.RequestBody; +import okio.Buffer; /** * Request is a base class, all extending classes would act as a holder class that encapsulate the information @@ -70,6 +73,17 @@ public RequestBody getPayload() { return payload; } + /** + * Gets payload (request params). + * + * @return the payload as a readable string + */ + public String getPayloadToString() throws IOException { + final Buffer buffer = new Buffer(); + payload.writeTo(buffer); + return buffer.readUtf8(); + } + public ResponseType getType() { return type; } diff --git a/src/test/java/co/omise/live/LiveChargeRequestTest.java b/src/test/java/co/omise/live/LiveChargeRequestTest.java index 42eba0b6..0b510eb8 100644 --- a/src/test/java/co/omise/live/LiveChargeRequestTest.java +++ b/src/test/java/co/omise/live/LiveChargeRequestTest.java @@ -637,4 +637,36 @@ public void testLiveChargeWithDuitNowOBW() throws IOException, OmiseException { assertEquals("affin", charge.getSource().getBank()); assertEquals(FlowType.Redirect, charge.getSource().getFlow()); } + @Test + @Ignore("only hit the network when we need to.") + public void testLiveChargeWithWechatPay() throws IOException, OmiseException { + + Request sourceRequest = new Source.CreateRequestBuilder() + .type(SourceType.WeChatPay) + .amount(15000) + .currency("THB") + .ip("127.0.0.1") + .build(); + + Source source = client.sendRequest(sourceRequest); + + Request createChargeRequest = + new Charge.CreateRequestBuilder() + .source(source.getId()) + .amount(15000) + .currency("THB") + .returnUri("http://example.com/") + .build(); + + Charge charge = client.sendRequest(createChargeRequest); + + System.out.println("created charge: " + charge.getId()); + + assertNotNull(charge.getId()); + assertEquals(15000, charge.getAmount()); + assertEquals("THB", charge.getCurrency()); + assertEquals("127.0.0.1", charge.getSource().getIp()); + assertEquals(SourceType.WeChatPay, charge.getSource().getType()); + assertEquals(FlowType.AppRedirect, charge.getSource().getFlow()); + } } diff --git a/src/test/java/co/omise/models/SourceTypeTest.java b/src/test/java/co/omise/models/SourceTypeTest.java index ef8061d7..bcf4b3b6 100644 --- a/src/test/java/co/omise/models/SourceTypeTest.java +++ b/src/test/java/co/omise/models/SourceTypeTest.java @@ -36,5 +36,6 @@ public void checkStringValue() { assertEquals("mobile_banking_ktb", SourceType.MobileBankingKtb.toString()); assertEquals("atome", SourceType.Atome.toString()); assertEquals("duitnow_obw", SourceType.DuitNowOBW.toString()); + assertEquals("wechat_pay", SourceType.WeChatPay.toString()); } } diff --git a/src/test/java/co/omise/requests/SourceRequestTest.java b/src/test/java/co/omise/requests/SourceRequestTest.java index 01b4c6a2..9cd3652b 100644 --- a/src/test/java/co/omise/requests/SourceRequestTest.java +++ b/src/test/java/co/omise/requests/SourceRequestTest.java @@ -1,5 +1,8 @@ package co.omise.requests; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + import co.omise.models.OmiseException; import co.omise.models.Source; import co.omise.models.SourceType; @@ -45,4 +48,40 @@ public void testCreateInstallment() throws IOException, OmiseException { assertEquals("thb", source.getCurrency()); assertEquals("redirect", source.getFlow().toString()); } + + @Test + public void testWeChatPaySourceIpMustBeNullWhenEmpty() throws IOException { + Request request = new TestSourceRequestBuilder() + .type(SourceType.WeChatPay) + .amount(500000) + .currency("thb") + .build(); + + // The key must exist in the request with a value of null + ObjectMapper objectMapper = new ObjectMapper(); + JsonNode rootNode = objectMapper.readTree(request.getPayloadToString()); + + assertTrue(rootNode.has("ip")); + assertNull(rootNode.get("ip").textValue()); + + } + + @Test + public void testWeChatPaySourceIpMustHaveValueWhenPassed() throws IOException { + String ip = "127.0.0.1"; + Request request = new TestSourceRequestBuilder() + .type(SourceType.WeChatPay) + .amount(500000) + .ip(ip) + .currency("thb") + .build(); + + // The key must exist in the request with the passed value + ObjectMapper objectMapper = new ObjectMapper(); + JsonNode rootNode = objectMapper.readTree(request.getPayloadToString()); + + assertTrue(rootNode.has("ip")); + assertEquals(rootNode.get("ip").textValue(), ip); + + } }