支付功能查看官方文档。

常见的支付

  • 支付宝

    • 需要企业资质
    • 营业执照
  • 微信

    • 要求同支付宝
    • 要认证,认证一次两百,一年收一次
  • 银联

    • 也有一定要求
  • 百度钱包
  • 京东钱包

支付宝支付

支付宝开放平台(蚂蚁金服开放平台):https://open.alipay.com/platform/home.htm

开发文档:https://opendocs.alipay.com/open/200
调用接口API文档:https://opendocs.alipay.com/apis/api_1
支付流程(看明白工资加1000)


创建应用

添加功能

这些功能都需要签约

签约需要认证等待,为保证开发者开发的便捷,支付宝还有沙箱测试:https://opendocs.alipay.com/open/200/105311

使用沙箱的话,需要使用专门的沙箱支付宝app。

去github上使用Python的接口来调用支付宝:https://github.com/fzlee/alipay/blob/master/README.zh-hans.md#alipay.trade.page.pay

官方也出现了python调用接口的文档:https://opendocs.alipay.com/open/54/103419/

这里采用github上的第三方库。

Python SDK调用

安装

# 安装python-alipay-sdk
pip install python-alipay-sdk --upgrade

生成密钥文件

官网有生成密钥的工具

初始化

我们先写一个url用于支付页面:

url(r'^alipay/', views.alipay, name='alipay'),

views:

def alipay(request):

    # 构建支付的客户端 AlipayClient
    alipay_client = AliPay(
    appid=ALIPAY_APPID,
    app_notify_url=None,  # 默认回调url
    app_private_key_string=APP_PRIVATE_KEY,
    # 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥,
    alipay_public_key_string=ALIPAY_PUBLIC_KEY,
    sign_type="RSA", # RSA 或者 RSA2
    debug=False  # 默认False
)
    # 使用Alipay进行支付请求的发起
    subject = 'Airpods Pro'
    # 电脑网站支付,需要跳转到https://openapi.alipay.com/gateway.do? + order_string
    order_string = alipay_client.api_alipay_trade_page_pay(
        out_trade_no="111",
        total_amount=1115,
        subject=subject,
        return_url="https://www.justinwuwei.cn",
        notify_url="https://www.justinwuwei.cn"  # 可选, 不填则使用默认notify url
    )
    # 客户端操作
    return redirect('https://openapi.alipaydev.com/gateway.do?'+order_string)

app_private_key是自己生成的私钥
alipay_public_key是阿里的公钥

settings.py:

ALIPAY_APPID = '2021000116677905'

APP_PRIVATE_KEY = open(os.path.join(BASE_DIR, 'alipay_config/app_rsa_private_key.pem'), 'r').read()

ALIPAY_PUBLIC_KEY = open(os.path.join(BASE_DIR, 'alipay_config/alipay_rsa_public_key.pem'), 'r').read()

总结一下就是,服务端生成订单信息,加密好发送给支付宝,剩下的支付流程和服务器没有关系。

接口接入商城数据库

将刚刚写好的支付宝接口接入商城数据库:
order_detail.js:

$(function(){
    $('#alipay').click(function(){
        console.log('支付');
        var order_id = $(this).attr('orderid');
        // $.getJSON('/peiqi1/payed/', {'orderid': orderid}, function(data) {
        //     console.log(data);
        //
        //     if(data['status']===200){
        //         window.open('/peiqi1/mine/', target='_self');
        //     }

        // })
    window.open('/peiqi1/alipay/?orderid='+ order_id, target='_self');
})
})

views:将订单的信息传入支付宝调用接口

def alipay(request):
    # 获取订单号,并且再次计算总价格
    order_id = request.GET.get('orderid')
    order = Order.objects.get(pk=order_id)
    order_total = order.o_price
    # print(order_id)
    # print(order_total)

    # 构建支付的客户端 AlipayClient
    alipay_client = AliPay(
    appid=ALIPAY_APPID,
    app_notify_url=None,  # 默认回调url
    app_private_key_string=APP_PRIVATE_KEY,
    # 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥,
    alipay_public_key_string=ALIPAY_PUBLIC_KEY,
    sign_type="RSA", # RSA 或者 RSA2
    debug=False  # 默认False
)
    # 使用Alipay进行支付请求的发起
    subject = 'Airpods Pro'
    # 电脑网站支付,需要跳转到https://openapi.alipay.com/gateway.do? + order_string
    order_string = alipay_client.api_alipay_trade_page_pay(
        out_trade_no=str(uuid.uuid4()),  # 订单号
        total_amount=order_total,
        subject=subject,
        return_url="https://www.justinwuwei.cn",
        notify_url="https://www.justinwuwei.cn"  # 可选, 不填则使用默认notify url
    )

    # 客户端操作
    return redirect('https://openapi.alipaydev.com/gateway.do?'+order_string)

支付成功返回

当用户支付结束时,支付宝会发送支付结果至服务器,这时需要修改订单信息,并且返回给用户支付结果的界面(成功/失败)。

最后修改:2024 年 03 月 13 日
如果觉得我的文章对你有用,请随意赞赏