uniapp 商家转账如何确认收款

在uniapp中实现商家转账功能后,如何确认对方是否已成功收款?是通过回调通知还是需要手动查询交易状态?具体应该调用哪个API或查看哪个数据字段来判断收款完成?求有经验的大佬分享下实现方案和注意事项!

2 回复

在uniapp中,商家转账确认收款通常通过以下方式:

  1. 调用微信/支付宝API查询转账状态
  2. 接收异步回调通知
  3. 检查商户后台交易记录
  4. 核对账户余额变动

建议使用官方支付插件,处理回调验证签名,确保交易安全可靠。


在 UniApp 中,商家转账的收款确认通常依赖于后端支付接口的回调通知机制。以下是实现步骤和关键代码示例:

实现步骤

  1. 调用转账 API:商家通过后端调用微信/支付宝的转账接口发起转账。
  2. 异步通知:支付平台处理完成后,向你的服务器发送异步通知(Webhook)。
  3. 验证并更新状态:后端验证通知签名,确认转账成功,并更新订单状态。
  4. 前端状态同步:前端可通过轮询或 WebSocket 获取最新状态。

关键代码示例(后端部分)

以微信支付为例:

// 1. 后端处理转账回调(Node.js示例)
app.post('/wechat/transfer/notify', (req, res) => {
  const xmlData = req.body;
  // 验证签名(需使用微信支付密钥)
  if (validateSignature(xmlData)) {
    if (xmlData.result_code === 'SUCCESS') {
      // 更新数据库:将转账订单状态改为“已收款”
      updateOrderStatus(xmlData.partner_trade_no, 'SUCCESS');
      res.send('<xml><return_code><![CDATA[SUCCESS]]></return_code></xml>');
    }
  } else {
    res.status(400).send('Signature verification failed');
  }
});

前端状态查询(UniApp)

// 轮询查询订单状态
function checkTransferStatus(orderNo) {
  setInterval(async () => {
    const res = await uni.request({
      url: '/api/order/status',
      data: { orderNo }
    });
    if (res.data.status === 'SUCCESS') {
      console.log('收款确认成功');
      clearInterval(this.timer);
    }
  }, 3000);
}

注意事项

  • 安全性:务必验证回调签名,防止伪造请求。
  • 幂等性:同一通知可能多次发送,需确保处理逻辑的幂等性。
  • 平台差异:支付宝和微信的回调机制不同,需分别适配。

建议结合具体支付平台文档实现,确保符合官方规范。

回到顶部