微信支付要在微信公众平台配置 微信授权目录和微信回调目录
微信授权目录 是你支付时收集支付数据的目录,只有授权目录才能支付。
微信支付之前要进行用户授权
router.js
var express = require('express');
var router = express.Router();
var OAuth = require('wechat-oauth');
var client = new OAuth(config.wx_appid, config.wx_secret);
var middleware = require('wechat-pay').middleware;
var Payment = require('wechat-pay').Payment;
var initConfig = {
partnerKey: config.wechat.partnerKey,
appId: config.wechat.appId,
mchId: config.wechat.mchId,
notifyUrl: "http://xxxxxxxxxxxxxx/notify/",
pfx: fs.readFileSync("apiclient_cert.p12")
};
var payment = new Payment(initConfig);
/**
* 支付授权
* state 传递的参数
**/
router.get('/auth', function(req, res){
var url = client.getAuthorizeURL('http://xxxxxxx/支付授权目录',state, 'snsapi_userinfo');
res.redirect(url);
});
/**
* 支付
**/
router.get('/支付授权目录', function(req, res) {
client.getAccessToken(code, function (err, result) {
var openid = result.data.openid;
var order = {
body: '微信支付',
attach: '微信支付',
out_trade_no: '订单号(自己生成的,支付成功微信会返回)',
total_fee: '支付金额(单位是分)',
spbill_create_ip: '服务器ip',
openid: '微信支付的openid',
trade_type: 'JSAPI'
};
payment.getBrandWCPayRequestParams(order, function(err, payargs){
if(err) {
log.error(err);
}
res.render('微信支付付款页面', {
appId: payargs.appId,
timeStamp: payargs.timeStamp,
nonceStr: payargs.nonceStr,
package: payargs.package,
signType: payargs.signType,
paySign: payargs.paySign,
body:body,
total:total,
num:num,
proname:project_name,
state:state
});
});
});
});
/**
* 微信支付回调
*(点击支付后微信回调的目录)
*/
router.post('/notify', middleware(initConfig).getNotify().done(function(message, req, res, next) {
console.log(message);//微信返回的数据
if(message.return_code == 'SUCCESS' && message.result_code == 'SUCCESS'){
//这里你可以写支付成功后的操作
}
}));
// 导出
module.exports = router;
pay.html