在我们做一些购物车的结算功能时是一定会有支付功能的,那我们如何去做微信支付这个功能呢,首先我们先要理清思路,并且要了解到接口需要哪些数据以及会返回哪些数据

注意:一定要先看接口文档!

  1. 创建订单。
    ○ 请求创建订单的 API 接口:把(订单金额、收货地址、订单中包含的商品信息)发送到服务器。
    ○ 服务器响应的结果:订单编号
  2. 订单预支付。
    ○ 请求订单预支付的 API 接口:把(订单编号)发送到服务器。
    ○ 服务器响应的结果:订单预支付对象,里面包含了订单支付相关的必要参数。
  3. 发起微信支付。
    ○ 调用 uni.requestPayment() 这个 API,并传递订单预支付对象,发起微信支付。
    ○ 监听 uni.requestPayment() 这个 API 的 success,fail,complete 回调函数。

 这是我们先点击结算按钮是需要做一些校验和提示的,通过校验后再去做支付功能

// 点击了结算按钮
settlement() {
    // #1 先判断是否勾选了要结算的商品
    if (!this.checkedCount) return uni.$showMsg('请选择要结算的商品!')
    // #2 再判断用户是否选择了收货地址
    if (!this.addstr) return uni.$showMsg('请选择收货地址!')
    // #3 最后判断用户是否登录了
    // if (!this.token) return uni.$showMsg('请先登录!')
    if (!this.token) return this.delayNavigate()
    // #4 实现微信支付功能
    this.payOrder()
}

接下来就是支付功能了

// 微信支付
async payOrder() {
    // 1. 创建订单
    // 1.1 组织订单的信息对象
    const orderInfo = {
        // 开发期间,注释掉真实的订单价格,
        // order_price: this.checkedGoodsAmount,
        // 写死订单总价为 1 分钱
        order_price: 0.01,
        consignee_addr: this.addstr,
        goods: this.cart.filter(x => x.goods_state).map(x => (
            { goods_id: x.goods_id, goods_number: x.goods_count, goods_price: x.goods_price }
        ))
    }
    // 1.2 发起请求创建订单
    const { data: res } = await uni.$http.post('/orders/create', orderInfo)
    if (res.meta.status !== 200) return uni.$showMsg('创建订单失败!')

    // 1.3 得到服务器响应的“订单编号”
    const orderNumber = res.message.order_number

    // 2. 订单预支付
    // 2.1 发起请求获取订单的支付信息
    const { data: res2 } = await uni.$http.post('/my/orders/req_unifiedorder', { order_number: orderNumber })

    // 2.2 预付订单生成失败
    if (res2.meta.status !== 200) return uni.$showMsg('预付订单生成失败!')

    // 2.3 得到订单支付相关的必要参数
    const payInfo = res2.message.pay

    // 3. 发起微信支付
    // 3.1 调用 uni.requestPayment() 发起微信支付
    const [err, succ] = await uni.requestPayment(payInfo)

    // 3.2 未完成支付
    if (err) return uni.$showMsg('订单未支付!')

    // 3.3 完成了支付,进一步查询支付的结果
    const { data: res3 } = await uni.$http.post('/my/orders/chkOrder', { order_number: orderNumber })

    // 3.4 检测到订单未支付
    if (res3.meta.status !== 200) return uni.$showMsg('订单未支付!')

    // 3.5 检测到订单支付完成
    uni.showToast({
        title: '支付完成!',
        icon: 'success'
    })
}

以上就是功能代码啦,但是要注意的是,可能做出来后会没有效果,因为这个东西是需要一些权限账号的,如果是自己写的话,没有特定的权限是出不来支付功能的

主要其实就是调用uni.requestPayment()这个api的,具体可以去参照uniapp的官方文档uni.requestPayment(OBJECT) | uni-app官网