django

django 项目接入支付宝支付

1. 准备环境

注册支付包沙箱环境, https://open.alipay.com/develop/sandbox/app, 其中 APPID、接口加签方式、支付宝网关地址 需要关注(沙箱环境)

python -m pip install python-alipay-sdk==3.3.0

##2. 在django的配置文件中添加之支付宝的配置。

######################支付宝支付相关################################

ALIPAY_APPID = 9021000134691081     #沙箱中的APPID
ALIPAY_DEBUG = True                 # 沙箱中的调试模式, 会在控制台打印日志
ALIPAY_URL = 'https://openapi-sandbox.dl.alipaydev.com/gateway.do'           # 沙箱中的支付宝网关地址, 接入生产环境时 需要更改网关地址
ALIPAY_RETURN_URL = 'http://www.nihao.site:8080/pay_success.html'      # 支付宝支付成功时, 页面跳转的地址
APP_PRIVATE_KEY_PATH = os.path.join(BASE_DIR, 'apps/pay/keys/app_private_key.pem')    #当前应用的私钥, 当前应用的公钥需要上传到沙箱, ————》 接口加签方式--》自定义密钥
ALIPAY_PUBLIC_KEY_PATH = os.path.join(BASE_DIR, 'apps/pay/keys/alipay_public_key.pem')   # 支付宝的公钥, 支付宝的私钥在支付宝那里,只需要将支付宝公钥迁移到当前应用上即可。以.pem文件结尾。

app 生成密钥方法(linux系统):
openssl
OpenSSL> genrsa -out app_private_key.pem # 生成私钥
OpenSSL> rsa -in app_private_key.pem -pubout -out app_public_key.pem # 通过私钥导出公钥

3. 接入支付宝的业务逻辑

1. 获取订单id
2. 验证订单id (根据订单id查询订单信息)
3. 读取应用私钥和支付宝公钥
4. 创建支付宝实例
5. 调用支付宝的支付方法
6.  拼接连接
7. 返回响应

:用于跳转支付宝页面的信息,POST和GET方法生成内容不同:使用POST方法执行,结果为html form表单,在浏览器渲染即可;
使用GET方法会得到支付宝URL,需要打开或重定向到该URL。建议使用POST方式。

def get(self, request, order_id):
user = request.user
try:
order = OrderInfo.objects.get(order_id=order_id,
status=OrderInfo.ORDER_STATUS_ENUM[‘UNPAID’],
user=user)
except OrderInfo.DoesNotExist:
return JsonResponse({‘code’:400,‘errmsg’:‘没有此订单’})

    # 读取配置的支付宝公钥和档期那应用的私钥    
    app_private_key_string = open(dev.APP_PRIVATE_KEY_PATH).read()
    alipay_public_key_string = open(dev.ALIPAY_PUBLIC_KEY_PATH).read()

    alipay = AliPay(
        appid=dev.ALIPAY_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=dev.ALIPAY_DEBUG, # 默认 False
        verbose=True,  # 输出调试数据
        config=AliPayConfig(timeout=15)  # 可选,请求超时时间
    )


    subject = "测试订单"

    # 电脑网站支付,需要跳转到:https://openapi.alipay.com/gateway.do? + order_string  # 生产环境中使用
    order_string = alipay.api_alipay_trade_page_pay(
        out_trade_no=order_id,   # 订单id
        total_amount=str(order.total_amount),   # 总价钱
        subject=subject,    # 主题
        return_url=dev.ALIPAY_RETURN_URL,   # 支付成功后跳转的页面
        notify_url="https://example.com/notify"  # 可选,不填则使用默认 notify url
    )

    pay_url = 'https://openapi-sandbox.dl.alipaydev.com/gateway.do?'+order_string   # 沙箱环境使用, 出现页面跳转不到沙箱页面上时, 可检查当前的网关是不是沙箱环境的网关
    return JsonResponse({
        'code':  0,
        'errmsg':'ok',
        'alipay_url': pay_url  
    })

##4. 调试

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值