Closed QC2168 closed 2 months ago
await server.handlePaid(async data => {
const orderNumber = data.out_trade_no;
const payerOpenid = data.payer.openid;
const payNumber = data.transaction_id;
// 这里可以访问到数据
console.log({
orderNumber,
payerOpenid,
payNumber
});
// 获取订单,并把交易状态改为已完成
// ! 这里无法使用,无报错无警告
const check = await this.ctx.model.Payments.update({
paymentStatus: 1,
openid: payerOpenid,
payNumber
}, {
where: {
orderNumber
}
})
// check也不打印
console.log({ check });
})
这个更新的代码我单独跑是可以更新到的,但是在回调这里更新不了,我在回调里试了this.ctx.model.payments.findone
,可以查询到数据
最后的 console.log({ check });
不打印,说明前面的 update
操作报错了,你可以 try catch
看下错误原因。sdk包执行的时候,如果捕获到未处理的错误,会认为业务处理失败。
handlePaid
本身不执行闭包,闭包里 return true
表示业务处理成功,微信也就不会再重推消息。
server.serve()
的时候才是真的执行,它执行完会返回一个 Response 对象,你需要把对象的内容输出。如:
const server = app.getServer();
server.handlePaid(async message => {
// ...
return true; // 也可以不返回,只要闭包不报错,就认为业务处理成功。
});
const response = await server.serve();
ctx.type = response.getHeader('content-type');
ctx.body = response.getBody();
是不是回调函数里面返回true
时,才执行
const response = await server.serve();
ctx.type = response.getHeader('content-type');
ctx.body = response.getBody();
如果回调是false
。那就不执行上面这个response
的代码
这个是
php
的代码,在node
中我现在接口返回的是ctx.body = server.serve()
,不知道是否正确另外我发现一个问题,我在handlePaid函数里面进行模型
update
数据并不生效,是因为回调的问题吗,我是使用箭头函数,this
应该是能2访问的