Esempio n. 1
0
    def cstore(self, payloads):
        response = ResponseBuilder()
        if not all(
                isinstance(string, str) for string in [
                    payloads['order_id'],
                    payloads['first_name'],
                    payloads['last_name'],
                    payloads['email'],
                    payloads['phone'],
                ]) and not isinstance(payloads['gross_amount'], int):
            return response.build_invalid_payload_response()

        # get referral by order id
        ref = self.get_order_referal(payloads['order_id'])

        details = self.get_order_details(payloads['order_id'], ref)

        data = {}
        data['payment_type'] = payloads['payment_type']
        data['transaction_details'] = {}
        data['transaction_details']['gross_amount'] = payloads['gross_amount']
        data['transaction_details']['order_id'] = payloads['order_id']
        data['cstore'] = {}
        data['cstore']['store'] = 'Indomaret'
        data['cstore']['message'] = 'dev summit ticket transaction'
        data['customer_details'] = {}
        data['customer_details']['first_name'] = payloads['first_name']
        data['customer_details']['last_name'] = payloads['last_name']
        data['customer_details']['email'] = payloads['email']
        data['customer_details']['phone'] = payloads['phone']
        data['details'] = details

        return self.send_to_midtrans_api(data)
Esempio n. 2
0
	def update(self, id):
		response = ResponseBuilder()
		# get the transaction id from payment table
		payment = db.session.query(Payment).filter_by(id=id).first()
		if payment is not None:
			order = payment.order.as_dict()
			payment = payment.as_dict()
		else:
			return response.set_error(True).set_message('payment not found').build()

		payment_status = requests.get(
			url + str(payment['order_id']) + '/status',
			headers=self.headers
		)

		status = payment_status.json()

		if status['status_code'] in ['200', '201', '407', '412']:

			if (payment['transaction_status'] != status['transaction_status']):
				payment = db.session.query(Payment).filter_by(id=id)
				payment.update({
					'updated_at': datetime.datetime.now(),
					'transaction_status': status['transaction_status']
				})

				db.session.commit()
				if (payment.first().as_dict()['transaction_status'] == 'expire'):
					# on payment success
					self.save_paid_ticket(order)
			return response.set_data(status).build()

		return response.build_invalid_payload_response()
Esempio n. 3
0
	def internet_banking(self, payloads):
		response = ResponseBuilder()
		if not all(isinstance(string, str) for string in [
			payloads['order_id'],
			payloads['first_name'],
			payloads['last_name'],
			payloads['email'],
			payloads['phone']
		]) and not isinstance(payloads['gross_amount'], int):
			return response.build_invalid_payload_response()

		# check for referal discount
		ref = self.get_order_referal(payloads['order_id'])
		details = self.get_order_details(payloads['order_id'], ref)

		data = {}
		data['payment_type'] = payloads['payment_type']
		data['transaction_details'] = {}
		data['transaction_details']['order_id'] = payloads['order_id']
		data['transaction_details']['gross_amount'] = payloads['gross_amount']
		data['item_details'] = details
		data['customer_details'] = {}
		data['customer_details']['first_name'] = payloads['first_name']
		data['customer_details']['last_name'] = payloads['last_name']
		data['customer_details']['email'] = payloads['email']
		data['customer_details']['phone'] = payloads['phone']

		if (payloads['payment_type'] == 'cimb_clicks'):
			data['cimb_clicks'] = {}
			data['cimb_clicks']['description'] = payloads['description']
			data['bank'] = 'cimb'

		if (payloads['payment_type'] == 'bca_klikpay'):
			data['bca_klikpay'] = {}
			data['bca_klikpay']['type'] = 1
			data['bca_klikpay']['description'] = 'Devsummit tickets purchase'
			data['bank'] = 'bca'

		if (payloads['payment_type'] == 'bca_klikbca'):
			data['bca_klikbca'] = {}
			data['bca_klikbca']['user_id'] = payloads['user_id']
			data['bca_klikbca']['description'] = payloads['description']
			data['bank'] = 'bca'

		if (payloads['payment_type'] == 'mandiri_clickpay'):
			data['mandiri_clickpay'] = {}
			data['mandiri_clickpay']['card_number'] = payloads['card_number']
			data['mandiri_clickpay']['input1'] = payloads['card_number'][6:]
			data['mandiri_clickpay']['input2'] = payloads['gross_amount']
			data['mandiri_clickpay']['input3'] = payloads['input3']
			data['mandiri_clickpay']['token'] = payloads['token']
			data['bank'] = 'mandiri'

		return self.send_to_midtrans_api(data)
Esempio n. 4
0
    def credit_payment(self, payloads):
        response = ResponseBuilder()
        if not all(
                isinstance(string, str) for string in [
                    payloads['order_id'], payloads['email'],
                    payloads['first_name'], payloads['last_name'],
                    payloads['phone'], payloads['card_number'],
                    payloads['card_exp_month'], payloads['card_exp_year'],
                    payloads['card_cvv'], payloads['client_key']
                ]) and not isinstance(payloads['gross_amount'], int):
            return response.build_invalid_payload_response()

        # get the token id first
        token_id = requests.get(
            url + 'card/register?' + 'card_number=' + payloads['card_number'] +
            '&card_exp_month=' + payloads['card_exp_month'] +
            '&card_exp_year=' + payloads['card_exp_year'] + '&card_cvv=' +
            payloads['card_cvv'] + '&bank=' + payloads['bank'] + '&secure=' +
            'true' + '&gross_amount=' + str(payloads['gross_amount']) +
            '&client_key=' + payloads['client_key'],
            headers=self.headers)
        token_id = token_id.json()
        # prepare data
        data = {}
        if 'status_code' in token_id and token_id['status_code'] == '200':
            data['saved_token_id'] = token_id['saved_token_id']
            data['masked_card'] = token_id['masked_card']
        else:
            return response.set_message(
                token_id['validation_messages'][0]).set_error(True).build()

        # check for referal discount
        ref = self.get_order_referal(payloads['order_id'])
        # generate order details payload
        item_details = self.get_order_details(payloads['order_id'], ref)

        data['payment_type'] = payloads['payment_type']
        data['transaction_details'] = {}
        data['transaction_details']['order_id'] = payloads['order_id']
        data['transaction_details']['gross_amount'] = payloads['gross_amount']
        data['credit_card'] = {}
        data['credit_card']['token_id'] = token_id['saved_token_id']
        data['item_details'] = item_details
        data['customer_details'] = {}
        data['customer_details']['first_name'] = payloads['first_name']
        data['customer_details']['last_name'] = payloads['last_name']
        data['customer_details']['email'] = payloads['email']
        data['customer_details']['phone'] = payloads['phone']

        return self.send_to_midtrans_api(data)
Esempio n. 5
0
    def authorize(self, payloads):
        response = ResponseBuilder()
        if not all(
                isinstance(string, str) for string in
            [payloads['payment_type'], payloads['type'], payloads['order_id']
             ]) and not isinstance(payloads['gross_amount'], int):
            return response.build_invalid_payload_response()

        token = db.session.query(Payment).filter_by(
            order_id=payloads['order_id']).first()
        token = token.as_dict()

        data = {}
        data['payment_type'] = payloads['payment_type']
        data['transaction_details'] = {}
        data['transaction_details']['order_id'] = payloads['order_id']
        data['transaction_details']['gross_amount'] = payloads['gross_amount']
        data['credit_card'] = {}
        data['credit_card']['token_id'] = token['saved_token_id']
        data['credit_card']['type'] = payloads['type']

        endpoint = url + str(payloads['order_id']) + '/approve'
        transaction_status = requests.post(endpoint,
                                           headers=self.headers,
                                           json=data)
        transaction_status = transaction_status.json()

        if 'status_code' in transaction_status and transaction_status[
                'status_code'] in ['200', '201']:
            payment = db.session.query(Payment).filter_by(
                order_id=transaction_status['order_id'])
            payment.update({
                'updated_at': datetime.datetime.now(),
                'fraud_status': transaction_status['fraud_status']
            })

            db.session.commit()

            return response.set_data(transaction_status).set_message(
                'Authorization success').build()

        else:
            return response.set_error(True).set_data(
                transaction_status).set_message(
                    'change fraud status is failed').build()
