异步接受不到信息,搞了好几晚上一直没有搞定,希望能帮我看一下,谢啦
参照的项目:
https://github.com/fengli/alipay_python
Django 的异步接收 view :
创建数据在别的模块测试了貌似没有问题
def notify_url_handler(request):
'''doc http://blog.csdn.net/hornbills/article/details/40338949'''
if request.method=='POST':
a=Personblling.objects.create(user_id=1,billingmoney=1,billingstatus=True,trade_no='1')
if trade_status=='WAIT_SELLER_SEND_GOODS':
return HttpResponse("success")
else:
return HttpResponse("success")
else:
a=Personblling.objects.create(user_id=1,billingmoney=2,billingstatus=True,trade_no='1')
return HttpResponse("whyfailed")
return HttpResponse("failed")
url (位于 accounts 目录下,已经 include 一层了同步接收可以接收到,我感觉这里没有设置错)
url(r'^notify_url/$',views.notify_url_handler,name='notify_url_handler'),
支付宝给我回复了,说我地址的状态码为:403,不知道是啥原因额
已解决:
需要在 def 前面添加@csrf_exempt ,给后来人帮助
1
kangsgo OP 已下是我的同步调用,也发生了错了····
版本是 Django 1.8.4 ```python def return_url_handler(request):: if notify_verify(request.GET): tn=request.GET.get('out_trade_no') trade_no = request.GET.get('trade_no') trade_status = request.GET.get('trade_status') return HttpResponse("天呐,我成功啦") else: return HttpResponse("蛋都碎了,又失败了") ``` |
2
likezun 2016-06-15 09:24:09 +08:00
python 工具, 做 web 不合适,坑
|
3
pc10201 2016-06-15 09:30:49 +08:00 1
哈哈,我也遇到过,后来解决了,关键代码
if request.method == 'POST': if alipay.verify_notify(**request.POST.dict()): logger.info('pass verification...') out_trade_no = request.POST.get('out_trade_no') logger.info('Change the status of bill %s' % out_trade_no) |
4
fangdingjun 2016-06-15 09:31:21 +08:00
django 的 post 有 csrf 保护,支付宝 postf 过来肯定没这玩意儿
我用 flask 写的支付宝接口运行的好好的 |
5
pc10201 2016-06-15 09:34:00 +08:00
|
6
rapospectre 2016-06-15 09:37:02 +08:00 2
异步接收不到信息先看看回调地址是不是有问题,可以看看服务器的日志,支付宝是不是返回了信息,还有就是本地地址是不能当回调地址的。
排除以上问题后再去支付宝看看是不是有其他报错,你可以把生成的支付宝链接复制到浏览器里看看有没有问题。 最后,如果都不行你换个支付宝的 python 试试。 我之前用过这个: https://github.com/lxneng/alipay ,没出现过什么问题。 |
7
kangsgo OP @rapospectre 谢谢啦
同步好像没有什么问题了,但是异步换了您提的接口还是收不到支付宝的传值好像: ```python def notify_url_handler(request): '''doc http://blog.csdn.net/hornbills/article/details/40338949''' a=Personblling.objects.create(user_id=1,billingmoney=2,billingstatus=True,trade_no=12) return HttpResponse("success") ``` 我改成这样子直接可以访问,但是付款貌似支付宝还是没有传值进来 ```python return_url='http://xxx/accounts/return_url/' notify_url='http://xxx/accounts/notify_url/' ``` 为了避免广告嫌疑我输入 XXX 啦 |
9
kangsgo OP @fangdingjun 是不是因为我 allow_host 设置的['www.xxx.com']支付宝进不来的缘故?
|
10
codepark 2016-06-15 15:47:55 +08:00 1
异步接收 在 request.body 里面 不在 request.POST 里面~
|