node.js 接入微信支付

ape-node-wechatpay-v3

如果觉得还不错,麻烦到 github项目主页 点个赞

感谢各位看官

目录

安装

用法介绍

内置方法介绍

版本介绍

安装

npm

npm i ape-node-wechatpay-v3 --save

weChatPay 用法介绍

创建 weChatPay 实例

创建实例

const apeWeChatPay = require("ape-node-wechatpay-v3");
const fs = require("fs");

const weChatPay = new apeWeChatPay({
  appid: "xxxxxxxxxx",
  mchid: "xxxxxxxxxx",
  serial_no: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  authType: "WECHATPAY2-SHA256-RSA2048",
  apiclientCert: fs.readFileSync("xxx/certificate/apiclient_cert.pem"),
  apiclientkey: fs.readFileSync("xxx/certificate/apiclient_key.pem"),
  certPath: "xxx/certificate",
  APIv3: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
});

参数说明

参数名称参数介绍是否必须
appid公众号(移动应用 / 小程序)的 appid
mchid商户号
serial_no证书序列号
authType请求头签名认证类型,不传则默认为 WECHATPAY2-SHA256-RSA2048
apiclientCert公钥
apiclientkey密钥
certPath微信支付平台证书下载路径(需要回调解密以及验证签名则必填)【包含 wechatpay.pem 和 wechatpaySerial.txt 俩个文件】,建议与公钥密钥在一个文件夹内
APIv3商户后台配置的 APIv3 密钥(需要回调解密以及验证签名则必填)
userAgent微信支付平台证书下载接口请求头 user-agent(默认为 node Serve)

注意:serial_no 是证书序列号,请在商户后台查看。

获取签名值

示例代码

let signature = weChatPay.getSignature(method, url, timestamp, nonce_str, body);

参数说明

参数名称参数介绍是否必须
method支付接口方法
url支付接口地址
timestamp时间戳
nonce_str请求随机串
body请求体(接口需要传则给,反之给空字符串,如"")

获取 HTTP Authorization 头

示例代码

let authorization = weChatPay.getAuthorization(nonce_str, timestamp, signature);

参数说明

参数名称参数介绍是否必须
nonce_str请求随机串(需要与获取签名值的一致)
timestamp时间戳
signature签名值

下载微信支付平台证书

会生成 wechatpay.pem 和 wechatpaySerial.txt 俩个文件,每次更新会覆盖旧的。

微信官方建议在十二小时内更新,可以写定时任务

示例代码

let result = {};
try {
  result = await weChatPay.getWeChatPayCert();
} catch (error) {
  console.log(error);
}
console.log(result);
// { code: 200, msg: '下载证书成功' }

!!!使用此方法必须在构造实体类时传递 certPath 、 APIv3 这俩个参数 !!!

文件说明

文件名称说明
wechatpay.pem下载平台证书接口解密出来公钥(回调签名验证需要)
wechatpaySerial.txt下载平台证书接口的公钥序列号(回调签名验证需要)

返回说明(为了方便开发者做对应的处理)

codedatamsg
200下载成功解释说明
500 / 其他(在 catch 里返回)下载失败(错误信息),详细请看 msg解释说明

支付回调签名验证

示例代码

let Body = req.body; // 微信请求你的回调接口的实体类 body
let Headers = req.headers; // 微信请求你的回调接口的 headers
let result = null;
try {
  result = await weChatPay.verifySignature(
    Headers["wechatpay-signature"], // 应答签名
    Headers["wechatpay-serial"], // 平台证书序列号
    Headers["wechatpay-timestamp"], // 生成签名的时间戳
    Headers["wechatpay-nonce"], // 应答随机串
    req.body
  );
} catch (error) {
  console.log(error);
}
console.log(result);
// { code: 200, msg: '验签名串和签名验证通过' }

!!!使用此方法必须在构造实体类时传递 certPath 、 APIv3 这俩个参数 !!!

返回说明(为了方便开发者做对应的处理)

codedatamsg
200验证通过解释说明
500 / 其他(在 catch 里返回)验证失败(错误信息),详细请看 msg解释说明

