商业微信小程序开发:小白轻松接单(微信退款)

上一篇笔记介绍了微信支付的详细步骤:商业微信小程序开发:小白轻松接单(微信支付)_微信小程序快速接单-CSDN博客

那么这篇笔记将介绍一下微信的退款功能

1、商户端创建云函数处理退款

1、如果要用商户端进行退款,则需要在商户端的云开发控制台中与商户号进行绑定(怎么绑定,同样参考上篇笔记---微信支付)

2、在商户端微信开发者工具中新建一个nodejs云函数refund

3、在同级目录下创建一个public.js文件来生成所需的随机字符串

1.1、public.js

let nonceStr = function(){
	let chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890'
	let maxPos = chars.length
	let res = ''
	for(let i=0;i<32;i++){
		res+=chars.charAt(Math.floor(Math.random()*maxPos))
	}
	return res
}
// 退款单号
let ouTrefundno = function(){
	let chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890_-'
	let maxPos = chars.length
	let res = ''
	for(let i=0;i<40;i++){
		res+=chars.charAt(Math.floor(Math.random()*maxPos))
	}
	return res
}
module.exports = {nonceStr,ouTrefundno}

1.2、refund云函数

// 云函数入口文件
const cloud = require('wx-server-sdk')

cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV }) // 使用当前云环境
var {nonceStr,ouTrefundno} = require('./public.js')
// 云函数入口函数 :退款申请
exports.main = async (event, context) => {
  const res = await cloud.cloudPay.refund({
    functionName:'paycallback',
    envId:'填写自己的云环境id',
    sub_mch_id:'1669895289',
    nonce_str:nonceStr(),
    out_trade_no:event.out_trade_no,//前端传来的商户订单号
    out_refund_no:ouTrefundno(),//商户退款单号
    total_fee:event.total_fee*100,//订单金额
    refund_fee:event.refund_fee*100//申请退款金额
  })
  if(res.returnCode == 'SUCCESS' && res.resultCode == 'SUCCESS'){
    // 申请退款成功
    return {code:200,msg:'退款申请成功',out_refund_no:res.outRefundNo}
  }else{
    // 申请退款失败
    return {code:4001,msg:'退款申请失败',errCodeDes:res}
  }
}

2 、商户端创建云函数查询退款

1、创建云函数queryRefund并创建public.js来生成随机字符串

// 云函数入口文件
const cloud = require('wx-server-sdk')

cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV }) // 使用当前云环境
var {nonceStr} = require('./public.js')
// 云函数入口函数
exports.main = async (event, context) => {
  const res = await cloud.cloudPay.queryRefund({
    sub_mch_id:'1669895289',
    nonce_str:nonceStr(),
    out_refund_no:event.out_refund_no//商户退款单号
  })
  if(res.returnCode == 'SUCCESS'){
    if(res.resultCode == 'SUCCESS'){
      return {msg:'退款成功'}
    }else{
      return {msg:'退款处理中'}
    }
  }else{
    return {msg:'退款失败',error:res}
  }
}

3、在商户端的app.vue文件中配置云环境

export default {
    onLaunch: function() {
        wx.cloud.init({
            env:'改成自己的云环境id',
            traceUser:true,
        })
    },
}

实现退款按钮的逻辑

async function refund_sure(){
    let DB = await inIt()
    const res = await wx.cloud.callFunction({name:'refund',data:{
        out_trade_no:jy_data.data.out_trade_no,
        total_fee:jy_data.data.total_price*0.0001,
        refund_fee:jy_data.data.refund_price*0.0001
    }})
    // console.log(jy_data.data)
    console.log(res)
    if(res.result.code == 200){ //退款成功
        await DB.database().collection('huiyuan').where({_id:jy_data.data._id}).update({data:{
            deliver:'ref_succ',
            out_refund_no:res.result.out_refund_no
        }})
        new Feedback(res.result.msg,'none').toast()
        jy_data.data.deliver='ref_succ'
        back_item.type = 'yue'
        wx.navigateTo({
            url:'/pages/order/order'
        })
    }else{
        new Feedback(res.result.errCodeDes.errCodeDes,'none').toast()
    }
}

 可以体验一下完整项目(这仅仅是个示例小程序,商品是虚拟产品,不要支付哈,由于不会一直盯着后台,退款可能不及时。)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数字AI小哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值