资讯专栏INFORMATION COLUMN

记录django-rest-framework处理微信支付notify_url遇到的问题

Lorry_Lu / 988人阅读

摘要:微信支付统一下单接口,有一个叫的参数,作用我就照搬官方文档异步接收微信支付结果通知的回调地址,通知必须为外网可访问的,不能携带参数。

最近在做一个小程序,小程序有涉及到微信支付,说来惭愧,还是第一次自己动手去做微信支付这一块的实现,所以过程中遇到了很多人都会踩的坑(例如mmp的微信支付各种key各种id要在哪里找,很难找),这次使用django来开发,接口部分用django-rest-framework(下面简称drf)。

入入入入入正题吧。

微信支付统一下单接口,有一个叫notify_url的参数,作用我就照搬官方文档:

异步接收微信支付结果通知的回调地址,通知url必须为外网可访问的url,不能携带参数。

吐槽:官方文档竟然不告诉我到时候是通过Get还是Post(难道是其他HTTP method)请求我,我怕我到时候措不及防,事实证明,是通过Post来请求的。

好了,我前面的支付功能都写好了,就等微信爸爸来调我的notify_url了,测试支付完之后,屁颠屁颠跑去IDE的控制台看debug输出,结果有Traceback,找找里面的关键信息:Unsupported media type "text/xml" in request.,哭唧唧。

唔,聪明如我,drf可以自定义parser类,官方文档也有提到一个xml的parser,安装了,然后为这个接口指定了parser_classes,代码如下:

# ...省略
class WechatNotifyView(APIView):
    """
    微信回调接口
    """
    authentication_classes = []
    permission_classes = (AllowAny,)
    parser_classes = (XMLParser,)

    def post(self, request):
        print(request.data)
        return Response()

满心欢喜重新测试一次,结果还是不对,追查了下,发现了关键所在,微信调用notify_url的时候,Content-Typetext/xml而不是application/xml,真是mmp,看了下XMLParser的源码,改起来很简单:

# ...省略
class WechatPaymentXMLParser(XMLParser):
    media_type = "text/xml"

class WechatNotifyView(APIView):
    # ...省略
    parser_classes = (WechatPaymentXMLParser,)
    # ...省略    
    

再测试了一次,搞定,request.data打印出来的就是那个xml内容的字典形式。
吐槽:微信的东西总是有吐不完的槽,但爸爸始终是爸爸。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/44738.html

相关文章

  • 记录django-rest-framework处理微信支付notify_url遇到问题

    摘要:微信支付统一下单接口,有一个叫的参数,作用我就照搬官方文档异步接收微信支付结果通知的回调地址,通知必须为外网可访问的,不能携带参数。 最近在做一个小程序,小程序有涉及到微信支付,说来惭愧,还是第一次自己动手去做微信支付这一块的实现,所以过程中遇到了很多人都会踩的坑(例如mmp的微信支付各种key各种id要在哪里找,很难找),这次使用django来开发,接口部分用django-rest-...

    NicolasHe 评论0 收藏0
  • 记录django-rest-framework处理微信支付notify_url遇到问题

    摘要:微信支付统一下单接口,有一个叫的参数,作用我就照搬官方文档异步接收微信支付结果通知的回调地址,通知必须为外网可访问的,不能携带参数。 最近在做一个小程序,小程序有涉及到微信支付,说来惭愧,还是第一次自己动手去做微信支付这一块的实现,所以过程中遇到了很多人都会踩的坑(例如mmp的微信支付各种key各种id要在哪里找,很难找),这次使用django来开发,接口部分用django-rest-...

    kk_miles 评论0 收藏0
  • 浅析微信支付:申请退款、退款回调接口、查询退款

    摘要:注意交易时间超过一年的订单无法提交退款微信支付退款支持单笔交易分多次退款,多次退款需要提交原支付订单的商户订单号和设置不同的退款单号。 本文是【浅析微信支付】系列文章的第八篇,主要讲解商户如何处理微信申请退款、退款回调、查询退款接口,其中有一些坑的地方,会着重强调。 浅析微信支付系列已经更新七篇了哟~,没有看过的朋友们可以看一下哦。 浅析微信支付:查询订单和关闭订单 浅析微信支付:支...

    silenceboy 评论0 收藏0
  • nodejs微信支付之扫码支付

    前言 本篇文章主要是记录本人在微信扫码支付过程中所遇到的问题,给大家一个借鉴作用,希望对你们有帮助 开发环境 nodejs v8.1.0 egg v1.1.0 准备工作 微信公众号-appid 微信商户号-mch_id key值(签名算法所需,其实就是一个32位的密码,可以用md5生成一个)(key设置路径:微信商户平台(pay.weixin.qq.com)-->账户设置-->API安全...

    Olivia 评论0 收藏0
  • 浅析微信支付支付结果通知

    摘要:本文是浅析微信支付系列文章的第六篇,主要讲解支付成功后,微信回调商户支付结果通知的处理。微信支付支付回调接口该链接是通过统一下单中提交的参数设置,如果链接无法访问,商户将无法接收到微信通知。 本文是【浅析微信支付】系列文章的第六篇,主要讲解支付成功后,微信回调商户支付结果通知的处理。 浅析微信支付系列已经更新五篇了哟~,没有看过的朋友们可以看一下哦。 浅析微信支付:统一下单接口 浅析...

    Dean 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<