Django Rest_framework 9(支付宝沙箱)

支付宝沙箱:
https://blog.csdn.net/weixin_44520739/article/details/89214609
支付宝支付:
https://github.com/fzlee/alipay/blob/master/README.zh-hans.md
使用步骤:
1.下载
pip install python-alipay-sdk --upgrade
2.修改公钥和私钥
创建alipay_key文件夹,将生成的公钥私钥文件复制粘贴在此文件夹下并改成英文名
在支付宝上下载的公钥是一个字符串,你需要在文本的首尾添加标记位
#公钥注意不是生成的公钥,而是配置好后的支付宝公钥
(-----BEGIN PUBLIC KEY-----和-----END PUBLIC KEY-----) 
(-----BEGIN RSA2 PRIVATE KEY----- 和-----END RSA2 PRIVATE KEY-----)
3.settings中配置公钥私钥
PRIVATE_KEY_PATH = os.path.join(BASE_DIR, 'alipay_key/private_key_2048.txt')
PUBLIC_KEY_PATH = os.path.join(BASE_DIR, 'alipay_key/public_key_2048.txt')
4.创建支付宝对象
app_private_key_string = open(PRIVATE_KEY_PATH).read()
alipay_public_key_string = open(PUBLIC_KEY_PATH).read()

alipay = AliPay(
            appid="你的appid",  # 获取沙箱的appid
            app_notify_url=None,  # 默认回调url
            app_private_key_string=app_private_key_string,
            # 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥,
            alipay_public_key_string=alipay_public_key_string,
            sign_type="RSA2",  # RSA 或者 RSA2
            debug=True  # 默认False
        )
5.产生订单字符串
order_string = alipay.api_alipay_trade_page_pay(
            out_trade_no=obj.order_sn,
            total_amount=obj.order_mount,
            subject=obj.order_sn,
            return_url="http://127.0.0.1:8000/alipay/return",
            notify_url="https://example.com/notify"  # 可选, 不填则使用默认notify url
        )
6.拼接网关:
url = 'https://openapi.alipaydev.com/gateway.do?'+order_string
7.支付完成后的操作
class AlipayView(APIView):
    def get(self, request):
        alipay_message = {}
        print('GET:',request.GET)
        for key, value in request.GET.items():
            alipay_message[key] = value

        sign = alipay_message.pop('sign', None)
        print('alipay_message:', alipay_message)

        app_private_key_string = open(PRIVATE_KEY_PATH).read()
        alipay_public_key_string = open(PUBLIC_KEY_PATH).read()

        alipay = AliPay(
            appid="2016092300575166",  # 获取沙箱的appid
            app_notify_url=None,  # 默认回调url
            app_private_key_string=app_private_key_string,
            # 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥,
            alipay_public_key_string=alipay_public_key_string,
            sign_type="RSA2",  # RSA 或者 RSA2
            debug=True  # 默认False
        )
        # 使用支付对象进行验签
        flag = alipay.verify(alipay_message, sign)

        if flag:
            data = alipay_message.get('alipay_trade_page_pay_response')

            trade_no = data.get("trade_no", None)  # 支付宝的交易号
            out_trade_no = data.get('out_trade_no', None)
            pay_status = data.get('trade_status', None)
            pay_time = data.get('gmt_payment', None)

            orderinfo = OrderInfo.objects.filter(order_sn=out_trade_no)
            # 更新订单状态
            orderinfo.pay_status = pay_status
            orderinfo.pay_time = pay_time
            orderinfo.trade_no = trade_no

            orderinfo.save()

            return JsonResponse({'status': 'ok'})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值