回调解密

建议在签名验证成功后解密

示例代码

let Body = req.body; // 微信请求你的回调接口的实体类 body
let Headers = req.headers; // 微信请求你的回调接口的 headers
let data = null;
try {
  data = await weChatPay.decrypting(
    Body.resource.ciphertext, // 结果数据密文
    Body.resource.nonce, // 加密使用的随机串
    Body.resource.associated_data // 附加数据
  );
} catch (error) {
  console.log(error);
}
console.log(data);
// { code: 200, data: xxxx(解密的数据), msg: '解密成功' }

!!!使用此方法必须在构造实体类时传递 certPath 、 APIv3 这俩个参数 !!!

返回说明(为了方便开发者做对应的处理)

codedatamsg
200解密出来的数据解释说明
500 / 其他(在 catch 里返回)解密失败(错误信息),详细请看 msg解释说明

weChatPay 内置方法介绍

Jsapi 下单

示例代码

let data = {
  appid: "xxxxxx",
  mchid: "xxxxxx",
  description: "测试",
  out_trade_no: "xxxxxx",
  notify_url: "xxxxxx",
  amount: {
    total: 1,
  },
  payer: {
    openid: "xxxxxx",
  },
};
let result;
try {
  result = await weChatPay.jsapiPay(data);
} catch (error) {
  console.log(error);
}
console.log(result);
// 正常返回如下示例
// {
//     "code": 200,
//     "prepay_id": "xxxxxxxxxx"
// }

参数说明

参数名称参数介绍是否必须
datajsapi 下单的 body 参数

详细请点击查看微信官方-jsapi-下单文档

Native 下单

示例代码

let data = {
  appid: "xxxxxx",
  mchid: "xxxxxx",
  description: "测试",
  out_trade_no: "xxxxxx",
  notify_url: "xxxxxx",
  amount: {
    total: 1,
  },
};
let result;
try {
  result = await weChatPay.nativePay(data);
} catch (error) {
  console.log(error);
}
console.log(result);
// 正常返回如下示例
// {
//     "code": 200,
//     "code_url": "xxxxxxxxxx"
// }

参数说明

参数名称参数介绍是否必须
datanative 下单的 body 参数

详细请点击查看微信官方-native-下单文档

如果觉得还不错,麻烦到 github项目主页 点个赞

感谢各位看官

  • 22
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
基于微信小程序和Node.js的抢演唱会门票系统实现如下: 首先,使用Node.js构建后端服务器,处理用户请求和抢票逻辑。服务器与微信小程序进行通信,接收来自小程序的用户抢票请求,并进行相应处理。 在小程序方面,用户首先登录小程序,然后浏览演唱会门票详情页面,选择心仪的门票,并点击抢票按钮。 在点击抢票按钮后,小程序调用与后端服务器的接口,将用户的相关信息(如用户ID、门票ID等)发送给后端后端接收到请求后,首先判断该用户是否已经抢过票。如果已经抢过票,则返回用户已抢票的提示信息;如果未抢过票,则继续进行后续逻辑。 后端服务器将用户抢票请求放入队列中,并为该用户开启一个单独的抢票线程。在队列中,用户抢票请求按照时间先后排队。 当用户的抢票请求被处理时,后端服务器检查门票库存。如果门票库存不足,则返回库存不足的提示信息,并移除该用户的抢票请求。 如果门票库存足够,则扣除库存数量,并将用户抢票成功的消息返回给小程序。用户在小程序上会收到抢票成功的提示信息,并显示相应的抢票结果。 同时,后端服务器会将用户的抢票信息和门票信息保存到数据库中,以便后续使用。 总结起来,基于微信小程序和Node.js的抢演唱会门票系统,通过前后端的交互和逻辑处理实现了用户抢票的功能。用户登录小程序后选择门票,点击抢票按钮,后端服务器进行相应处理,判断用户是否已抢过票,对未抢过票的用户进行排队处理,检查门票库存,并实时更新库存数量,最后将抢票结果返回给小程序用户。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

刘先生..

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

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

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

打赏作者

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

抵扣说明:

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

余额充值