09/10/22 - 20H30

master
ChérifBALDE 2022-10-09 20:32:32 +02:00 committed by cherif
parent 832299ca52
commit 3de2fffdbd
4 changed files with 171 additions and 16 deletions

View File

@ -168,6 +168,20 @@ def add_payement_mode(diction):
if (tmp_count <= 0): if (tmp_count <= 0):
return False, "Les identifiants sont incorrectes" return False, "Les identifiants sont incorrectes"
tmp_account = coll_tmp.find({'pwd': str(my_pwd), 'active': '1', 'token':str(my_secret)})
"""
Stripe : recuperation du stripe_account_id
"""
partner_stripe_account_id = tmp_account[0]['stripe_account_id']
"""
Recuperation du PaymentMethod s'il en a un : 'stripe_paymentmethod_id'
"""
stripe_paymentmethod_id = ""
if ("stripe_paymentmethod_id" in tmp_account[0].keys()):
if tmp_account[0]['stripe_paymentmethod_id']:
stripe_paymentmethod_id = tmp_account[0]['stripe_paymentmethod_id']
user_recid = "None" user_recid = "None"
@ -191,6 +205,7 @@ def add_payement_mode(diction):
return False, "Impossible d'ajouter le mode de payement" return False, "Impossible d'ajouter le mode de payement"
coll_name = MYSY_GV.dbname['payement_mode'] coll_name = MYSY_GV.dbname['payement_mode']
new_data = {} new_data = {}
new_data['valide'] = "1" new_data['valide'] = "1"
@ -257,6 +272,38 @@ def add_payement_mode(diction):
str(inspect.stack()[0][3]) + " : Les données de la carte sont incorrectes") str(inspect.stack()[0][3]) + " : Les données de la carte sont incorrectes")
return False, "Impossible d'ajouter le mode de paiement. Les données de la carte sont incorrectes" return False, "Impossible d'ajouter le mode de paiement. Les données de la carte sont incorrectes"
# SI stripe_paymentmethod_id est vide alors on créé la carte
print(" #### Creation de la carte dans STRIPE")
tmp_tab = str(new_data['date_exp_carte']).split("/")
if( len(tmp_tab) != 2):
mycommon.myprint(
str(inspect.stack()[0][3]) + " : La date d'expiration de la carte est incorrecte")
return False, "Impossible d'ajouter le mode de paiement. Les données de la carte sont incorrectes"
new_stripe_card = {}
new_stripe_card['customerid'] = partner_stripe_account_id
new_stripe_card['number'] = new_data['num_carte']
new_stripe_card['exp_month'] = str(tmp_tab[0])
new_stripe_card['exp_year'] = str(tmp_tab[1])
new_stripe_card['cvc'] = new_data['cvv_carte']
new_stripe_card['stripe_paymentmethod_id'] = stripe_paymentmethod_id
print("### la carte à créer est "+str(new_stripe_card))
local_status, created_stripe_cart = Stripe.create_update_payment_card(new_stripe_card)
if( local_status is False):
mycommon.myprint(
str(inspect.stack()[0][3]) + " : Impossible de créer la carte de payement dans Stripe")
return False, "Impossible d'ajouter le mode de paiement."
print(" ### la carte est créée : "+str(created_stripe_cart))
if (str(new_data['type']) == "sepa"): if (str(new_data['type']) == "sepa"):
if (len(str(new_data['iban'])) <= 0 or len(str(new_data['bic']) <= 0) if (len(str(new_data['iban'])) <= 0 or len(str(new_data['bic']) <= 0)
or len(str(new_data['nom_compte'])) <= 0): or len(str(new_data['nom_compte'])) <= 0):
@ -264,8 +311,7 @@ def add_payement_mode(diction):
str(inspect.stack()[0][3]) + " : Les données bancaires sont incorrectes") str(inspect.stack()[0][3]) + " : Les données bancaires sont incorrectes")
return False, "Impossible d'ajouter le mode de paiement. Les données bancaires sont incorrectes" return False, "Impossible d'ajouter le mode de paiement. Les données bancaires sont incorrectes"
new_data['stripe_paymentmethod_id'] = str(created_stripe_cart.id)
ret_val = coll_name.find_one_and_update( ret_val = coll_name.find_one_and_update(
{'client_recid': user_recid, 'valide': '1'}, {'client_recid': user_recid, 'valide': '1'},
{"$set": new_data}, {"$set": new_data},
@ -284,7 +330,7 @@ def add_payement_mode(diction):
en mettant : ispending à 0 en mettant : ispending à 0
''' '''
coll_name = MYSY_GV.dbname['partnair_account'] coll_name = MYSY_GV.dbname['partnair_account']
data_update = {'date_update':str(datetime.now()), 'ispending':'0'} data_update = {'date_update':str(datetime.now()), 'ispending':'0', 'stripe_paymentmethod_id':str(created_stripe_cart.id)}
ret_val = coll_name.find_one_and_update( ret_val = coll_name.find_one_and_update(
{'recid': user_recid, }, {'recid': user_recid, },
{"$set": data_update}, {"$set": data_update},
@ -366,13 +412,26 @@ def get_payement_mode(diction):
stripe_account_id = mycommon.get_parnter_stripe_account_id_from_recid(user_recid) stripe_account_id = mycommon.get_parnter_stripe_account_id_from_recid(user_recid)
if stripe_account_id is False: if stripe_account_id is False:
mycommon.myprint(str(inspect.stack()[0][3]) + " - Impossible de recuperer le stripe_account_id de l'utilisateur") mycommon.myprint(str(inspect.stack()[0][3]) + " - Impossible de recuperer le stripe_account_id de l'utilisateur")
return False, " Impossible de recuperer les mode de payement" return False, " Impossible de recuperer les modes de payement"
"""
Recuperation de clé de payement stripe : stripe_paymentmethod_id
"""
stripe_paymentmethod_id = mycommon.get_parnter_stripe_stripe_paymentmethod_id_from_recid(user_recid)
if stripe_paymentmethod_id is False:
mycommon.myprint(
str(inspect.stack()[0][3]) + " - Impossible de recuperer le stripe_paymentmethod_id de l'utilisateur")
return False, " Impossible de recuperer les modes de payement"
RetObject_stripe = [] RetObject_stripe = []
tmp_diction = {} tmp_diction = {}
tmp_diction['stripe_account_id'] = str(stripe_account_id) tmp_diction['stripe_account_id'] = str(stripe_account_id)
print("## recherche mod de payement stripe_account_id = "+str(stripe_account_id) print("## recherche mod de payement stripe_account_id = "+str(stripe_account_id)
) )
localStatus, payment_cards = Stripe.get_customer_payement_cards(tmp_diction) localStatus, payment_cards = Stripe.get_customer_payement_cards(tmp_diction)
for tmp in payment_cards: for tmp in payment_cards:
RetObject_stripe.append(JSONEncoder().encode(tmp)) RetObject_stripe.append(JSONEncoder().encode(tmp))
@ -384,6 +443,7 @@ def get_payement_mode(diction):
for retVal in coll_facture.find({'client_recid': user_recid, 'valide': '1'}): for retVal in coll_facture.find({'client_recid': user_recid, 'valide': '1'}):
user = retVal user = retVal
user['stripe_paymentmethod_id'] = stripe_paymentmethod_id
RetObject.append(JSONEncoder().encode(user)) RetObject.append(JSONEncoder().encode(user))
return True, RetObject return True, RetObject

17
main.py
View File

@ -1615,6 +1615,8 @@ def strip_create_subscription():
payload = request.form.to_dict() payload = request.form.to_dict()
print(" ### strip_create_subscription : payload = ",payload) print(" ### strip_create_subscription : payload = ",payload)
localStatus, subscription_id, payment_intent_client_secret = Stripe.create_subscription(payload) localStatus, subscription_id, payment_intent_client_secret = Stripe.create_subscription(payload)
print(" ### subscription_id = "+str(subscription_id)+" -- payment_intent_client_secret = "+str(payment_intent_client_secret))
return jsonify(status=localStatus, subscription_id=subscription_id,payment_intent_client_secret = payment_intent_client_secret ) return jsonify(status=localStatus, subscription_id=subscription_id,payment_intent_client_secret = payment_intent_client_secret )
""" """
@ -1651,10 +1653,23 @@ def strip_create_payment_card():
# On recupere le corps (payload) de la requete # On recupere le corps (payload) de la requete
payload = request.form.to_dict() payload = request.form.to_dict()
print(" ### create_payment_card : payload = ",payload) print(" ### create_payment_card : payload = ",payload)
localStatus= Stripe.create_payment_card(payload) localStatus= Stripe.create_update_payment_card(payload)
return jsonify(status=localStatus, ) return jsonify(status=localStatus, )
"""
Stripe Payement : Confirmation d'un payement
"""
@app.route('/myclass/api/confirm_payment/', methods=['POST','GET'])
@crossdomain(origin='*')
def strip_confirm_payment():
# On recupere le corps (payload) de la requete
payload = request.form.to_dict()
print(" ### create_payment_card : payload = ",payload)
localStatus, payement_id, payement_status= Stripe.confirm_suscription(payload)
return jsonify(status=localStatus, payement_id=payement_id, payement_status=payement_status )
if __name__ == '__main__': if __name__ == '__main__':
print(" debut api") print(" debut api")
context = SSL.Context(SSL.SSLv23_METHOD) context = SSL.Context(SSL.SSLv23_METHOD)

View File

@ -247,6 +247,26 @@ def get_parnter_stripe_account_id_from_recid(recid = ""):
"""
Cette fonction retour le stripe_paymentmethod_id
"""
def get_parnter_stripe_stripe_paymentmethod_id_from_recid(recid = ""):
try:
if len(str(recid)) <= 0 :
myprint(" get_parnter_stripe_account_id_from_token : Le recid partner est vide")
return False
print(" #### recid = "+str(recid))
coll_partner = MYSY_GV.dbname['partnair_account']
tmp_val = coll_partner.find({'recid': str(recid), 'active': '1', 'locked':'0'})
stripe_paymentmethod_id = tmp_val[0]['stripe_paymentmethod_id']
return stripe_paymentmethod_id
except Exception as e:
exc_type, exc_obj, exc_tb = sys.exc_info()
myprint(str(inspect.stack()[0][3]) + " -" + str(e) + " - ERRORRRR AT Line : " + str(exc_tb.tb_lineno))
return False
''' '''

View File

@ -164,16 +164,17 @@ def get_customer_payement_cards(diction):
""" """
Creation d'une carte de payement Creation d'une carte de payement
""" """
def create_payment_card(diction): def create_update_payment_card(diction):
try: try:
field_list_obligatoire = ['number', 'exp_month', 'exp_year', 'cvc', 'customerid']
field_list_obligatoire = ['number', 'exp_month', 'exp_year', 'cvc', 'customerid', 'stripe_paymentmethod_id']
for val in field_list_obligatoire: for val in field_list_obligatoire:
if val not in diction: if val not in diction:
mycommon.myprint( mycommon.myprint(
str(inspect.stack()[0][3]) + " - La valeur '" + val + "' n'est pas presente dans liste ") str(inspect.stack()[0][3]) + " - La valeur '" + val + "' n'est pas presente dans liste ")
return False, " Impossible de créer el moyen de payement" return False, " Impossible de créer el moyen de payement"
number = "" number = ""
if ("number" in diction.keys()): if ("number" in diction.keys()):
if diction['number']: if diction['number']:
@ -199,21 +200,44 @@ def create_payment_card(diction):
if diction['customerid']: if diction['customerid']:
customer_id = diction['customerid'] customer_id = diction['customerid']
stripe_paymentmethod_id = ""
if ("stripe_paymentmethod_id" in diction.keys()):
if diction['stripe_paymentmethod_id']:
stripe_paymentmethod_id = diction['stripe_paymentmethod_id']
"""
/!\ IMPORTANT :
Si le champs "stripe_paymentmethod_id" est rempli alors c'est une mise à jour :
a) on detache
b) on créer la nouvelle carte
c) on rattacjhe
Si le champs "stripe_paymentmethod_id" est vide, alors c'est une creation + Attachement au client
"""
#print(" ## stripe_paymentmethod_id = "+str(stripe_paymentmethod_id))
if (len(stripe_paymentmethod_id) > 2):
#print(" ### UPDATE ==> detache")
detache = stripe.PaymentMethod.detach(
stripe_paymentmethod_id,
)
#print(" ### CREATE ")
new_card = stripe.PaymentMethod.create( new_card = stripe.PaymentMethod.create(
type="card", type="card",
card={ card={
"number": "4242424242424242", "number": number,
"exp_month": 10, "exp_month": int(exp_month),
"exp_year": 2012, "exp_year": int(exp_year),
"cvc": "314", "cvc": cvc,
}, },
) )
print(" new_card = "+str(new_card)) #print(" new_card = "+str(new_card))
print(" l'ID de la carte est : "+str(new_card.id)) #print(" l'ID de la carte est : "+str(new_card.id))
@ -222,7 +246,8 @@ def create_payment_card(diction):
customer=str(customer_id), customer=str(customer_id),
) )
print(" attache = "+str(attache)) #print(" attache = "+str(attache))
return True, new_card return True, new_card
except Exception as e: except Exception as e:
exc_type, exc_obj, exc_tb = sys.exc_info() exc_type, exc_obj, exc_tb = sys.exc_info()
@ -230,6 +255,39 @@ def create_payment_card(diction):
return False, False return False, False
"""
Cette fonction confirme un abonnement
"""
def confirm_suscription(diction):
try:
field_list_obligatoire = ['stripe_payment_id',]
for val in field_list_obligatoire:
if val not in diction:
mycommon.myprint(
str(inspect.stack()[0][3]) + " - La valeur '" + val + "' n'est pas presente dans liste ")
return False, " Impossible de créer el moyen de payement"
stripe_payment_id = ""
if ("stripe_payment_id" in diction.keys()):
if diction['stripe_payment_id']:
stripe_payment_id = diction['stripe_payment_id']
confirmation_payement = stripe.PaymentIntent.confirm(
stripe_payment_id,
payment_method="pm_card_visa",
)
print("### confirmation_payement.data = "+str(confirmation_payement))
return True, confirmation_payement.id, confirmation_payement.status
except Exception as e:
exc_type, exc_obj, exc_tb = sys.exc_info()
mycommon.myprint(str(inspect.stack()[0][3]) + " -" + str(e) + " - ERRORRRR AT Line : " + str(exc_tb.tb_lineno))
return False, False, False,
def create_subscription(diction): def create_subscription(diction):
@ -265,7 +323,9 @@ def create_subscription(diction):
payment_behavior='default_incomplete', payment_behavior='default_incomplete',
expand=['latest_invoice.payment_intent'], expand=['latest_invoice.payment_intent'],
) )
return True, subscription.id, subscription.latest_invoice.payment_intent.client_secret
print(" ### subscription = "+str(subscription))
return True, subscription.latest_invoice.payment_intent.id, subscription.latest_invoice.payment_intent.client_secret
except Exception as e: except Exception as e: