【发布时间】:2020-08-17 20:47:04
【问题描述】:
我正在用Django开发电子商务网站,所以通过Paytm支付网关支付成功后(集成测试)
我在本地服务器中遇到会话问题,从 Paytm 测试集成门户重定向到支付成功页面(本地服务器)后,当我在支付成功页面上时,用户会话自动注销。
Payment.html 文件
{% extends 'shop/base.html' %}
{% load static %}
{% block title%}
Paytm merchant payment page
{% endblock %}
{% block content %}
{% csrf_token %}
<h1>Redirecting you to the merchant....</h1>
<h1>Please do not refresh your page....</h1>
<form action="https://securegw-stage.paytm.in/order/process"
method="post"
name="paytm">
{{ form.as_p }}
{% for key, value in param_dict.items %}
<input type="hidden" name="{{key}}" value="{{value}}">
{% endfor %}
</form>
<script>
document.paytm.submit()
</script>
{% endblock %}
paymentstatus.html 文件
{% extends 'shop/base.html' %}
{% load static %}
{% block title%}Shoppy hub{% endblock %}
{% block content %}
{% csrf_token %}
<div class="container">
<div class="col my-4">
<h1>Payment status regarding your order Id : {{response.ORDERID}}</h1>
{% if response.RESPCODE == '01' %}
<h3>Amount paid:{{response.TXNAMOUNT}} </h3>
<h3><img style="height:50px;"src="/static/img/success.png" >Your order
has been received successfully</h3 >
<h3>Thank you for your purchase! </h3>
{% else %}
<h2> <img style="height:50px;"src="/static/img/fail.jpg" >Your order
has been failed</h2 >
{% endif%}
</div>
</div>
{% endblock %}
{% block js %}
<script>
</script>
{% endblock %}
会话问题可能是由于从(Django本地服务器)重定向到Paytm支付门户,但在支付门户中(产品价格和用户名)在集成测试支付页面中成功转发,但在支付之后成功完成并重定向到支付成功页面(本地服务器)。此时用户会自动注销,尽管成功页面上正确显示了金额。
所以请大家帮我在重定向到其他页面然后重定向回本地服务器时保持会话。
settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'accounts.apps.AccountsConfig',
'cart.apps.CartConfig',
'shop.apps.ShopConfig',
'orders.apps.OrdersConfig',
'about.apps.AboutConfig',
'contact.apps.ContactConfig',
'search.apps.SearchConfig',
'offers.apps.OffersConfig',
]
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
如何识别响应标头中的键/值,响应标头(登录后):HTTP/1.1 200 OK 日期:格林威治标准时间 2020 年 5 月 14 日星期四 05:21:02 服务器:WSGIServer/0.2 CPython/3.7.3 内容类型:文本/html;字符集=utf-8 X 框架选项:SAMEORIGIN 内容长度:39759 变化:饼干 设置 Cookie:sessionid=frnyglh4tzkp2fgqjv2p3acs2sut5to9;到期=格林威治标准时间 2020 年 5 月 28 日星期四 05:21:02;仅http;最大年龄=1209600;路径=/; SameSite=松弛
付款完成后:HTTP/1.1 200 OK 日期:格林威治标准时间 2020 年 5 月 14 日星期四 05:30:06 服务器:WSGIServer/0.2 CPython/3.7.3 内容类型:文本/html;字符集=utf-8 X 框架选项:SAMEORIGIN 变化:饼干 内容长度:3652 设置 Cookie:csrftoken=19FoDcypCYyUBy2DHCnxkMn3Zfjn9RufUoqiVKBu4duZxcqNhrHL5MAtqtg9ZNdh;到期=格林威治标准时间 2021 年 5 月 13 日星期四 05:30:05;最大年龄=31449600;路径=/; SameSite=松懈 设置 Cookie:sessionid=g2ctxjjt8llz8d7khdub6aa3fvcxxkcy;到期=格林威治标准时间 2020 年 5 月 28 日星期四 05:30:05;仅http;最大年龄=1209600;路径=/; SameSite=松弛
【问题讨论】:
-
据我记得,django 将会话作为 cookie 存储在浏览器上。你在使用 django SessionMiddleware 吗?我建议看看这里:docs.djangoproject.com/en/3.0/topics/http/sessions
-
我已经在settings.py中使用了中间件。
-
@MenyIssakov 请帮我解决这个问题
-
如果您在浏览器中检查服务器响应。您的回复中是否包含 cookie?
-
好的,我会检查并发布服务器响应截图