鍍金池/ 問答/Java  Python  網(wǎng)絡(luò)安全  HTML/ python3 微信支付異步通知 django

python3 微信支付異步通知 django

求助!django的微信支付回調(diào),接收異步通知出了問題。

先上代碼:

    #微信支付回調(diào)
    def weChatQRCodeNotify(request):
        order_result_xml = http.request.httprequest.stream.read() #從請求流提取數(shù)據(jù)
        doc = xmltodict.parse(order_result_xml) #解析得到的xml字符串,轉(zhuǎn)為dict
        out_trade_no = doc['xml']['out_trade_no'] #提取返回數(shù)據(jù)中的訂單號
        #todo:提取簽名、支付金額等,驗證簽名是否正確、金額是否正確
        #思路:在前面獲取二維碼時,生成了一條訂單記錄,訂單應(yīng)該保存下訂單號、簽名、金額等信息。在這里,根據(jù)回傳的訂單號查詢數(shù)據(jù)庫,得到對應(yīng)的簽名、金額進行驗證即可
        #最后,別忘了應(yīng)答微信支付平臺,防止重復(fù)發(fā)送數(shù)據(jù)
        return '''
            <xml>
            <return_code><![CDATA[SUCCESS]]></return_code>
            <return_msg><![CDATA[OK]]></return_msg>
            </xml>
            '''

現(xiàn)在問題已經(jīng)鎖定就是第一行代碼
order_result_xml = http.request.httprequest.stream.read() #從請求流提取數(shù)據(jù)
在python3下提示http沒有request屬性,如果直接讓order_result_xml等于字符串<xml>...</xml>,則成功。

所以請問一下python3用什么方法可以替代http.request.httprequest.stream.read() ?或者說什么方法可以直接獲取POST過來的xml數(shù)據(jù)。

感謝!

回答
編輯回答
懶豬

因為是POST請求,所以xml內(nèi)容在請求的body里, 所以你可以直接通過request.body獲取到xml數(shù)據(jù),但是它是個字符串, 你要把它轉(zhuǎn)成字典就好了.

2017年6月11日 20:38