小程序支付流程

 

前端需要做的事情:

  1. 生成平台订单:前端调用接口,向后端传递需要购买的商品信息、收货人信息,[后端生成平台订单,返回订单编号]
  2. 获取预付单信息:将订单编号发送给后端后, [后端向微信服务器获取预付单信息,后端会将微信服务器返回的预付单信息进行加密,然后将加密以后的预付单信息返回给前端]
  3. 发起微信支付:前端调用 wx.requestPayment() 发起微信支付
  4. 查询支付状态:调用接口查询支付状态
 //提交订单
  async subMitorder() {
    const {
      buyName,
      buyPhone,
      deliveryDate,
      blessing,
      orderAddress,
      orderInfo
    } = this.data;
    const parmas = {
      buyName,
      buyPhone,
      cartList: orderInfo.cartVoList,
      deliveryDate,
      remarks: blessing,
      userAddressId: orderAddress.id
    }
    //对参数进行验证
    const {
      valid
    } = await this.validatorPerson(parmas);

    if (!valid) return;
    //调用接口创建平台订单
    const {
      code,
      data
    } = await reqSubmitOrder(parmas);
    if (code === 200) {
      //在平台创建成功以后,需要将服务器后台返回的订单编号挂载到页面实例上
      this.orderNo = data;
      //获取预付单信息
      this.advancePay();
    }
  },
  async advancePay() {
    // 获取预付单信息、支付参数
    try {
      const {
        code,
        data
      } = await reqPreBuyInfo(this.orderNo);
      if (code == 200) {
        //调用微信支付接口
        const payInfo = await wx.requestPayment(data);
        // 获取支付结果
        if (payInfo.errMsg === 'requestPayment:ok') {
          // 查询订单的支付状态
          const payStatus = await reqPayStatus(this.orderNo)
          if (payStatus.code === 200) {
            wx.redirectTo({
              url: '/modules/orderPayModule/pages/order/list/list',
              success: () => {
                wx.toast({
                  title: '支付成功',
                  icon: 'success'
                })
              }
            })
          }
        }
      }
    } catch (error) {
      wx.toast({
        title: '支付失败,请联系客服',
        incon: 'error'
      })
    }
  },
  //对收货人,订购人请求参数进行验证
  validatorPerson(params) {
    // 验证订购人,是否只包含大小写字母、数字和中文字符
    const nameRegExp = '^[a-zA-Z\\d\\u4e00-\\u9fa5]+$'

    // 验证订购人手机号,是否符合中国大陆手机号码的格式
    const phoneReg = '^1(?:3\\d|4[4-9]|5[0-35-9]|6[67]|7[0-8]|8\\d|9\\d)\\d{8}$'

    //创建验证规则
    const rules = {
      userAddressId: {
        required: true,
        message: '请输入收货地址'
      },
      buyName: [{
          required: true,
          message: '请输入订购人姓名'
        },
        {
          pattern: nameRegExp,
          message: '订购人姓名不合法'
        }
      ],
      buyPhone: [{
          required: true,
          message: '请输入订购人手机号'
        },
        {
          pattern: phoneReg,
          message: '订购人手机号不合法'
        }
      ],
      deliveryDate: {
        required: true,
        message: '请选择送达日期'
      }
    }

    //传入验证规则,进制实例化
    const validator = new Schema(rules);

    //调用实例方法对请求参数进行验证 注意: 我们希望将验证结果通过promise的形式返回给函数的调用者
    return new Promise((resolve) => {
      validator.validate(params, (errors) => {
        if (errors) {
          //验证失败 进行提示
          wx.toast({
            title: errors[0].message
          })
          //如果属性值是false,说明验证失败
          resolve({
            valid: false
          })
        } else {
          //如果属性值是true,说明验证成功
          resolve({
            valid: true
          })
        }
      })
    })
  },

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值