Django1.11配合uni-app发起微信支付的实现

下面我将为您详细讲解“Django 1.11 配合 uni-app 发起微信支付的实现”的完整攻略。

一、前置条件

  1. 在微信公众平台中开通微信支付功能,并获得相关的 APP ID商户号支付密钥
  2. 安装 WxPayAPI,并将 WxPayAPI 放置在项目的根目录下;
  3. 在 Django 中安装 django-rest-framework(DRF) 和 djangorestframework-jwt(用户鉴权);
  4. 确保 uni-app 中已经安装了 uni.request 等必需的插件。

二、微信支付的 SDK 集成

  1. 将微信支付的 WxPayAPI 放置在 Django 项目的根目录下并引入 SDK

将后台收到的请求数据转成 XML 后传入微信支付的 SDK 里面,获取预支付订单信息,然后返回给前端。在 Django 项目的根目录下创建 wxpay 目录,将 WxPayAPI 中的 lib 文件夹以及 WxPay.Api.php 引入到 wxpay 目录下。然后,将 wxpay 目录加入到 settings.pyINSTALLED_APPS 中,以便后续的调用。

示例代码:

from wxpay.lib import *
from wxpay import *
@api_view(['POST'])
@permission_classes([IsAuthenticated])
def user_wxpay(request):
    """
    request.POST 包含以下字段:
        openid: 微信用户 openid
        out_trade_no: 商户订单号
        total_fee: 支付金额(单位:元)
        body: 订单描述
    """
    openid = request.POST.get('openid', '')
    out_trade_no = request.POST.get('out_trade_no', '')
    total_fee = request.POST.get('total_fee', '')
    body = request.POST.get('body', '')

    if not all([openid, out_trade_no, total_fee, body]):
        return Response({'errMsg': '请求参数不完整,请检查'}, status=status.HTTP_400_BAD_REQUEST)

    # 微信支付参数配置
    wxpay_conf = wxPayConfig(APPID, MCHID, KEY, APPSECRET, SSLCERT_PATH, SSLKEY_PATH)
    wxpay = WXPay(wxpay_conf)

    # 组装微信支付请求参数
    data = {
        'body': body,
        'out_trade_no': out_trade_no,
        'total_fee': int(float(total_fee) * 100),
        'spbill_create_ip': request.META.get('REMOTE_ADDR', '127.0.0.1'),
        'notify_url': NOTIFY_URL,
        'trade_type': 'JSAPI',
        'openid': openid,
    }

    # 调用微信支付 API 获取预支付订单信息
    result = wxpay.unifiedOrder(data)
    if result['return_code'] != 'SUCCESS' or result['result_code'] != 'SUCCESS':
        return Response({'errMsg': result['return_msg']}, status=status.HTTP_400_BAD_REQUEST)

    # 组装返回给前端的支付信息
    prepay_id = result['prepay_id']
    package = 'prepay_id=%s' % prepay_id
    timestamp = int(time.time())
    nonce_str = getNonceStr()
    sign = wxpay.getSign({
        'appId': APPID,
        'timeStamp': str(timestamp),
        'nonceStr': nonce_str,
        'package': package,
        'signType': 'MD5',
    })

    # 将支付相关信息返回给前端
    data = {
        'nonceStr': nonce_str,
        'package': package,
        'signType': 'MD5',
        'paySign': sign,
        'timeStamp': str(timestamp),
    }

    return Response(data)
  1. uni-app 中发起微信支付请求

前端将后台返回的支付参数组装成标准的微信支付格式,并调用 uni.request 发起微信支付请求。需要注意的是,在 uni.request 中设置 dataType: "xml"responseType: "text",以便保证返回内容的准确性。

示例代码:

<template>
  <view>
    <button @tap="pay">微信支付</button>
  </view>
</template>
<script>
  export default {
    methods: {
      pay() {
        const params = {
          openid: 'xxxx',
          out_trade_no: 'xxxx',
          total_fee: 0.01,
          body: '测试订单',
        }
        uni.request({
          url: 'https://your-api-url.com/user/wxpay/',
          method: 'POST',
          data: params,
          header: {
            'Authorization': `Bearer ${uni.getStorageSync('token')}`,
            'Content-Type': 'application/x-www-form-urlencoded'
          },
          dataType: 'xml',
          responseType: 'text',
          success: (res) => {
            console.log(res)
            const data = res.data
            uni.requestPayment({
              'timeStamp': data.timeStamp,
              'nonceStr': data.nonceStr,
              'package': data.package,
              'signType': data.signType,
              'paySign': data.paySign,
              success: (res) => {
                console.log(res)
              },
              fail: (res) => {
                console.log(res)
              }
            })
          },
          fail: (res) => {
            console.log(res)
          }
        })
      }
    }
  }
