c语言编程笔录

首页 >   > 笔记大全

笔记大全

小程序开发中实现一个向用户发红包的功能

更新时间:2023-10-20

1. 基础设置

首先需要设置好小程序的appid、secret以及商户号。其中appid和secret是在微信公众平台或开放平台注册小程序时获取的,商户号可以去微信支付平台进行注册获取。在小程序中需要进行配置,以便开发过程中通过调用微信支付的接口实现发红包的功能。

  const appid = 'xxxxx' // 小程序appid
  const secret = 'xxxxx' // 小程序secret
  const mch_id = 'xxxxx' // 商户号
  const wxpay_url = 'https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack' // 微信支付接口地址

2. 获取用户openid

在发红包之前需要获取用户的openid,可以通过小程序提供的登录接口获取用户的code,再通过code换取用户的openid。

  wx.login({
    success: function (res) {
      if (res.code) {
        wx.request({
          url: 'https://api.weixin.qq.com/sns/jscode2session',
          data: {
            appid: appid,
            secret: secret,
            js_code: res.code,
            grant_type: 'authorization_code'
          },
          success: function (res) {
            const openid = res.data.openid // 获取到用户的openid
            // .. 其他逻辑处理
          }
        })
      }
    }
  })

3. 调用微信支付接口发红包

在小程序中调用微信支付接口发红包,需要提交一些参数,如商户号、发放红包的金额、红包发放人数等等,同时需要将获取到的用户openid传递给微信支付接口。具体参数可以查看微信支付文档。

  const data = {
    mch_billno: 'xxxxx', // 商户订单号
    wxappid: appid, // 小程序appid
    mch_id: mch_id, // 商户号
    send_name: 'xxx', // 商户名称
    total_amount: 100, // 总金额,单位为分
    total_num: 1, // 红包发放总人数
    wishing: '祝福语', // 祝福语
    client_ip: 'xx.xx.xx.xx', // 调用接口的机器ip地址
    act_name: '红包活动名称', // 活动名称
    remark: '备注信息', // 备注信息,可以说明活动、使用条件等信息
    nonce_str: 'xxxxx', // 随机字符串,不长于32位
    re_openid: openid // 用户openid
  }

  // 计算sign和xml格式数据
  const sign = wxpay_sign(data) // 自定义函数,计算sign
  const xmlData = jsonToXml(data) // 自定义函数,将json数据转换为xml格式

  // 发起请求
  wx.request({
    url: wxpay_url,
    method: 'POST',
    header: {
      'content-type': 'application/x-www-form-urlencoded'
    },
    data: xmlData,
    success: function (res) {
      // 处理返回的结果
    }
  })

4. 模板消息提醒

在用户领取到红包后,可以通过小程序提供的模板消息接口向用户发送模板消息提醒。模板消息需要在小程序后台进行配置,可以自定义模板消息的标题、内容和跳转链接等。

  const data = {
    touser: openid,
    template_id: 'xxxxx', // 模板消息ID
    page: 'pages/index/index', // 跳转路径
    form_id: 'xxxxx', // 获取到的formId
    data: {
      keyword1: {
        value: 'xxxxx' // 模板消息内容
      },
      keyword2: {
        value: 'xxxxx'
      },
      keyword3: {
        value: 'xxxxx'
      },
      keyword4: {
        value: 'xxxxx'
      },
      keyword5: {
        value: 'xxxxx'
      }
    }
  }

  // 发送模板消息
  wx.request({
    url: 'https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token=' + access_token,
    method: 'POST',
    data: data,
    success: function (res) {
      // 处理返回的结果
    }
  })