/** * Get Recurly.js Signature * See spec here: https://docs.recurly.com/deprecated-api-docs/recurlyjs/signatures * <p> * Returns a signature key for use with recurly.js BuildSubscriptionForm. * * @param privateJsKey recurly.js private key * @return signature string on success, null otherwise */ public static String getRecurlySignature(String privateJsKey) { return getRecurlySignature(privateJsKey, new ArrayList<String>()); }
/** * Get Recurly.js Signature with extra parameter strings in the format "[param]=[value]" * See spec here: https://docs.recurly.com/deprecated-api-docs/recurlyjs/signatures * <p> * Returns a signature key for use with recurly.js BuildSubscriptionForm. * * @param privateJsKey recurly.js private key * @param unixTime Unix timestamp, i.e. elapsed seconds since Midnight, Jan 1st 1970, UTC * @param nonce A randomly generated string (number used only once) * @param extraParams extra parameters to include in the signature * @return signature string on success, null otherwise */ public static String getRecurlySignature(String privateJsKey, Long unixTime, String nonce, List<String> extraParams) { // Mandatory parameters shared by all signatures (as per spec) extraParams = (extraParams == null) ? new ArrayList<String>() : extraParams; extraParams.add(String.format(PARAMETER_FORMAT, TIMESTAMP_PARAMETER, unixTime)); extraParams.add(String.format(PARAMETER_FORMAT, NONCE_PARAMETER, nonce)); String protectedParams = Joiner.on(PARAMETER_SEPARATOR).join(extraParams); return generateRecurlyHMAC(privateJsKey, protectedParams) + "|" + protectedParams; }
/** * Get Recurly.js Signature * See spec here: https://docs.recurly.com/deprecated-api-docs/recurlyjs/signatures * <p> * Returns a signature key for use with recurly.js BuildSubscriptionForm. * * @param privateJsKey recurly.js private key * @param extraParams extra parameters to include in the signature * @return signature string on success, null otherwise */ public static String getRecurlySignature(String privateJsKey, List<String> extraParams) { final long unixTime = System.currentTimeMillis() / 1000L; final String uuid = UUID.randomUUID().toString().replaceAll("-", ""); return getRecurlySignature(privateJsKey, unixTime, uuid, extraParams); }
@Test(groups = "fast") public void testGetRecurlySignature() throws Exception { final String jsPrivateKey = "0123456789abcdef0123456789abcdef"; final Long mockUnixTime = 1329942896L; final String mockNonce = "unique"; final String expected = "0da7006b2093fd3d2d24a1f1f414bd9a5810a689|timestamp=1329942896&nonce=unique"; String actual = RecurlyJs.getRecurlySignature(jsPrivateKey, mockUnixTime, mockNonce, null); Assert.assertEquals(actual, expected); }
@Test(groups = "fast") public void testGetRecurlySignature() throws Exception { final String jsPrivateKey = "0123456789abcdef0123456789abcdef"; final Long mockUnixTime = 1329942896L; final String mockNonce = "unique"; final String expected = "0da7006b2093fd3d2d24a1f1f414bd9a5810a689|timestamp=1329942896&nonce=unique"; String actual = RecurlyJs.getRecurlySignature(jsPrivateKey, mockUnixTime, mockNonce, null); Assert.assertEquals(actual, expected); }
@Test(groups = "fast") public void testGetRecurlySignatureCustomParams() throws Exception { final String PARAMETER_FORMAT = "%s=%s"; final String SUBSCRIPTION_PARAMETER = "subscription%5Bplan_code%5D"; final String ACCOUNT_CODE_PARAMETER = "account%5Baccount_code%5D"; final String jsPrivateKey = "0123456789abcdef0123456789abcdef"; final Long mockUnixTime = 1329942896L; final String mockNonce = "unique"; final String expected = "aa2743b6e686bf50940881733f2da37b551804f5|subscription%5Bplan_code%5D=testsub&account%5Baccount_code%5D=johndoe123×tamp=1329942896&nonce=unique"; ArrayList<String> customParams = new ArrayList<String>(); customParams.add(String.format(PARAMETER_FORMAT, SUBSCRIPTION_PARAMETER, "testsub")); customParams.add(String.format(PARAMETER_FORMAT, ACCOUNT_CODE_PARAMETER, "johndoe123")); String actual = RecurlyJs.getRecurlySignature(jsPrivateKey, mockUnixTime, mockNonce, customParams); Assert.assertEquals(actual, expected); } }
@Test(groups = "fast") public void testGetRecurlySignatureCustomParams() throws Exception { final String PARAMETER_FORMAT = "%s=%s"; final String SUBSCRIPTION_PARAMETER = "subscription%5Bplan_code%5D"; final String ACCOUNT_CODE_PARAMETER = "account%5Baccount_code%5D"; final String jsPrivateKey = "0123456789abcdef0123456789abcdef"; final Long mockUnixTime = 1329942896L; final String mockNonce = "unique"; final String expected = "aa2743b6e686bf50940881733f2da37b551804f5|subscription%5Bplan_code%5D=testsub&account%5Baccount_code%5D=johndoe123×tamp=1329942896&nonce=unique"; ArrayList<String> customParams = new ArrayList<String>(); customParams.add(String.format(PARAMETER_FORMAT, SUBSCRIPTION_PARAMETER, "testsub")); customParams.add(String.format(PARAMETER_FORMAT, ACCOUNT_CODE_PARAMETER, "johndoe123")); String actual = RecurlyJs.getRecurlySignature(jsPrivateKey, mockUnixTime, mockNonce, customParams); Assert.assertEquals(actual, expected); } }