Я работаю над интеграцией Paypal в мой проект Django с использованием пакета Django-Paypal. Я успешно настроил все, и он работал, но внезапно сигналы из PayPal прекратились.
Какая проблема может возникнуть?
Вот что я сделал:
из view.py:
def payment_process(request):
minutes = int(request.user.tagging.count()) * 5
testhours = minutes / 60
hours = str(round(testhours, 3))
# pdb.set_trace()
# What you want the button to do.
invoice = generate_cid()
userInfo = {
"name": str(request.user.first_name + ' ' + request.user.last_name),
"hours": str(hours),
"taggedArticles": str(request.user.tagging.count())
}
paypal_dict = {
"business": settings.PAYPAL_RECEIVER_EMAIL,
"item_name": "Certificate of Completion from Nami Montana",
"custom": userInfo,
"invoice": str(invoice),
"amount": "5.00",
"notify_url": "https://6fd5e31b.ngrok.io/users/paypal/",
# "return_url": "https://6fd5e31b.ngrok.io/users/profile/",
"cancel_return": "https://6fd5e31b.ngrok.io/users/cancel/",
}
print(paypal_dict)
# Create the instance.
form = PayPalPaymentsForm(initial=paypal_dict)
context = {"form": form}
return render(request, "users/generateCert.html", context)
из urls.py:
urlpatterns = [
url('^paypal/', include('paypal.standard.ipn.urls')),
url('^profile/buildCertificate/$', views.CertificateProcess.as_view(), name='certificate'),
url('^cancel/$', views.payment_canceled, name='cancel'),
url('^done/$', views.payment_done, name='done'),
url('^process/$', views.payment_process, name='payment'),
]
Из signal.py:
def show_me_the_money(sender, **kwargs):
ipn_obj = sender
custom = ipn_obj.custom
# Undertake some action depending upon `ipn_obj`.
if ipn_obj.payment_status == ST_PP_COMPLETED:
print('Get success signal')
user_info = ast.literal_eval(ipn_obj.custom)
if int(user_info['taggedArticles']) > 11:
# here i need to generate and send a pdf file to the user in a new tab
pass
else:
print('Get fail signal')
payment_was_successful.connect(show_me_the_money)
Update: When I have tested it with live IPN sandbox it returns
IPN was sent and the handshake was verified
Payment is successfully depositing to the PayPal sandbox merchant account, only the signal is doing some problem.
Помоги мне, пожалуйста!
Заранее спасибо!
Привет @ hwhite4, даже в админке Django IPN PayPal не приходит.
Хорошо, как долго вы этого ждали? Песочница иногда медленно отправляет ipn
Привет @ hwhite4, если вы имеете в виду ожидание ответа, то я думаю, что проверил его, подождав даже 2-3 минуты!
Хорошо, iv провела тестирование в песочнице с помощью ngrok, где иногда для получения ipn требовалось 20+ минут, но в других случаях это было бы очень быстро.
Так что, если он иногда работает, это может быть проблемой
Итак, я думаю, мне следует немного подождать, прежде чем вносить какие-либо изменения в свой исходный код, я прав?
Да, наверное, лучше немного подождать
см. обновление вопроса, пожалуйста!
с живым запросом песочницы IPN я нашел флаг Invalid form. (payment_date: Invalid date format Sat Mar 10 2018 18:32:10 GMT+0500 (PKT): too many values to unpack (expected 5)) в моем администраторе django. Что это значит?
Привет @ hwhite4, я думаю, что это проблема, потому что, если проблема была в песочнице, она не должна отправлять сигнал из песочницы IPN.
Возможно, проблема в отправляемой вами форме. Также способ, которым вы передаете словарь на заказ, вероятно, не сработает. Вы можете преобразовать его в строку json, хотя
Также, возможно, стоит прочитать stackoverflow.com/questions/16798206/…
Теперь я протестировал его, удалив словарь userInfo, но все равно он не работает.
Привет @ hwhite4, еще одна вещь, которую я заметил, в консоли показывает предупреждение, в котором говорится: «UserWarning: этот метод (или ветвь) не покрывается автоматическими тестами. warn_untested () `






У меня та же проблема. Мое приложение работало, а теперь нет. Я много чего пробовал (с python3.5, а не 3.6, удалил все .pyc, удалил и установил django-paypa, сменил порт ...) Кажется, это ничего не меняет.
Я сдавался, но получил все свои сигналы за один раз. После этого прошло много времени. Я попробовал сразу после и ничего, никаких сигналов.
Итак, для меня проблема на сервере PayPal. На это нужно время. Нам придется подождать.
Надеюсь, мой опыт вам поможет :)
Currently, it works normally for me (11 march 2018 11am). I hope it's the same for you :)
Привет, @Romain, ты был прав, теперь он работает и у меня. Спасибо,
По моему опыту, песочница PayPal иногда может работать довольно медленно. Как долго вы ждали сигнала? Также, если вы не знали, вы также можете проверить полученные вызовы ipn в администраторе django, что очень полезно