溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

django實現(xiàn)支付寶支付實例講解

發(fā)布時間:2020-09-04 20:32:05 來源:腳本之家 閱讀:150 作者:BZ易風 欄目:開發(fā)技術

安裝python-alipay-sdk

pip install python-alipay-sdk --upgrade

配置

django實現(xiàn)支付寶支付實例講解

視圖函數(shù)orders/views.py

# 訂單支付
# /order/pay
from alipay import AliPay, ISVAliPay
import os
from django.conf import settings
class OrderPayView(View):
  def post(self, request):
    '''支付頁面'''
    # 判斷用戶是否登錄
    user = request.user
    if not user.is_authenticated():
      return JsonResponse({'res':0, 'errmsg':'用戶尚未登錄'})
    # 接收訂單id
    order_id = request.POST.get('order_id')
    # 校驗訂單id
    if not order_id:
      return JsonResponse({'res':1, 'errmsg':'無效的訂單id'})
    # 查詢訂單信息
    try:
      order = OrderInfo.objects.get(order_id=order_id, user=user, pay_method=3, order_status=1)
    except OrderInfo.DoesNotExist:
      return JsonResponse({'res':2, 'errmsg':'訂單錯誤'})

    # 業(yè)務處理 使用python sdk調用支付寶的支付接口
    # 支付寶信息  不能放在settings里 會報錯
    alipay = AliPay(
      appid="2016101200665304",
      app_notify_url=None, # 默認回調url 如果為空的話不能用'' 要用None
      # 個人私鑰
      app_private_key_string=os.path.join(settings.BASE_DIR, 'apps/orders/app_private_key.pem'),
      # 支付寶的公鑰,驗證支付寶回傳消息使用,不是你自己的公鑰,
      alipay_public_key_string=os.path.join(settings.BASE_DIR, 'apps/orders/alipay_public_key.pem'),
      # 加密方式
      sign_type="RSA2", # RSA 或者 RSA2
      # 沙箱是True 正式環(huán)境是False
      debug=True # 默認False
    )
    # 調用支付接口
    # 電腦網(wǎng)站支付,需要跳轉到https://openapi.alipay.com/gateway.do? + order_string 實際地址
    # 沙箱地址 https://openapi.alipaydev.com/gateway.do? + order_string 沙箱地址在alipay后面加上dev
    total_price = order.total_price + order.transit_price # Decimal
    order_string = alipay.api_alipay_trade_page_pay(
      out_trade_no=order_id, # 訂單id
      total_amount=str(total_price), # 支付總金額 因為Decimal格式不能序列化 所以先轉成字符串
      subject='天天生鮮%s'%order_id,
      return_url=None,
      notify_url=None # 可選, 不填則使用默認notify url
    )
    # 返回應答
    pay_url = 'https://openapi.alipaydev.com/gateway.do?' + order_string
    return JsonResponse({'res':3, 'pay_url':pay_url})

配置路由urls.py

from django.conf.urls import url
from orders.views import OrderPlaceView, OrderCommitView, OrderPayView


urlpatterns = [
  url(r'^place$', OrderPlaceView.as_view(), name='place'), # 提交訂單頁面
  url(r'^commit$', OrderCommitView.as_view(), name='commit'), # 提交訂單處理
  url(r'^pay$', OrderPayView.as_view(), name='pay'), # 訂單支付

]

以上就是本次介紹的相關知識點以及實例代碼,更多內容可以參考億速云相關欄目。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經查實,將立刻刪除涉嫌侵權內容。

AI