Django开发商城项如何对接支付宝APP

支付宝支付和微信支付是当今互联网常用的功能


一: 支付宝研发服务介绍

  1. 百度搜索蚂蚁金服开放平台, 使用支付宝进行登录

Django开发商城项如何对接支付宝APP_第1张图片

进入研发服务界面


Django开发商城项如何对接支付宝APP_第2张图片


Django开发商城项如何对接支付宝APP_第3张图片


Django开发商城项如何对接支付宝APP_第4张图片


下载对应版本的压缩包后运行

在对应的文件下会生成两个对应的文件, 在keys文件夹下建立两个文件, 不要设置后缀, 一个用来保存公钥, 一个用来保存私钥(名称最好要见名知意). 把生成的公钥和私钥分别粘贴在这两个文件夹下

粘贴的时候在文件的开头与结尾加入以下代码

//私钥
-----BEGIN RSA PRIVATE KEY-----
-----END RSA PRIVATE KEY-----
//公钥
-----BEGIN PUBLIC KEY-----
-----END PUBLIC KEY-----

将keys文件复制到你的Django项目文件中
这样就可以进行代码操作了


二: Python操作

1. 因为Python没有集成支付宝的sdk, 所以需要安装第三方的包

pip install python-alipay-sdk


2. 在视图函数里面引入所需要的类

from alipy import AliPay


3. 创建一个实例对象

ali_pay = AliPay(

        # 你的appid

        appid = settings.ALIPAY_APPID,

        # 使用默认的回调地址       

app_notify_url = None,

        # 公钥的路径

        app_private_key_path = os.path.join(settings.BASE_DIR, 'keys/pri'),

        # 私钥的路径

        alipay_public_key_path = os.path.join(settings.BASE_DIR, 'keys/pub),

        # 默认是False 测试环境配合沙箱环境使用, 如果是生成环境改为False

        debug = False

)

4. 网页上的支付宝支付需要跳转到支付宝界面, 进行支付

order_string =

        # 支付宝页面支付

        ali_py.api_alipay_trade_page_pay(

        # 订单编号

        out_trade_no = order.o_id,

        # 订单总额

        total_amount = total_price,

        # 订单描述信息

        subject = 'xxxxxx购物订单-{}'.format(order.o_id),

        # 回调地址, 订单支付成功后回调的地址

        return__url = '支付完成后跳转的地址'

)


5. 拼接支付地址

url = settings.ALIPAY_URL + '?' + order_string


6. 返回url地址


7. 监听订单状态是否支付, 我们可以写一个视图函数

# 监测订单是否支付

def check_pay(request):
    
    if request.method == 'GET':
        
        o_id = request.GET.get('o_id')
        
        alipay = AliPay(
            appid=settings.ALIPAY_APPID,
            app_notify_url=None,
            app_private_key_path=os.path.join(settings.BASE_DIR,'keys/pri'),
            alipay_public_key_path=os.path.join(settings.BASE_DIR,'keys/pub'),
            sign_type='RSA2',
            # 沙箱环境下没有查询订单服务
            debug=True
        )
        
        while True:
            
            response = alipay.api_alipay_trade_query(o_id)
            # code 40004 支付订单未创建
            # code 10000 trade_status  WAIT_BUYER_PAY  等待支付
            # oode 10000 trade_status  TRADE_SUCCESS  支付成功
        
            # response 是字典
            code = response.get('code')
            trade_status =response.get('trade_status')
            
            if code == '10000' and trade_status == 'TRADE_SUCCESS':
                # 支付成功
                # 返回支付结果
                return JsonResponse({
                    'status':1,
                    'msg':'支付成功'
                })
            elif (code == '10000' and trade_status =='WAIT_BUYER_PAY') or code == '40004':
                # 表示支付暂时没有完成
                continue
            else:
                return JsonResponse({
                    'status':0,
                    'msg':'支付失败'
                })

             
           
这里主要是获取code的值来判断用户是否支付


这样就完成了Django对接支付宝支付的操作~~~~~~





你可能感兴趣的:(Django)