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

yizhihongxing

下面我将为您详细讲解“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日

相关文章

  • Linux系统设置复杂密码策略方法

    下面我将为您详细讲解在Linux系统中如何设置复杂密码策略。 确认密码策略配置文件 首先,我们需要确认系统使用的密码策略配置文件。在大多数Linux系统中,默认使用的策略配置文件是/etc/login.defs,我们可以通过命令grep PASS_MAX_DAYS /etc/login.defs来确认该文件是否被使用。如果显示结果如下: PASS_MAX_D…

    人工智能概论 2023年5月25日
    00
  • tensorflow指定CPU与GPU运算的方法实现

    下面是关于“tensorflow指定CPU与GPU运算的方法实现”的完整攻略。 背景 TensorFlow是目前最流行的机器学习框架之一,它支持在CPU和GPU上进行计算,这样就可以加速训练和推理过程。然而,在某些情况下,我们希望手动指定使用CPU和GPU进行计算的方式,以便更好地控制计算流程。 解决方案 TensorFlow提供了一些方法可以帮助我们手动指…

    人工智能概论 2023年5月25日
    00
  • SQL 根据汉字获取全拼的代码

    获取汉字全拼的代码可以通过使用数据库内置的函数来实现。在MySQL中,可以使用以下3个函数来获取汉字拼音全拼: CONVERT() 函数,它可以将汉字转换为拼音; REPLACE() 函数,它可以用来替换字符串中的字符; SUBSTRING() 函数,它可以获取一个字符串的子串。 下面是获取汉字全拼的步骤: 1. 设置字符集 为了正确地处理中文字符,我们需要…

    人工智能概论 2023年5月24日
    00
  • 详解Pytorch+PyG实现GCN过程示例

    详解Pytorch+PyG实现GCN过程示例 这篇攻略将会详细讲解如何使用PyTorch和PyG实现图卷积网络(GCN)。我们将通过两条示例说明如何使用PyG和PyTorch来实现GCN,并对代码进行详细分析。 简介 图形数据(或称为网络数据或图形数据)由许多顶点和边组成,这些组成通常是不规则的,图形中顶点之间的拓扑关系也是不规则的。GCN是一种用于处理图形…

    人工智能概论 2023年5月25日
    00
  • django执行原生SQL查询的实现

    当Django的ORM无法满足需求时,可能需要使用原生SQL查询。下面是实现原生SQL查询的步骤: 导入模块 我们需要导入Django的connection 模块,它提供了执行原始SQL查询和其他数据库操作的方法。 from django.db import connection 编写SQL查询 接下来,我们可以编写需要执行的SQL查询。为了防止SQL注入攻…

    人工智能概论 2023年5月25日
    00
  • KOA+egg.js集成kafka消息队列的示例

    下面是关于KOA+egg.js集成kafka消息队列的完整攻略。 一、什么是Kafka Kafka是一个高吞吐量的分布式队列系统,被广泛应用于大规模数据处理和处理高并发请求的场景。 二、集成kafka消息队列方案 KOA+egg.js集成kafka消息队列,需要用到kafka-node和egg-kafkanode插件。 其中,kafka-node是kafka…

    人工智能概览 2023年5月25日
    00
  • 小程序识别身份证,银行卡,营业执照,驾照的实现

    实现小程序识别身份证、银行卡、营业执照、驾照的过程需要借助第三方开发平台或者云服务,常用的有百度AI、腾讯AI等。 以下是使用百度AI进行身份证识别的示例: 1.注册百度AI账号,创建应用,并在应用中开通“身份证识别”API。 2.调用API接口,上传要识别的图片,并获取识别结果。示例代码如下: import requests request_url = &…

    人工智能概论 2023年5月25日
    00
  • C++ OpenCV制作黑客帝国风格的照片

    下面我将给你介绍“C++ OpenCV制作黑客帝国风格的照片”的制作攻略。 简介 黑客帝国风格的照片通常以绿色和黑色为主色调,具有数字化的感觉。本攻略将使用C++ OpenCV库制作类似于黑客帝国风格的照片。 步骤 1.加载图片 首先,我们需要加载一张图片。我们可以使用OpenCV库的imread函数来加载图片。以下是加载图片的示例代码: cv::Mat i…

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