Алгоритм обратного вызова
Есть сайт. На нем стоит онлайн оплата от сбера.
На адреc /callback/ приходят уведомления обратного вызова от сбербанка. На сайт приходит гет запрос. Его видно в логах моего домена.
Уведомления содержат нужную мне информацию, мне необходимо получить это значение в переменную, для того чтобы в последствии отправить эти данные на свой сервер.
Пока (в примере ниже) я просто пытаюсь сохранить строку, но ничего не выходит.
Запускал тестовые функции, они, после оплаты отрабатывают.
Пожалуйста, помогите разобраться, что я делаю не так?
Или помогите ответить на вопрос: Каким методом получить данные поступающие от стороннего сервиса в виде гет запроса, в переменную.
urls.py
path('callback/', callback, name="callback"),
views.py
def callback(self, request):
callback1
callback.py
def callback1():
i = requests.GET.get('')
x = i.text
with open('greed.txt', 'w') as file:
file.write(x)
callback1()
Ответы (2 шт):
для get запроса вида
/callback/?some_key=value1&some_key=value2&another=123
значения можно получить следующим образом
def callback(request):
some_key_values = request.GET.get('some_key')
# and do something
return JsonResponse(dict(request.GET)) # print all keys in get query
Суть задачи заключалась в получении данных об оплате с сервера сбербанка, при помощи функции обратного вызова. Ниже представлена простая функция, но может быть кому то будет полезно. Запрашиваете у поддержки подключение callback уведомлений, указываете url на который они будут поступать. И...
urls.py
...
path('callback/', callback, name="callback"),
...
views.py
def callback(request):
param = request.GET
x=param['orderNumber']
y=param['status']
z=param['operation']
h=param['mdOrder']
p=param['checksum']
token='ВВЕДИТЕ ЕСЛИ ДЛЯ ПЕРЕДАЧИ НА СЕРВЕР ИСПОЛЬЗУЕТСЯ ТОКЕН'
test = 'mdOrder'+';'+str(h)+';'+'operation'+';'+str(z)+';'+'orderNumber'+';'+str(x)+';'+'status'+';'+str(y)+';'
secret_key = b"СЕКРЕТНЫЙ КЛЮЧ МЕРЧАНТА"
total_params = total_params = test.encode('utf-8')
signature = hmac.new(secret_key, total_params, hashlib.sha256).hexdigest()
signatureup=signature.upper()
def check(amountd):
content = requests.get('https://3dsec.sberbank.ru/payment/rest/getOrderStatusExtended.do?userName=ЛОГИНМЕРЧАНТА&password=ПАРОЛЬМЕРЧАНТА='+amountd)
getcheck=content.json()
sum=getcheck['amount']
return sum
sum=check(x)
summa=float(sum/100)
done={'token':token,'ticket':x,'paymentsum':summa}
URL="URL адрес, на который отправляется информация"
if y=='1' and z=='deposited' and signatureup==p:
result = requests.post(URL, json=done)
with open('success.txt', 'a') as file:
file.write('Сообщение от сервера:'+str(result.text)+' ')
file.write('Номер заказа:'+str(x)+' ')
file.write('Операция:'+str(z)+' ')
file.write('Сумма:'+str(sum)+' ')
file.write('Статус:'+str(y)+'\n')
return HttpResponse('200', 'OK')
else:
with open('errors.txt', 'a') as file:
file.write(str('Операция отклонена')+' ')
file.write('Номер заказа:'+str(x)+' ')
file.write('Операция:'+str(z)+' ')
file.write('Сумма:'+str(sum)+' ')
file.write('Статус:'+str(y)+'\n')
return HttpResponse('200', 'OK')