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)
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()
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)
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)
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()
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