小程序开发中实现一个向用户发红包的功能
更新时间:2023-10-201. 基础设置
首先需要设置好小程序的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) { // 处理返回的结果 } })