前言

直到今天,才终于想起了半年前的支付功能还没有完成,哈哈,其实当时的这篇文章已经属于是完成了预支付的逻辑了,只是差这最后一个回调处理。回调地址基于预支付的notify_url,是异步的通知回调。

一般来说,支付逻辑是生成预支付的订单,然后通过前端 or 小程序端来调起微信支付,然后通过回调的地址来处理业务逻辑,或者通过一个查询订单接口来处理,两者处理业务逻辑没有什么实质性的区别,因为结果基于支付完成的。

回调的地址在这,上面写的不是太清楚,所以会导致走一点小弯路。

代码

使用的框架是fastapi

pip install fastapi
pip install uvicorn
pip install xmltodict
import xmltodict
import uvicorn
from fastapi import FastAPI, Request, status
from fastapi.encoders import jsonable_encoder
from starlette.responses import JSONResponse

app = FastAPI()

'''
测试支付结果回调
'''


@app.post('/')
async def payment(
        request: Request,
                  ):
    req = await request.body()
    xmlmsg = xmltodict.parse(req)
    print(xmlmsg)
    return JSONResponse(
        status_code=status.HTTP_200_OK,
        content=jsonable_encoder({
            'return_code': 'SUCCESS',
            'return_msg': 'OK',
        })
    )


if __name__ == '__main__':
    uvicorn.run("test:app", host="0.0.0.0", port=8010, reload=True)

需要注意的是,他的回调地址是post,并不是get,并且回调也不是json,而是xml,我们还是需要处理一下的.

在这个回调中,我们就可以处理自己的业务逻辑, 虽然微信出问题的可能性不大, 但是为了安全, 我们最好还是在这里跟自己的数据校验一下, 毕竟跟钱搭边了, 不得不谨慎一些.

END……