支付宝沙箱:
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'})
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