有支付就肯定有退款,当交易发生之后一段时间内,由于买家或者卖家的原因需要退款时,卖家可以通过退款接口将支付款退还给买家,支付宝将在收到退款请求并且验证成功之后,按照退款规则将支付款按原路退到买家帐号上。 交易超过约定时间(签约时设置的可退款时间)的订单无法进行退款 支付宝退款支持单笔交易分多次退款,多次退款需要提交原支付订单的商户订单号和设置不同的退款单号。一笔退款失败后重新提交,要采用原来的退款单号。总退款金额不能超过用户实际支付金额。
前面已经写过结合python实现支付宝的支付功能。
支付宝官方文档:https://opendocs.alipay.com/apis/api_1/alipay.trade.refund
由于之前写的有支付价格和支付宝的订单号,所以我们根据这两个参数,实现退款。
我们之前写的pay.py已经有退款方法了,所以我们需要直接调用就可以了。
在pay.py已经写入1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| def api_alipay_trade_refund(self, refund_amount, out_trade_no=None, trade_no=None, **kwargs): biz_content = { "refund_amount": refund_amount } biz_content.update(**kwargs) if out_trade_no: biz_content["out_trade_no"] = out_trade_no if trade_no: biz_content["trade_no"] = trade_no data = self.build_body("alipay.trade.refund", biz_content) url = self.__gateway + "?" + self.sign_data(data) r = requests.get(url) html = r.content.decode("utf-8") return html
|
现在我们需要在写一个退款的视图
1 2 3 4 5 6 7 8 9 10 11 12 13
| def refund(request): alipay = get_ali_object() order_string = alipay.api_alipay_trade_refund( out_trade_no="20190503214355", refund_amount="20.00", notify_url='http://localhost:8000/md_admin/alipayreturn' ) return HttpResponse(order_string)
|
如果订单号和退款金额正确的话,请求该接口就会返回退款成功的返回值,查看支付宝钱包,相应的退款应该会及时到账
