源码地址:https://github.com/LL89757/wechat-node
微信API for node.js,目前主要支持小程序及微信支付相关接口
微信小程序官方文档:https://developers.weixin.qq.com/miniprogram/dev/api/
微信支付官方文档:https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_7&index=5
npm install wechat-node-sp
初始化
var weChatApi = require("wechat-node-sp");
var wechatApi = weChatApi({
appId,
appSecret,
mch_id,//微信商户平台ID
pfx: fs.readFileSync("./apiclient_cert.p12"),//微信商户平台支付证书
payKey//微信商户平台API秘钥
})
微信登录相关
//微信登录
var result = await wechatApi.login(code);
if (result.status === 200 && !result.data.errcode) {
var data = {
openid: result.data.openid,
session_key: result.data.session_key,
unionid: result.data.unionid
}
console.log(data);
}
//获取用户信息
var userInfo = await wechatApi.getWechatUserInfo(sessionKey, encryptedData, iv);
console.log(userInfo);
获取微信token
var result = await wechatApi.getAccessToken();
if (result.data && !result.data.errcode) {
var token = result.data.access_token;
console.log(token);
}
微信小程序下单,获取支付参数
var params = {
body: "支付测试",
notify_url: "https://PayNotify",
openid: "openid",
out_trade_no: "111111111111111111111111",
spbill_create_ip: "客户端ip",
total_fee: 1,
trade_type: "JSAPI",
};
var result = await wechatApi.getMiniProgramPayParams(params)
console.log(result);
退款接口
var params = {
out_refund_no: "",//退款商户订单号,商户生成
out_trade_no: "",//需退款订单的商户订单号(二选一)
transaction_id:""//需退款订单的微信订单号(二选一)
refund_fee: 1,
total_fee: 1
}
var result = await wechatApi.refund(params);
console.log(result)
查询订单
// 通过商户订单号查
var result = await wechatApi.queryOrder( out_trade_no);
// 通过微信订单号查
var result = await wechatApi.queryOrder(transaction_id);
小程序模板推送
var msg={
"touser": "openId",
"template_id": "模板id",
"form_id": "formid",//表单提交场景下,为 submit 事件带上的 formId;支付场景下,为本次支付的 prepay_id
"page": "pages/test",//点击模板消息跳转页面,可不填
"data": {
"keyword1": {
"value": "推送测试",
"color": "#173177"
},
"keyword2": {
"value": "推送测试",
"color": "#173177"
}
...
}
}
}
var result = await wechatApi.sendMiniProgramTemplate(token, msg);
console.log(result)
商户服务端处理微信的回调(koa为例)
// 支付成功异步回调
router.use('/wxpay/paynotify',async function paynotify(ctx, next){
//获取微信推送数据
var result = await wechatApi.getWechatNoticeData(ctx.req);
//验证消息是否来自微信
var isWxMessage = await Wechat.WechatAuth(result);
//通知微信处理结果
await Wechat.responseSuccess(ctx,"success");//成功
await Wechat.responseFail(ctx,"fail"); //失败
});
// 退款异步回调
router.use('/wxpay/refundnotify', async function refundnotify(ctx, next){
var result = await wechatApi.getRefundData(ctx.req);
//通知微信处理结果
await Wechat.responseSuccess(ctx,"success");//成功
await Wechat.responseFail(ctx,"fail"); //失败
});