npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

tenpay-2

v1.0.0

Published

微信支付 for nodejs

Downloads

4

Readme

微信支付 for nodejs

  • 支付结果通知 - 支持Express或Koa
  • 微信支付API - 支持使用callback或yield形式(co或Koa中使用)

npm node

  • 2017-11-01 增加扫码支付API
  • 2016-11-29 增加微信红包相关API
  • 2016-11-28 增加微信企业付款相关API

使用前必读

关于传入值和微信返回值的数据类型

因涉及金额等敏感问题, API和中间件并没有对数据字段做类型转换

微信返回值XML做JSON转换之后的字段均为字符串类型, 请自行转换后再进行数据运算

  • 重点: '1' + 0 = '10'
  • 重点: 微信支付中传入的金额单位为分, 请注意查阅官方文档

关于错误

API和中间件均对所有错误进行了处理, 统一通过error返回, 包括:

  • 网络类错误 - 网络中断, 连接超时等
  • 微信返回值检验错误 - 微信返回值非法(伪造请求等, 可能性非常低)
  • 业务逻辑错误 - 订单重复, 退款金额大于支付金额等
  • 其它错误 - 应传参数未传入等

关于返回值

未出错时正常返回为JSON格式数据

  • 特殊情况: downloadBill 下载对帐单, 返回值为字符串文本

安装

npm install tenpay

初始化

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

config说明:

  • appid - 公众号ID(必填)
  • mchid - 微信商户号(必填)
  • partnerKey - 微信支付安全密钥(必填, 在微信商户管理界面获取)
  • pfx - 证书文件(选填, 在微信商户管理界面获取)
    • 当不需要调用依赖证书的API时可不填此参数
    • 若业务流程中使用了依赖证书的API则需要在初始化时传入此参数
  • notify_url - 支付结果通知回调地址(选填)
    • 可以在初始化的时候传入设为默认值, 不传则需在调用相关API时传入
    • 调用相关API时传入新值则使用新值
    • 调用相关API时, 若调用和初始化时均无此参数则返回错误
  • spbill_create_ip - IP地址(选填)
    • 可以在初始化的时候传入设为默认值, 不传则默认值为127.0.0.1
    • 调用相关API时传入新值则使用新值

可选参数最佳实践:

  • 如业务流程中用到含证书请求的API, 则必须在初始时传入pfx参数
  • 如回调地址不需要按业务变化, 建议在初始化时传入统一的回调地址
  • 如IP地址不需要按业务变化, 建议在初始化时传入统一的IP地址

微信支付结果通知 • 中间件

// Express
var middleware = api.middlewareForExpress();
app.use('/xxx', middleware, function (req, res) {
	var payInfo = req.weixin;
})

// Koa
var middleware = api.middleware();

API 使用说明

  • 某些API预设了某些必传字段的默认值, 调用时不传参数则使用默认值
  • 初始化时已传入的参数无需调用时重复传入, 如appid mchid
  • 签名(sign)会在调用API时自动处理, 无需手动传入
  • 随机字符串(nonce_str)会在调用API时自动处理, 无需手动传入

promise方式调用(使用co或在Koa中使用)

var result = yield api.getPayParams(order);

callback方式调用

api.getPayParams(order, callback);

API 列表

getPayParams: 获取微信JSSDK支付参数

var order = {
	out_trade_no: '商户内部订单号',
	body: '商品简单描述',
	total_fee: 100,
	openid: '付款用户的openid'
}
api.getPayParams(order, callback);
相关默认值:
  • trade_type - JSAPI

micropay: 扫码支付

var order = {
	out_trade_no: '商户内部订单号',
	body: '商品简单描述',
	total_fee: 100
	auth_code: '1234567890123'
}
api.micropay(order, callback);

unifiedOrder: 微信统一下单

var order = {
	out_trade_no: '商户内部订单号',
	body: '商品简单描述',
	total_fee: 100
}
api.unifiedOrder(order, callback);
相关默认值:
  • trade_type - JSAPI
  • notify_url - 默认为初始化时传入的值或空
  • spbill_create_ip - 默认为初始化时传入的值或127.0.0.1

orderQuery: 查询订单

var order = {
	// transaction_id: '微信的订单号',
	out_trade_no: '商户内部订单号'
}
api.orderQuery(order, callback);

closeOrder: 关闭订单

var order = {
	out_trade_no: '商户内部订单号'
}
api.closeOrder(order, callback);

refund: 申请退款

var order = {
	// transaction_id: '微信的订单号',
	out_trade_no: '商户内部订单号',
	out_refund_no: '商户内部退款单号',
	total_fee: 100,
	refund_fee: 100,
}
api.refund(order, callback);
相关默认值:
  • op_user_id - 默认为商户号(mchid)

refundQuery: 查询退款

var order = {
	// 以下参数4选1
	// transaction_id: '微信的订单号',
	// out_trade_no: '商户内部订单号',
	// out_refund_no: '商户内部退款单号',
	refund_id: '微信退款单号'
}
api.refundQuery(order, callback);

downloadBill: 下载对帐单

var order = {
	bill_date: '账单的日期'
}
api.downloadBill(order, callback);
相关默认值:
  • bill_type - ALL

transfers: 企业付款

var order = {
	partner_trade_no: '商户内部付款订单号',
	openid: '用户openid',
	re_user_name: '用户真实姓名',
	amount: 100,
	desc: '企业付款描述信息',
}
api.transfers(order, callback);
相关默认值:
  • check_name - OPTION_CHECK
  • spbill_create_ip - 默认为初始化时传入的值或127.0.0.1

transfersQuery: 查询企业付款

var order = {
	partner_trade_no: '商户内部付款订单号'
}
api.transfersQuery(order, callback);

sendRedpack: 发放普通红包

var order = {
	// mch_billno和mch_autono二选一
	// mch_billno: '商户内部付款订单号',
	mch_autono: '10位当日唯一数字',
	send_name: '商户名称',
	re_openid: '用户openid',
	total_amount: <付款金额(分)>,
	wishing: '红包祝福语',
	act_name: '活动名称',
	remark: '备注信息'
}
api.sendRedpack(order, callback);
相关默认值和其它说明:
  • mch_billno - 商户内部订单号(传入则mch_autono失效)
  • mch_autono - 当日10位唯一数字, 用于自动处理商户内部订单号逻辑, 用于取代mch_billno参数
  • total_num - 1
  • client_ip - 默认为初始化时的spbill_create_ip参数值或127.0.0.1
  • scene_id - 空, 当红包金额大于200元时必传

sendGroupRedpack: 发放裂变红包

var order = {
	// mch_billno和mch_autono二选一
	// mch_billno: '商户内部付款订单号',
	mch_autono: '10位当日唯一数字',
	send_name: '商户名称',
	re_openid: '种子用户openid',
	total_amount: <付款金额(分)>,
	wishing: '红包祝福语',
	act_name: '活动名称',
	remark: '备注信息'
}
api.sendGroupRedpack(order, callback);
相关默认值和其它说明:
  • mch_billno - 商户内部订单号(传入则mch_autono失效)
  • mch_autono - 当日10位唯一数字, 用于自动处理商户内部订单号逻辑, 用于取代mch_billno参数
  • total_num - 3
  • amt_type - ALL_RAND
  • scene_id - 空, 当红包金额大于200元时必传(文档中未说明)

redpackQuery: 查询红包记录

var order = {
	mch_billno: '商户内部付款订单号'
}
api.redpackQuery(order, callback);
相关默认值:
  • bill_type - MCHT