Esempio n. 6
0
    def bank_transfer(self, payloads):
        response = ResponseBuilder()
        payloads['gross_amount'] = int(payloads['gross_amount'])
        # check for referal discount
        ref = self.get_order_referal(payloads['order_id'])
        # generate order details payload
        details = self.get_order_details(payloads['order_id'], ref)

        if (payloads['bank'] == 'bca'):

            # payloads validation for BCA virtual account
            if not all(
                    isinstance(string, str) for string in [
                        payloads['payment_type'],
                        payloads['order_id'],
                        payloads['email'],
                        payloads['first_name'],
                        payloads['last_name'],
                        payloads['phone'],
                        # payloads['va_number']
                    ]) and not isinstance(payloads['gross_amount'], int):
                return response.build_invalid_payload_response()

            # todo create payload for BCA virtual account
            data = {}
            data['payment_type'] = payloads['payment_type']
            data['transaction_details'] = {}
            data['transaction_details']['gross_amount'] = payloads[
                'gross_amount']
            data['transaction_details']['order_id'] = payloads['order_id']
            data['customer_details'] = {}
            data['customer_details']['email'] = payloads['email']
            data['customer_details']['first_name'] = payloads['first_name']
            data['customer_details']['last_name'] = payloads['last_name']
            data['customer_details']['phone'] = payloads['phone']
            data['item_details'] = details
            data['bank_transfer'] = {}
            data['bank_transfer']['bank'] = payloads['bank']
            data['bank_transfer']['va_number'] = VA_NUMBER[payloads['bank']]
            data['bank_transfer']['free_text'] = {}
            data['bank_transfer']['free_text']['inquiry'] = [{
                "id":
                "Free Text ID Free Text ID Free Text ID",
                "en":
                "Free Text EN Free Text EN Free Text EN"
            }]
            data['bank_transfer']['free_text']['payment'] = [{
                "id":
                "Free Text ID Free Text ID Free Text ID",
                "en":
                "Free Text EN Free Text EN Free Text EN"
            }]

        if (payloads['bank'] == 'permata'):
            # payload validation for permata
            if not all(
                    isinstance(string, str) for string in [
                        payloads['payment_type'], payloads['order_id']
                    ]) and not isinstance(payloads['gross_amount'], int):
                return response.build_invalid_payload_response()

            # create paylod for midtrans
            data = {}
            data['payment_type'] = payloads['payment_type']
            data['bank_transfer'] = {}
            data['bank_transfer']['bank'] = payloads['bank']
            data['transaction_details'] = {}
            data['transaction_details']['order_id'] = payloads['order_id']
            data['transaction_details']['gross_amount'] = payloads[
                'gross_amount']

        if (payloads['bank'] == 'bni'):
            # payload validation for bni
            if not all(
                    isinstance(string, str) for string in [
                        payloads['payment_type'], payloads['email'],
                        payloads['first_name'], payloads['last_name'],
                        payloads['phone']
                    ]) and not isinstance(payloads['gross_amount'], int):
                return response.build_invalid_payload_response()

            # create payload for midtrans
            data = {}
            data['payment_type'] = payloads['payment_type']
            data['bank_transfer'] = {}
            data['bank_transfer']['bank'] = payloads['bank']
            data['bank_transfer']['va_number'] = VA_NUMBER[payloads['bank']]
            data['customer_details'] = {}
            data['customer_details']['email'] = payloads['email']
            data['customer_details']['first_name'] = payloads['first_name']
            data['customer_details']['last_name'] = payloads['last_name']
            data['customer_details']['phone'] = payloads['phone']
            data['item_details'] = details
            data['transaction_details'] = {}
            data['transaction_details']['order_id'] = payloads['order_id']
            data['transaction_details']['gross_amount'] = payloads[
                'gross_amount']

        if (payloads['bank'] == 'mandiri_bill'):
            # payload validation for mandiri
            if not all(
                    isinstance(string, str) for string in [
                        payloads['payment_type'],
                    ]) and not isinstance(payloads['gross_amount'], int):
                return response.build_invalid_payload_response()

            # create payload for midtrans
            data = {}
            data['payment_type'] = payloads['payment_type']
            data['item_details'] = details
            data['transaction_details'] = {}
            data['transaction_details']['order_id'] = payloads['order_id']
            data['transaction_details']['gross_amount'] = payloads[
                'gross_amount']
            data['echannel'] = {}
            data['echannel']['bill_info1'] = 'Payment for:'
            data['echannel']['bill_info2'] = 'DevSummit Indonesia'

        midtrans_api_response = self.send_to_midtrans_api(data)

        return midtrans_api_response