</script>

三、微信支付的接口测试

在以上的操作完成之后,可以调用微信支付的接口进行测试。由于微信支付是需要用到商户信息和微信支付账号等敏感信息的,所以建议在 DEBUG 模式下进行测试,以便快速完成测试。完成后,需要将代码中的 DEBUG 变量改为 False。

同时,在测试时还需要注意以下几点:

  • 在微信支付管理后台开启调试模式;
  • 在微信支付管理后台配置异步通知地址;
  • 将预支付订单号传入到微信的支付成功回调地址中。

以上就是关于“Django 1.11 配合 uni-app 发起微信支付的实现”的完整攻略,希望对您有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Django1.11配合uni-app发起微信支付的实现 - Python技术站

(0)
上一篇 2023年5月25日
下一篇 2023年5月25日

相关文章

  • spring boot项目中如何使用nacos作为配置中心

    下面就详细讲解“spring boot项目中如何使用nacos作为配置中心”的完整攻略。 什么是Nacos Nacos是一个基于DNS和HTTP的动态服务发现、配置管理和服务管理平台,致力于帮助用户更好的构建、演进、治理微服务生态系统。Nacos提供了服务发现、配置管理、动态DNS服务以及数据共享和元数据管理等基础设施功能。 在Spring Boot项目中集…

    人工智能概览 2023年5月25日
    00
  • Python制作进度条的四种方法总结

    Python制作进度条的四种方法总结 介绍 进度条是指在运行程序时,以某种形式来表示程序的处理进度,通常是一个滚动的条形动画或一个百分比数字。在Python中,我们可以使用多种方法来制作进度条,让我们来看看这四种常见的方法。 方法一:使用tqdm库 tqdm是一个用于在Python中显示进度条的小型库。它可以显示进度条的百分比和处理速度,并在处理完成时将所有…

    人工智能概论 2023年5月25日
    00
  • Node.js连接mongodb实例代码

    下面我将为您详细讲解Node.js连接mongodb实例的完整攻略。 1. 安装MongoDB和Node.js 首先,我们需要安装MongoDB和Node.js。如果您已经安装了,可以跳过这一步。 安装MongoDB 您可以在MongoDB官网下载MongoDB的安装包,并按照官方文档进行安装。 安装Node.js 您可以在Node.js官网下载Node.j…

    人工智能概论 2023年5月25日
    00
  • spring boot整合redis主从sentinel方式

    下面我来详细讲解spring boot整合redis主从sentinel的完整攻略。 1. 环境准备 在开始之前,需要保证本地环境已经安装好了以下软件:- Redis- Spring Boot- Maven 2. 添加依赖项 在pom.xml中加入以下依赖项: <dependency> <groupId>org.springframe…

    人工智能概览 2023年5月25日
    00
  • python高阶爬虫实战分析

    Python高阶爬虫实战分析攻略 本攻略将介绍基于Python语言的高阶爬虫实战分析,其中包括如何用Python实现高阶爬虫的概念、爬虫的核心机制及实例操作。 1. 什么是高阶爬虫 高阶爬虫是指对于一些反爬虫手段相对较强、需要一定技术和知识才能实现的网站进行爬取的技术和手段。 2. 爬虫的基本机制 2.1 数据采集 首先需要对目标网站进行数据采集,包括网页 …

    人工智能概论 2023年5月24日
    00
  • Python 图像处理 Pillow 库详情

    Python 图像处理 Pillow 库详情 Pillow 是 Python 的一个图像处理库,可以对图像进行各种操作,如旋转、缩放、裁剪和滤镜等。 安装 Pillow 通过 pip 可以安装 Pillow: pip install Pillow 打开和保存图像 使用 Pillow 可以轻松地打开和保存图像。 打开图像 from PIL import Ima…

    人工智能概览 2023年5月25日
    00
  • 深入探究Django中的Session与Cookie

    深入探究Django中的Session与Cookie 在Web开发中,会话(Session)和Cookie(Cookie)是常用的两种技术,用于存储用户信息和状态。Django自带了Session和Cookie的支持,本文将介绍Django中Session和Cookie的详细使用方式。 Session的使用 开启Session支持 Django默认情况下开启…

    人工智能概论 2023年5月25日
    00
  • django自带的权限管理Permission用法说明

    Django是一个基于Python的Web框架,自带了一套强大的权限管理系统,其核心概念就是Permission(权限)。 Permission是Django的一种权限控制方式,用于设置和控制用户在系统中的访问权限。 在Django中,Permission本质上就是一个字符串,表示用户能够访问哪些部分或者做哪些操作。 用户需要有对应的Permission才能…

    人工智能概览 2023年5月25日
    00
合作推广
合作推广
分享本页
返回顶部