python-alipay-sdk

使用第三方包来完成支付宝sdk调用:

安装
# 安装python-alipay-sdk

pip install python-alipay-sdk --upgrade

# 对于python2, 请安装2.0以下版本:

pip install python-alipay-sdk==1.1

生成密钥文件
openssl

OpenSSL> genrsa -out app_private_key.pem   2048  # 私钥
OpenSSL> rsa -in app_private_key.pem -pubout -out app_public_key.pem # 导出公钥
OpenSSL> exit

在支付宝上下载的公钥是一个字符串,你需要在文本的首尾添加标记位,若已有则不需要再添加

-----BEGIN PUBLIC KEY----- 和 -----END PUBLIC KEY-----

实例:

def test(request):
	# 获取前端传来的订单id
    order_id = request.GET.get('order_id')
    data = {
     
        'order_id': order_id
    }
    # 将订单id作为json格式返回
    return JsonResponse(data=data)

def alipay(request):
	# 获取订单id
    order_id = request.GET.get('order_id')
    # 在数据库中根据订单id查找对应的订单对象
    order = Order.objects.get(id=order_id)
    # 订单价格
    order_price = order.o_price
    # 订单商品
    order_goods = OrderGoods.objects.filter(o_order_id=order_id)
    # 获取订单商品名字和数量,存在列表中
    order_goods_list = []
    for good in order_goods:
        order_goods_list.append('{}*{}'.format(good.o_goods.prodectlongname, good.o_goods_num))
    # 创建alipei对象
    alipay_client = AliPay(
        appid=ALIPAY_APPID,  # 在settings中创建的支付宝appid,需要在支付宝官网生成应用之后获取appid
        app_notify_url=None,  # 定义默认回调url
        app_private_key_string=APP_PRIVATE_KEY,  # 在支付宝官网根据文档操作生成的应用私钥
        alipay_public_key_string=ALIPAY_PUBLIC_KEY,  # 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥,
        sign_type="RSA2",  # RSA 或者 RSA2
        debug=False,  # 默认False
        verbose=False,  # 输出调试数据
        config=AliPayConfig(timeout=15),  # 可选, 请求超时时间
    )
    subject = str(order_goods_list)
    # 传给支付宝的订单信息
    order_string = alipay_client.api_alipay_trade_page_pay(
        out_trade_no=order_id,  # 订单id
        total_amount=order_price,  # 订单金额
        subject=subject,  # 订单明细
        return_url="https://opendocs.alipay.com/",  # 支付完成后的跳转页面
        notify_url="https://opendocs.alipay.com/"  # 可选, 不填则使用默认notify url
    )
	# 将订单信息发送给支付宝生成交易订单
    return redirect('https://openapi.alipaydev.com/gateway.do?' + order_string)
$(function () {
     
    # 在html页面的支付按钮上添加点击事件
    $("#alipay").click(function () {
     
        console.log('pay')
        var order_id = $(this).attr('order_id')
        # 调用test函数获取订单id
        $.getJSON('/axf/test/', {
     "order_id": order_id}, function (data) {
     
            # 将订单id作为路由参数传给服务器,生成支付宝订单
            window.open('/axf/alipay/?order_id=' + data['order_id'])
            # 获取订单支付状态
            $.getJSON('/axf/payed', {
     "order_id": order_id}, function (data) {
     
                console.log(data)
                window.open('/axf/mine_icon/',target="_self")
            })
        })
    })
})

你可能感兴趣的:(python-alipay-sdk)