微信云开发实现微信支付与退款的两种思路

微信云开发实现微信支付与退款的两种思路

本人专注使用云开发,实现一个前端可以做后端以及整个项目的部署与上线。
如果觉得我讲的好就可以给我点个赞。也可以加我微信了解详情。
在这里插入图片描述

1.首先你需要先了解 一下基本的云开发知识。

我们主要用到的数据库和云函数的操作为,调用云函数支付,以及调用云函数退款
主要有两种调取支付的办法,
第一种:使用基础的官方提供的 cloud.cloudPay进行操作,
按照官方的说法:支付官方文档
第一步先用云函数对创建的订单 进行统一下单,具体代码如下。

//云函数部分
const res = await cloud.cloudPay.unifiedOrder({
    "body" : '收款名称',
    "outTradeNo" : '商户支付向后台提供的订单号',  //商户单号
    "spbillCreateIp" : "127.0.0.1",     //这个写这个就行
    "subMchId" : "用户商户号",    
    "totalFee" : '支付金额*100',   //这里单位为分
    "envId": "cloud1-5gsz8z6d5ba3a08f",
    "functionName": "pay_cb"
 })
 //js部分,请求后可以获取requestPayment所需的所有参数。
 wx.requestPayment({
  timeStamp: '',
  nonceStr: '',
  package: '',
  signType: 'MD5',
  paySign: '',
  success (res) { },
  fail (res) { }
})

请添加图片描述
到此就完成了支付的实现,主要是支付订单号要不同,订单金额以分为单位。
第二步退款,按照支付文档中的要求

const res = await cloud.cloudPay.refund({
    "out_refund_no": "T" + new Date().getTime(),//商户退款单号
    "out_trade_no": '商户订单号',//就是支付时提交的商户订单号
    "nonce_str": "" + new Date().getTime(),//随机字符串
    "sub_mch_id": "商户号",//子商户号
    "total_fee": event.total_fee,//订单金额
    "refund_fee": event.total_fee,//申请退款金额	
  })

这里有两个注意点,商户号可以不说子商户号,需要后台绑定下面的图片
请添加图片描述
这个需要在微信支付平台上授权。在微信支付平台的产品中心 —> 我授权的产品 点击服务商API退款 授权
还要一点需要注意的是退款金额一定要小于等于支付金额。
以上为使用官方自带的实现云开发支付。
第二种,使用tenpay模块实现支付
我一般使用的就是这个
这个需要依靠于node.js, 所以需要电脑安装号node.js。
在云函数中右击打开终端安装tenpay

npm i tenpay
如已安装旧版, 重新安装最新版
npm i tenpay@latest

第一步实例化

const tenpay = require('tenpay');
const config = {
  appid: '公众号ID',
  mchid: '微信商户号',
  partnerKey: '微信支付安全密钥',
  pfx: require('fs').readFileSync('证书文件路径'),
  notify_url: '支付回调网址',
  spbill_create_ip: 'IP地址'
};

这里指出一下需要下载安装一下证书到云函数中请添加图片描述
这个是支付证书放在支付云函数中就行,嘻嘻嘻
第二步初始化支付

const api = new tenpay(config);
// 方式二
const api = tenpay.init(config);

我们使用 const api = tenpay.init(config);就行
第三步 调用支付获取wx.requestPayment所需参数。

const wxContext = cloud.getWXContext();
let result = await api.getPayParams({
  out_trade_no: '商户内部订单号',
  body: '商品简单描述',
  total_fee: '订单金额(分)',
  openid: '付款用户的openid'
});

这里openid可以用const wxContext = cloud.getWXContext();获取

在js中调用wx.requestPayment就可以完成支付了。

退款的使用,其注意事项和上面的注意事项相同

let result = await api.refund({
  // transaction_id, out_trade_no 二选一
  // transaction_id: '微信的订单号',
  out_trade_no: '商户内部订单号',
  out_refund_no: '商户内部退款单号',
  total_fee: '订单金额(分)',
  refund_fee: '退款金额(分)'
});

只要调用这个就可以完成退款,等待1-3分钟就会出现。
以上是我 的一个小项目的 源码,如有不正确的希望大神可以不吝赐教,大家也可以 看看我的思路。最后希望大家可以给我一个关注。我会继续创造下去的,谢谢大家。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值