On this page
创建订单和微信支付
安装插件:egg-tenpay
shell
npm i egg-tenpay --save
配置:
js
// config/plugin.js
tenpay: {
enable: true,
package: 'egg-tenpay'
}
//config/config.default.js
config.webUrl = 'http://127.0.0.1:7001'
// 微信支付配置(最好改成你自己的)
config.tenpay = {
client: {
appid: 'wxc559eade7d0a3bde',
mchid: '1554108981',
partnerKey: '8b07811ec793049f1c97793464c7049f',
notify_url: config.webUrl + '/api/gift/notify',
// sandbox: true
}
};
控制器:app/controller/api/gift.js
js
// 微信支付
async wxpay() {
const { ctx,app } = this;
let user_id = ctx.authUser.id
// 参数验证
ctx.validate({
price:{
type:"int",
required:true,
desc:"充值费用"
}
})
const { price } = ctx.request.body
if(price < 1){
return ctx.apiFail('至少充值1元')
}
// 创建订单
let no = ctx.randomString(20)
let order = await app.model.Order.create({
no,
user_id,
price
})
if(!order){
return ctx.apiFail('创建订单失败')
}
// 支付
const result = await app.tenpay.getAppParams({
out_trade_no:no,
body: '支付测试',
total_fee: price * 100,
trade_type: "APP"
});
// ctx.logger.error('开始支付');
// ctx.logger.error(result);
ctx.apiSuccess(result);
}
// 支付回调
async notify() {
const { ctx,app,service } = this;
let info = ctx.request.weixin;
if(!info || info.result_code !== 'SUCCESS'){
return ctx.reply('支付失败');
}
// 查询当前订单
let order = await app.model.Order.findOne({
where:{
no:info.out_trade_no
}
})
if(!order){
return ctx.reply('订单不存在');
}
// 修改订单状态
order.status = 'success'
order.save()
// 修改用户余额
let user = await service.user.exist(order.user_id)
if(user){
user.coin += parseInt(info.total_fee)/100
user.save()
}
// 回复消息(参数为空回复成功, 传值则为错误消息)
ctx.reply();
}
路由:app/router.js
js
router.post("/api/gift/wxpay", controller.api.gift.wxpay);
router.post(
"/api/gift/notify",
app.middleware.tenpay("pay", app),
controller.api.gift.notify,
);