V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
kangsgo
V2EX  ›  Python

python 支付宝异步接受不到信息

  •  1
     
  •   kangsgo · 2016-06-15 03:32:23 +08:00 · 4271 次点击
    这是一个创建于 3091 天前的主题,其中的信息可能已经有所发展或是发生改变。

    异步接受不到信息,搞了好几晚上一直没有搞定,希望能帮我看一下,谢啦

    参照的项目:

    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'), 
    
    第 1 条附言  ·  2016-06-15 17:06:06 +08:00

    支付宝给我回复了,说我地址的状态码为:403,不知道是啥原因额

    第 2 条附言  ·  2016-06-15 17:14:50 +08:00

    已解决:

    需要在 def 前面添加@csrf_exempt ,给后来人帮助

    12 条回复    2016-06-15 16:01:25 +08:00
    kangsgo
        1
    kangsgo  
    OP
       2016-06-15 03:48:59 +08:00
    已下是我的同步调用,也发生了错了····

    版本是 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("蛋都碎了,又失败了")
    ```
    likezun
        2
    likezun  
       2016-06-15 09:24:09 +08:00
    python 工具, 做 web 不合适,坑
    pc10201
        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)
    fangdingjun
        4
    fangdingjun  
       2016-06-15 09:31:21 +08:00
    django 的 post 有 csrf 保护,支付宝 postf 过来肯定没这玩意儿
    我用 flask 写的支付宝接口运行的好好的
    pc10201
        5
    pc10201  
       2016-06-15 09:34:00 +08:00
    rapospectre
        6
    rapospectre  
       2016-06-15 09:37:02 +08:00   ❤️ 2
    异步接收不到信息先看看回调地址是不是有问题,可以看看服务器的日志,支付宝是不是返回了信息,还有就是本地地址是不能当回调地址的。

    排除以上问题后再去支付宝看看是不是有其他报错,你可以把生成的支付宝链接复制到浏览器里看看有没有问题。

    最后,如果都不行你换个支付宝的 python 试试。
    我之前用过这个: https://github.com/lxneng/alipay ,没出现过什么问题。
    kangsgo
        7
    kangsgo  
    OP
       2016-06-15 15:07:28 +08:00
    @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 啦
    kangsgo
        8
    kangsgo  
    OP
       2016-06-15 15:08:36 +08:00
    @pc10201 谢谢,您帮我把同步解决了,但是异步好像还是没法收到,我上面的设置有问题么?直接访问是有作用的。
    kangsgo
        9
    kangsgo  
    OP
       2016-06-15 15:33:07 +08:00
    @fangdingjun 是不是因为我 allow_host 设置的['www.xxx.com']支付宝进不来的缘故?
    codepark
        10
    codepark  
       2016-06-15 15:47:55 +08:00   ❤️ 1
    异步接收 在 request.body 里面 不在 request.POST 里面~
    kangsgo
        11
    kangsgo  
    OP
       2016-06-15 15:51:01 +08:00
    @codepark 没有听明白,能稍微详细一些么~我刚学 Django 不久,谢啦
    codepark
        12
    codepark  
       2016-06-15 16:01:25 +08:00
    @kangsgo 忽略我说的 看成微信支付了~ sorry
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2617 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 06:57 · PVG 14:57 · LAX 22:57 · JFK 01:57
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.