Django 17购物商城项目(支付实现:支付宝沙箱环境)

Django 17购物商城项目

      • 1、支付
      • 2、支付宝沙箱环境(用于支付测试,不是真实上线环境)
        • 2.1、python使用支付宝沙箱流程
          • 2.1.1、安装alipay
          • 2.1.2、生成密钥
          • 2.1.3、支付接口代码
      • 3、路由和视图(测试是否可用)
      • 4、可能出现的报错
        • 4.1、RSA?RSA2?

1、支付

Django 17购物商城项目(支付实现:支付宝沙箱环境)_第1张图片

2、支付宝沙箱环境(用于支付测试,不是真实上线环境)

https://openhome.alipay.com/platform/appDaily.htm?tab=account

Django 17购物商城项目(支付实现:支付宝沙箱环境)_第2张图片
在安卓手机上扫描下载沙箱支付宝,可以登录此账号
Django 17购物商城项目(支付实现:支付宝沙箱环境)_第3张图片

2.1、python使用支付宝沙箱流程

2.1.1、安装alipay
pip install python-alipay-sdk --upgrade

如果安装出现问题,可以尝试下面代码
pip3 install -i https://pypi.douban.com/simple pycryptodomex
pip3 install -i https://pypi.douban.com/simple python-alipay-sdk

2.1.2、生成密钥
先下载工具:https://docs.open.alipay.com/291/105971

上面连接里有安装步骤和生成密钥步骤,注意非中文目录安装

按照步骤完成后会生成一个csr文件,在沙箱环境中上传

1、下载好工具后:生成app密钥
Django 17购物商城项目(支付实现:支付宝沙箱环境)_第4张图片
2、这两个密钥自己保存好,它会自动生成txt文件在电脑里,自己找一下。然后复制第二个的应用公钥到支付宝平台沙箱里面

注意是这里的第二个RSA不是第一个RSA2
Django 17购物商城项目(支付实现:支付宝沙箱环境)_第5张图片
Django 17购物商城项目(支付实现:支付宝沙箱环境)_第6张图片
3、弄好后会生成支付宝公钥(注意区分支付宝公钥和应用公钥,不要弄混了,是两个东西),复制支付宝公钥(具体复制到哪儿见下个标题:2.1.3、支付接口代码)
Django 17购物商城项目(支付实现:支付宝沙箱环境)_第7张图片
Django 17购物商城项目(支付实现:支付宝沙箱环境)_第8张图片

2.1.3、支付接口代码

这里我新建了一个py文件写接口代码
Django 17购物商城项目(支付实现:支付宝沙箱环境)_第9张图片
Django 17购物商城项目(支付实现:支付宝沙箱环境)_第10张图片
代码里有我的密钥和私钥,可能已经失效了,换成你自己的支付宝公钥和应用私钥就OK了

from alipay import AliPay


def pay(order_id, price, subject, return_url=None, notify_url=None):
    alipay_public_key_string = """-----BEGIN PUBLIC KEY-----
    MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDIgHnOn7LLILlKETd6BFRJ0GqgS2Y3mn1wMQmyh9zEyWlz5p1zrahRahbXAfCfSqshSNfqOmAQzSHRVjCqjsAw1jyqrXaPdKBmr90DIpIxmIyKXv4GGAkPyJ/6FTFY99uhpiq0qadD/uSzQsefWo0aTvP/65zi3eof7TcZ32oWpIDAQAB
    -----END PUBLIC KEY-----"""

    app_private_key_string = """-----BEGIN RSA PRIVATE KEY-----
    MIICXQIBAAKBgQCgaYHnBs4xmVUeJ06Wncybr4OOu0svQbD/g7kfud2aMPoB3UETNWs0lxu2CtzvdlUtLFSQSI2QfAVeB2fVULILUzyh0HCHMa11/hdAuXBYOTP4Xhe5QlGUTNpBJjqLKsFxLc3PmVptHHRtHlhfdF4NOLdbPfBEB8Fw2oyTo2RhbwIDAQABAoGBAJRXvbemBXy8rYhLFVQX7aVztBeEgMzc1RAWAlaijZoP/MNIlutqlQ93Rjsc5J/WMIKr4i/jyHZ7GoOQGaedDmgORxhw2ji29vgKllsuHzAD5/JzFLIr4T1N//bU6gb7DbTml7dHyEHDLg/nsPVZFmKNg7h3SudPMnpobNPfi4eBAkEA3pTFkd7yzs60Bl559y2UHwYmMFPxmgNJspsVtynv4LS+Fb5a4xDJrMeAjJt16UGE4Xm1669jd5ReckHD7ddUTwJBALh/Lh1BYEYdTXANtIjSPOvKh7Jgc44aQ3nCQP92imwmvI3zIVlnXEXIVVNc1k6dzA1Ppgj8jBMAuLYItn+uOOECQQDU4oIcxJqDRpxUwyPwT/2ttpnr+z3HSoHAfChG6atuxjBQZ6JSLwpVYPMIiOA72tiXN2vSIgwGoTe8HD6jSyJtAkAEtmrtIGBfKhxyQkdcP1KDC1dP/Rq2hIE4uPeEDvkWLh8e2Rj++Z7nwWg8iuCGfY1awbASBrFlQt10+OAAfujBAkBJHaKdVyVmdK9Xqdb4IOopO511kOSIQBZwPnfgkFdBpRrPF+Bt4ROxBi9hP5UwKosONAhi508L5QZDggPht2w
    -----END RSA PRIVATE KEY-----"""

    # 实例化支付应用
    alipay = AliPay(
        appid="20161021007289",
        app_notify_url=None,
        app_private_key_string=app_private_key_string,
        alipay_public_key_string=alipay_public_key_string,
        sign_type="RSA"
    )

    # 发起支付请求
    order_string = alipay.api_alipay_trade_page_pay(
        out_trade_no=order_id,  # 订单号,多次请求不能一样
        total_amount=str(price),  # 支付金额
        subject=subject,  # 交易主题
        return_url=return_url,
        notify_url=notify_url
    )

    return "https://openapi.alipaydev.com/gateway.do?" + order_string

3、路由和视图(测试是否可用)

路由
Django 17购物商城项目(支付实现:支付宝沙箱环境)_第11张图片
视图
Django 17购物商城项目(支付实现:支付宝沙箱环境)_第12张图片
访问:可以支付
Django 17购物商城项目(支付实现:支付宝沙箱环境)_第13张图片

4、可能出现的报错

4.1、RSA?RSA2?

问题:
Django 17购物商城项目(支付实现:支付宝沙箱环境)_第14张图片
解决办法:

如果出现如上图的问题,
可能是你下图这句代码没有写,
也可能是你生成密钥的时候没有生成RSA格式,重新生成并上传到沙箱就好

Django 17购物商城项目(支付实现:支付宝沙箱环境)_第15张图片
Django 17购物商城项目(支付实现:支付宝沙箱环境)_第16张图片

你可能感兴趣的:(python系列)