node对接微信支付 sdk tenpay

node对接微信支付用到了npm的一个包tenpay,首先在项目中执行npm install tenpay --save,将包下载到项目中,我用的是node的express


const tenpay = require('tenpay');	// 引入微信支付SDK

const config = {
  appid: 'xxx',  // 应用id
  mchid: 'xxx',  // 微信商户号
  partnerKey: 'xxx',   // 微信支付安全密匙
  pfx: require('fs').readFileSync('xxx'),   // 证书文件(后缀.12)
  notify_url: 'xxx',   // 支付/退款结果回调
  refund_url: 'https://www.dadaex.cn/api/pay/wxRefund',  // 退款结果通知回调(可不填,沿用上面的路径)
};
// 传入第二个参数为true, 可在控制台输出数据
const api = new tenpay(config, true);

class Get {
  constructor() {
    auto(this)
  }
 	async wxPay(req, res, next) {
    try {
      const { totalAmount, subject, body } = req.query
      const result = await api.unifiedOrder({
        out_trade_no: outTradeNo,	// 订单号码,不能重复,我用的是订单的id加上日期拼成的字符串
        body: body,	// 订单名称
        total_fee: totalAmount,	// 支付金额(单位:分,0.01等于1分) 
        trade_type: 'NATIVE' // 调用的支付类型,默认为JSAPI
      });
      QRCode.toString(result.code_url, { type: 'svg' }, function (err, url) {
        if (err) return res.json(err)
        // url将链接转为了二维码
        // 最后再转为base64格式返回给前端
        return res.json('data:image/svg+xml;base64,' + Buffer(url).toString('base64'))
      })
    } catch (error) {
      return next(error)
    }
  }
 }

发送请求后微信会返回一个链接,需要自己转成二维码,网址草料二维码生成器,支付完成后微信会发送通知到上面写的接口里面,qrcode将微信返回的链接转为二维码

app.use(bodyParser.text({ type: '*/xml' }))	// 将收到的xml数据转为String类型

后台接口路由里面内容

const { router } = require('../../util')
const tenpay = require('tenpay');

// 微信支付
const config = {
  appid: 'xxx',  // 应用id
  mchid: 'xxx',  // 微信商户号
  partnerKey: 'xxx',   // 微信支付安全密匙
  pfx: require('fs').readFileSync('xxx'),   // 证书文件
  notify_url: 'xxx',   // 支付结果回调
  refund_url: '',  // 退款结果通知回调
};
const api = new tenpay(config, true);
  .post('/wxCallback', api.middlewareForExpress('nativePay'), (req,res) => {
	 let info = req.weixin	// 返回的数据通过中间件后会将req.weixin转成存放将xml转成json数据的容器
	 console.log(req.weixin)
	 res.reply()	// 告诉微信支付成功了,不要再发送请求了
   })
实现微信支付需要以下步骤: 1.注册微信商户号并开通支付功能。 2.在微信商户平台创建支付密钥。 3.在后端使用 Node.js 和 Express 框架,引入微信支付 SDK。 4.在前端页面中显示需要支付的金额和商品信息,并将信息通过 POST 请求发送给后端。 5.后端接收到请求后,调用微信支付 SDK 的 API,生成支付订单。 6.将生成的支付订单信息返回给前端,前端调用微信支付 SDK 的 API,发起支付请求。 7.用户在微信客户端确认支付后,后端会收到微信支付成功的回调通知。 下面是实现微信支付的基本代码示例: 1.引入微信支付 SDK ``` const tenpay = require('tenpay'); const config = { appid: '微信公众号/小程序appid', mchid: '微信商户号', partnerKey: '微信支付密钥', pfx: fs.readFileSync('证书文件路径') }; const api = new tenpay(config); ``` 2.生成支付订单 ``` const order = { out_trade_no: '商户订单号', body: '商品描述', total_fee: '支付金额,单位为分', spbill_create_ip: '客户端IP地址', notify_url: '支付成功后的回调通知地址', trade_type: 'JSAPI/NATIVE/APP', openid: '用户openid(JSAPI支付必须)' }; const result = await api.getPayParams(order); ``` 3.发起支付请求 ``` const payParams = await api.getPayParams(order); const prepay_id = payParams.package.split('=')[1]; const paySign = await api.getPaySign({ prepay_id }); const paymentParams = { timeStamp: paySign.timeStamp, nonceStr: paySign.nonceStr, package: paySign.package, signType: 'MD5', paySign: paySign.sign }; res.send(paymentParams); ``` 4.处理支付回调通知 ``` router.post('/notify', async (req, res) => { const data = await tenpay.middleware(req, res); if(data.return_code === 'SUCCESS' && data.result_code === 'SUCCESS') { // 处理支付成功逻辑 res.success(); } else { // 处理支付失败逻辑 res.fail(); } }); ``` 以上是基本的微信支付代码示例,具体实现还需要根据实际业务场景做出相应的调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值