异步接受不到信息,搞了好几晚上一直没有搞定,希望能帮我看一下,谢啦
参照的项目:
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 ![]() 哈哈,我也遇到过,后来解决了,关键代码 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 ![]() 异步接收不到信息先看看回调地址是不是有问题,可以看看服务器的日志,支付宝是不是返回了信息,还有就是本地地址是不能当回调地址的。 排除以上问题后再去支付宝看看是不是有其他报错,你可以把生成的支付宝链接复制到浏览器里看看有没有问题。 最后,如果都不行你换个支付宝的 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 ![]() 异步接收 在 request.body 里面 不在 request.POST 里面~ |