摘要:微信支付統(tǒng)一下單接口,有一個(gè)叫的參數(shù),作用我就照搬官方文檔異步接收微信支付結(jié)果通知的回調(diào)地址,通知必須為外網(wǎng)可訪問(wèn)的,不能攜帶參數(shù)。
最近在做一個(gè)小程序,小程序有涉及到微信支付,說(shuō)來(lái)慚愧,還是第一次自己動(dòng)手去做微信支付這一塊的實(shí)現(xiàn),所以過(guò)程中遇到了很多人都會(huì)踩的坑(例如mmp的微信支付各種key各種id要在哪里找,很難找),這次使用django來(lái)開發(fā),接口部分用django-rest-framework(下面簡(jiǎn)稱drf)。
入入入入入正題吧。
微信支付統(tǒng)一下單接口,有一個(gè)叫notify_url的參數(shù),作用我就照搬官方文檔:
異步接收微信支付結(jié)果通知的回調(diào)地址,通知url必須為外網(wǎng)可訪問(wèn)的url,不能攜帶參數(shù)。
吐槽:官方文檔竟然不告訴我到時(shí)候是通過(guò)Get還是Post(難道是其他HTTP method)請(qǐng)求我,我怕我到時(shí)候措不及防,事實(shí)證明,是通過(guò)Post來(lái)請(qǐng)求的。
好了,我前面的支付功能都寫好了,就等微信爸爸來(lái)調(diào)我的notify_url了,測(cè)試支付完之后,屁顛屁顛跑去IDE的控制臺(tái)看debug輸出,結(jié)果有Traceback,找找里面的關(guān)鍵信息:Unsupported media type "text/xml" in request.,哭唧唧。
唔,聰明如我,drf可以自定義parser類,官方文檔也有提到一個(gè)xml的parser,安裝了,然后為這個(gè)接口指定了parser_classes,代碼如下:
# ...省略 class WechatNotifyView(APIView): """ 微信回調(diào)接口 """ authentication_classes = [] permission_classes = (AllowAny,) parser_classes = (XMLParser,) def post(self, request): print(request.data) return Response()
滿心歡喜重新測(cè)試一次,結(jié)果還是不對(duì),追查了下,發(fā)現(xiàn)了關(guān)鍵所在,微信調(diào)用notify_url的時(shí)候,Content-Type是text/xml而不是application/xml,真是mmp,看了下XMLParser的源碼,改起來(lái)很簡(jiǎn)單:
# ...省略 class WechatPaymentXMLParser(XMLParser): media_type = "text/xml" class WechatNotifyView(APIView): # ...省略 parser_classes = (WechatPaymentXMLParser,) # ...省略
再測(cè)試了一次,搞定,request.data打印出來(lái)的就是那個(gè)xml內(nèi)容的字典形式。
吐槽:微信的東西總是有吐不完的槽,但爸爸始終是爸爸。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/41817.html
摘要:微信支付統(tǒng)一下單接口,有一個(gè)叫的參數(shù),作用我就照搬官方文檔異步接收微信支付結(jié)果通知的回調(diào)地址,通知必須為外網(wǎng)可訪問(wèn)的,不能攜帶參數(shù)。 最近在做一個(gè)小程序,小程序有涉及到微信支付,說(shuō)來(lái)慚愧,還是第一次自己動(dòng)手去做微信支付這一塊的實(shí)現(xiàn),所以過(guò)程中遇到了很多人都會(huì)踩的坑(例如mmp的微信支付各種key各種id要在哪里找,很難找),這次使用django來(lái)開發(fā),接口部分用django-rest-...
摘要:微信支付統(tǒng)一下單接口,有一個(gè)叫的參數(shù),作用我就照搬官方文檔異步接收微信支付結(jié)果通知的回調(diào)地址,通知必須為外網(wǎng)可訪問(wèn)的,不能攜帶參數(shù)。 最近在做一個(gè)小程序,小程序有涉及到微信支付,說(shuō)來(lái)慚愧,還是第一次自己動(dòng)手去做微信支付這一塊的實(shí)現(xiàn),所以過(guò)程中遇到了很多人都會(huì)踩的坑(例如mmp的微信支付各種key各種id要在哪里找,很難找),這次使用django來(lái)開發(fā),接口部分用django-rest-...
摘要:注意交易時(shí)間超過(guò)一年的訂單無(wú)法提交退款微信支付退款支持單筆交易分多次退款,多次退款需要提交原支付訂單的商戶訂單號(hào)和設(shè)置不同的退款單號(hào)。 本文是【淺析微信支付】系列文章的第八篇,主要講解商戶如何處理微信申請(qǐng)退款、退款回調(diào)、查詢退款接口,其中有一些坑的地方,會(huì)著重強(qiáng)調(diào)。 淺析微信支付系列已經(jīng)更新七篇了喲~,沒有看過(guò)的朋友們可以看一下哦。 淺析微信支付:查詢訂單和關(guān)閉訂單 淺析微信支付:支...
前言 本篇文章主要是記錄本人在微信掃碼支付過(guò)程中所遇到的問(wèn)題,給大家一個(gè)借鑒作用,希望對(duì)你們有幫助 開發(fā)環(huán)境 nodejs v8.1.0 egg v1.1.0 準(zhǔn)備工作 微信公眾號(hào)-appid 微信商戶號(hào)-mch_id key值(簽名算法所需,其實(shí)就是一個(gè)32位的密碼,可以用md5生成一個(gè))(key設(shè)置路徑:微信商戶平臺(tái)(pay.weixin.qq.com)-->賬戶設(shè)置-->API安全...
摘要:本文是淺析微信支付系列文章的第六篇,主要講解支付成功后,微信回調(diào)商戶支付結(jié)果通知的處理。微信支付支付回調(diào)接口該鏈接是通過(guò)統(tǒng)一下單中提交的參數(shù)設(shè)置,如果鏈接無(wú)法訪問(wèn),商戶將無(wú)法接收到微信通知。 本文是【淺析微信支付】系列文章的第六篇,主要講解支付成功后,微信回調(diào)商戶支付結(jié)果通知的處理。 淺析微信支付系列已經(jīng)更新五篇了喲~,沒有看過(guò)的朋友們可以看一下哦。 淺析微信支付:統(tǒng)一下單接口 淺析...
閱讀 2650·2023-04-26 02:17
閱讀 1628·2021-11-24 09:39
閱讀 1087·2021-11-18 13:13
閱讀 2670·2021-09-02 15:11
閱讀 2786·2019-08-30 15:48
閱讀 3416·2019-08-30 14:00
閱讀 2451·2019-08-29 13:43
閱讀 669·2019-08-29 13:07