一、 支付
微信小程序云开发实现支付,采用的是tenpay库。npm库链接为[tenpay]:https://www.npmjs.com/package/tenpay。云开发环境暂且不表,实现步骤如下:
- 新建一个名称为pay的云函数
- 终端打开云函数,分别执行如下两条命令:npm i wx-server-sdk npm i tenpay
- 云函数代码如下:
//云开发实现支付
const cloud = require('wx-server-sdk')
cloud.init()
//1,引入支付的三方依赖
const tenpay = require('tenpay');
//2,配置支付信息
const config = {
appid: '这里填小程序的appid',
mchid: '这里填微信商户号id',
partnerKey: '这里填微信商户的支付密钥',
notify_url: 'https://mp.weixin.qq.com', // 这里填任意公网可访问的ip即可,如此处的https://mp.weixin.qq.com
spbill_create_ip: '127.0.0.1' //这里填这个就可以
};
exports.main = async (event, context) => {
const wxContext = cloud.getWXContext()
let {
total_fee
} = event;
//3,初始化支付
const api = tenpay.init(config);
const nonceStr = Math.random().toString(36).substr(2, 15)
const timeStamp = parseInt(Date.now() / 1000) + ''
const out_trade_no = "otn" + nonceStr + timeStamp
let result = await api.getPayParams({
out_trade_no: out_trade_no, // 这里填的是商户号中的订单号
body: '牌位', // 这里填写的是付款信息
total_fee: total_fee, //订单金额(分),
openid: wxContext.OPENID //付款用户的openid
});
return result;
}
小程序端调用代码:
pay(total_fee) {
wx.cloud.callFunction({
name: 'pay',
data: { total_fee: total_fee }, // 可传入相关参数。
success: res => {
console.log(res.result)
if (!res.result.appId) return
wx.requestPayment({
...res.result,
success: res => {
console.log(res)
}
})
},
fail: err => {
console.log(err)
}
})
}
这样,就可以实现拉起支付页面,支付给对应的商户了。
二、 退款
注意,此处的退款与企业付款到用户零钱是不一样的,笔者一度认为这是相同的东西,从而浪费了很多时间。并且,退款的api调用需要用到证书,证书在微信商户平
台-账户中心-API安全可以下载,下载后是一个压缩文件,解压后里面有三个文件,咱们只需要以p12结尾的那个文件。同样的,步骤如下:
- 新建一个refund云函数,云函数目录如下: – refund – ssl – apiclient_cert.p12 – index.js
- 右键云函数,在终端打开,执行以下两条命令:npm i wx-server-sdk npm i tenpay
-
云函数代码如下:
// 云函数入口文件 const cloud = require('wx-server-sdk') const tenpay = require('tenpay'); cloud.init() const config = { appid: '这里填小程序的appid', mchid: '这里填商户号id', partnerKey: '这里填商户的支付密钥', pfx: require('fs').readFileSync('ssl/apiclient_cert.p12'), // 这里导入对应的证书 notify_url: 'https://mp.weixin.qq.com', spbill_create_ip: '127.0.0.1' //这里填这个就可以 }; // 云函数入口函数 exports.main = async (event, context) => { const wxContext = cloud.getWXContext() const api = tenpay.init(config); const out_trade_no = event.trade_no, out_refund_no = event.refund_no, total_fee = event.total_fee, refund_fee = event.refund_fee let result = await api.refund({ out_trade_no, // 支付单号,之前生成的 out_refund_no, // 退款单号,可以在之前的支付单号的基础上生成 total_fee, // 订单总额 refund_fee // 退款金额 }); return result }
- 小程序端调用代码
refund() { wx.cloud.callFunction({ name: 'refund', data: { trade_no: "otn10bkmla7cirg1588559477", // 商户单号,即之前支付生成的 refund_no: "refundotn10bkmla7cirg1588559477", // 退款单号,可以在商户支付单号的基础上生成 total_fee: 1, refund_fee: 1 }, success: res => { console.log(res) }, fail: err => { console.log(err) } }) }
结语
以上就是微信小程序云开发支付和退款的全部教程,笔者踩了很多坑才总结完毕,希望对大家能有所帮助。