Nodejs、express框架微信支付开发

1.流程

wx.request 向服务器请求支付参数
服务器根据客户端的 sessionId , 找到 它的 openId, 将它和商家自己的 appId, appSecret, PAY_API_KEY和商品的一系列等信息加密, 去请求微信的服务器
微信的服务器向商家服务器返回这次交易需要的数据
商家服务器处理上述数据, 返回给用户端
用户端接收到数据, 调用 wx.requestPayment 接口
微信服务器主动向商家的服务器发送本次支付的信息(是否成功等)

2.注意点

二次签名和重要,对于第一次开发支付的童靴们来说,是一个很大的坑,千万要注意二次签名。

3.直接上我的源码(dome示例)

var express = require('express');
var router = express.Router();
var request = require('request');
const axios = require('axios')
const md5 = require('md5')
const xml2js = require('xml2js')
const xmlParser = new xml2js.Parser()
const appId = '你的appid'
const appSecret = "你的appSecret"
// 商户号
const mchId = 'xxxxxx'
// 支付的 key
const PAY_API_KEY = 'fernTpqRaPDjuW1qRBqZaly7Bh6DMFJH'

var app = express();

//解决跨域问题
app.all('*', function (req, res, next) {
   
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "X-Requested-With");
res.header("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS");
res.header("X-Powered-By", ' 3.2.1')
res.header("Content-Type", "application/json;charset=utf-8");
next();
});


var nonce_str;//在统一下单时生成的唯一的随机字符串
var out_trade_no;//在统一下单时生成的唯一的随机订单号
// var sign=querySign(appid,mch_id,nonce_str,out_trade_no);//查询签名,传参需要注意
router.post('/secc', function (req, res, next) {
   
var query = req.body;
console.log("post请求:参数", query);
var formData = "";
formData += ""+appId+""; //appid
formData += ""+mchId+""; //商户号
formData += ""<
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现微信支付需要以下步骤: 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、付费专栏及课程。

余额充值