예제 #1
0
 def test_decodeSignedData_nonBase64Data(self):
     with self.assertRaises(SignatureError) as cm:
         decodeSignedData(
             self.merchantkey,
             Ds_MerchantParameters = '3ww',
             Ds_Signature = self.signature,
             Ds_SignatureVersion = self.signatureversion,
             )
     msg = cm.exception.args[0]
     self.assertEqual(msg, 'Unable to decode base 64')
예제 #2
0
 def test_decodeSignedData_badVersion(self):
     with self.assertRaises(SignatureError) as cm:
         decodeSignedData(
             self.merchantkey,
             Ds_MerchantParameters = self.encodeddata,
             Ds_Signature = self.signature,
             Ds_SignatureVersion = 'bad',
             )
     msg = cm.exception.args[0]
     self.assertEqual(msg, 'Unsupported signature version')
예제 #3
0
 def test_decodeSignedData_badSignature(self):
     json_data = '{"Ds_Order":"777"}'
     with self.assertRaises(SignatureError) as cm:
         decodeSignedData(
             self.merchantkey,
             Ds_MerchantParameters = base64.urlsafe_b64encode(json_data),
             Ds_Signature = self.signature,
             Ds_SignatureVersion = self.signatureversion,
             )
     msg = cm.exception.args[0]
     self.assertEqual(msg, 'Bad signature')
예제 #4
0
 def test_decodeSignedData_misingOrder(self):
     json_data = '{}'
     with self.assertRaises(SignatureError) as cm:
         decodeSignedData(
             self.merchantkey,
             Ds_MerchantParameters = base64.urlsafe_b64encode(json_data),
             Ds_Signature = self.signature,
             Ds_SignatureVersion = self.signatureversion,
             )
     msg = cm.exception.args[0]
     self.assertEqual(msg, 'Missing Ds_Order attribute')
예제 #5
0
 def test_decodeSignedData_badJson(self):
     json_data = "{bad json}"
     with self.assertRaises(SignatureError) as cm:
         decodeSignedData(
             self.merchantkey,
             Ds_MerchantParameters = base64.urlsafe_b64encode(json_data),
             Ds_Signature = self.signature,
             Ds_SignatureVersion = self.signatureversion,
             )
     msg = cm.exception.args[0]
     self.assertEqual(msg, 'Bad JSON format')
예제 #6
0
 def test_decodeSignedData_badParam(self):
     json_data = '{"Ds_Order":"666", "Bad":"value"}'
     base64_data = base64.urlsafe_b64encode(json_data)
     signature = signPayload(self.secret, base64_data, urlsafe=True)
     with self.assertRaises(SignatureError) as cm:
         decodeSignedData(
             self.merchantkey,
             Ds_MerchantParameters = base64_data,
             Ds_Signature = signature,
             Ds_SignatureVersion = self.signatureversion,
             )
     msg = cm.exception.args[0]
     self.assertEqual(msg, "Bad parameter 'Bad'")
예제 #7
0
 def test_decodeSignedData_whenAllOk(self):
     data = decodeSignedData(
         self.merchantkey,
         Ds_MerchantParameters = self.encodeddata,
         Ds_Signature = self.signature,
         Ds_SignatureVersion = self.signatureversion,
         )
     self.assertEqual(data, dict(
         Ds_Order = '666',
         ))
예제 #8
0
 def test_decodeSignedData_unicode(self):
     json_data = '{"DS_ORDER":"666"}'
     base64_data = base64.urlsafe_b64encode(json_data)
     signature = signPayload(self.secret, base64_data, urlsafe=True)
     data = decodeSignedData(
         self.merchantkey,
         Ds_MerchantParameters = base64_data.decode('ascii'),
         Ds_Signature = signature.decode('ascii'),
         Ds_SignatureVersion = self.signatureversion.decode('ascii'),
         )
     self.assertEqual(data, dict(
         Ds_Order = '666',
         ))
예제 #9
0
    def test_decodeSignedData_realData(self):
        data = decodeSignedData(
            config.redsystest['merchantkey'],
            Ds_Signature = u'k6jn15PV1PyoTOAkiHVIPixOERFT9CeKOERtAJkcsMg=',
            Ds_MerchantParameters = u'eyJEc19EYXRlIjoiMTklMkYwMSUyRjIwMTYiLCJEc19Ib3VyIjoiMjIlM0EwNCIsIkRzX1NlY3VyZVBheW1lbnQiOiIxIiwiRHNfQ2FyZF9Db3VudHJ5IjoiNzI0IiwiRHNfQW1vdW50IjoiMTAwMDAiLCJEc19DdXJyZW5jeSI6Ijk3OCIsIkRzX09yZGVyIjoiMjAxNjQ5NDU1YjZmIiwiRHNfTWVyY2hhbnRDb2RlIjoiMTQyMDAzNzQ4IiwiRHNfVGVybWluYWwiOiIwMDEiLCJEc19SZXNwb25zZSI6IjAwMDAiLCJEc19NZXJjaGFudERhdGEiOiJDT0JSQU1FTlQrUVVPVEErU09DSSIsIkRzX1RyYW5zYWN0aW9uVHlwZSI6IjAiLCJEc19Db25zdW1lckxhbmd1YWdlIjoiMyIsIkRzX0F1dGhvcmlzYXRpb25Db2RlIjoiMjAxMzg4In0=',
            Ds_SignatureVersion = u'HMAC_SHA256_V1',
            )
        self.assertEqual({
            'Ds_Amount': u'10000',
            'Ds_AuthorisationCode': u'201388',
            'Ds_Card_Country': u'724',
            'Ds_ConsumerLanguage': u'3',
            'Ds_Currency': u'978',
            'Ds_Date': u'19%2F01%2F2016',
            'Ds_Hour': u'22%3A04',
            'Ds_MerchantCode': u'142003748',
            'Ds_MerchantData': u'COBRAMENT+QUOTA+SOCI',
            'Ds_Order': u'201649455b6f',
            'Ds_Response': u'0000',
            'Ds_SecurePayment': u'1',
            'Ds_Terminal': u'001',
            'Ds_TransactionType': u'0',
            }, data)

        self.assertTrue('Ds_Order' in data)

        # TODO
        failingopdata = {
            "Ds_Date":"19%2F01%2F2016",
            "Ds_Hour":"23%3A02",
            "Ds_SecurePayment":"0",
            "Ds_Card_Country":"0",
            "Ds_Amount":"10000",
            "Ds_Currency":"978",
            "Ds_Order":"2016b99271e7",
            "Ds_MerchantCode":"142003748",
            "Ds_Terminal":"001",
            "Ds_Response":"0180",
            "Ds_MerchantData":"COBRAMENT+QUOTA+SOCI",
            "Ds_TransactionType":"0",
            "Ds_ConsumerLanguage":"3",
            "Ds_ErrorCode":"SIS0093",
            "Ds_AuthorisationCode":"++++++",
            }