logo
1
37
WeChat Login

可以创建订单,并生成本地二维码,也能支付成功,但查询不到订单。#243

Resolved
created 2025-09-05
Edit

云开发环境ID

sanlinbiaoda-9g8px9hp14c6883f

问题描述

订单查询代码:

const cloud = require('wx-server-sdk');
const { Wechatpay, Formatter, Rsa } = require('wechatpay-axios-plugin');
const axios = require('axios');
const crypto = require('crypto');
cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV });

exports.main = async (event, context) => {
  // 1. 初始化返回结构(严格遵循团队规范)
  const responseTemplate = {
    eCode: 0,
    remark: event.remark || "",
    message: "操作成功",
    functionName: context.functionName,
    data: {}
  };
  try {
    // 2. 参数校验(双重验证)
    const { action, orderId } = event;
    if (action !== "check") {
      return { 
        ...responseTemplate,
        eCode: 1001,
        message: "Invalid action type"
      };
    )
    if (!orderId || typeof orderId !== 'string' || orderId.length < 6) {
      return {
        ...responseTemplate,
        eCode: 1004,
        message: "订单号格式错误"
      };
    }
    // 3. 证书获取(复用payment-generate的缓存机制)
    const CERT_CACHE_KEY = 'wxpay_cert_cache';
    let privateKey, platformCert;
   if (cloud[CERT_CACHE_KEY]) {
      ({ privateKey, platformCert } = cloud[CERT_CACHE_KEY]);
    } else {
      const fileList = [
        'cloud://sanlinbiao/ssl/apiclient_key.pem',
        'cloud://sanlinda/ssl/wechatpay_3446A5267DEB167***3.pem'
      ];
      const tempUrls = await cloud.getTempFileURL({ fileList });
      const [keyRes, certRes] = await Promise.all([
        axios.get(tempUrls.fileList[0].tempFileURL),
        axios.get(tempUrls.fileList[1].tempFileURL)
      ]);
      privateKey = keyRes.data;
      platformCert = certRes.data;
      cloud[CERT_CACHE_KEY] = { privateKey, platformCert };
    }
    // 4. 支付初始化
    const wxpay = new Wechatpay({
      mchid: '1678**726',
      serial: '3A22B04C****270A8F950F4C',
      privateKey,
      certs: { '3446A5267***6AB2516707F3': platformCert }
    });
    // 5. 调用微信支付订单查询接口
    // 方案一:使用 outTradeNo 方法,并传入包含 mchid 的参数对象
    // 5. 调用微信支付订单查询接口 - 【修改方案】
    // 5. 调用微信支付订单查询接口
console.log('sign0903 Attempting to query order with URL:', `/v3/pay/transactions/out-trade-no/${orderId}?mchid=1678507726`);
// 使用基础request方法(绕过高级封装)
const result = await wxpay.request({
  url: `/v3/pay/transactions/out-trade-no/${orderId}?mchid=167**7726`,
  method: 'GET'
});
console.log('sign0903 Query result:', result.data);
    // 6. 解析支付状态
    const { trade_state, amount } = result.data;
    const paidStatusMap = {
      SUCCESS: true,    // 支付成功
      REFUND: false,    // 转入退款
      NOTPAY: false,    // 未支付
      CLOSED: false,    // 已关闭
      REVOKED: false,   // 已撤销
      USERPAYING: false // 用户支付中
    };
    return {
      ...responseTemplate,
      data: {
        paid: paidStatusMap[trade_state] || false,
        amount: amount?.total || 0,
        tradeState: trade_state,
        currency: amount?.currency || 'CNY'
      }
    };
  } catch (error) {
    // 7. 错误处理(严格遵循规范格式)
    const errRes = {
      ...responseTemplate,
      eCode: 5001,
      message: "订单查询异常",
      data: {
        errorType: "ORDER_QUERY_FAILED",
        detail: error.response?.data || error.message
      }
    };
    // 8. 特定错误码优化
    if (error.response?.status) {
      switch(error.response.status) {
        case 404: // 订单不存在
          errRes.eCode = 4001;
          errRes.message = "订单不存在或已过期";
          break
        case 401: // 认证失败
          errRes.eCode = 4002;
          errRes.message = "支付凭证校验失败";
          break;
      }
    }
    console.error('ORDER_QUERY_ERROR', errRes);
    return errRes;
  )
};
// 检查支付状态
// wx.cloud.callFunction({
//   name: 'payment-check',
//   data: {
//     action: 'check',
//     orderId: 'ORDER123',
//     remark: '用户订单跟踪标记'
//   },
//   success: res => {
//     const { eCode, data } = res.result;
//     if (eCode === 0) {
//       console.log(`订单状态: ${data.paid ? '已支付' : '未支付'}`);
//     } else {
//       wx.showToast({ title: `查询失败:${res.result.message}` });
//     }
//   }
// });

报错日志:
[03 23:24:22.406] [Debug] [qrc:/qt/qml/xiao****ng/qml/singleUse/CXYQRCodeDialog.qml:170] [checkPaymentStatus] sign 0903 jsonD= {"action":"check","orderId":"ORD1756901726370DC50EFC1","remark":""}

[03 23:24:22.673] [Debug] [D:\workxiaoyang\git\xiaoy**oting\src\interface\cxycmdobject.cpp:58] [void __cdecl CXYCmdObject::{ctor}::<lambda_8898810f9244c0810838edc138ea559f>::operator ()(const class QJsonDocument &) const] Function called514, response: "{\n "errcode": 0,\n "errmsg": "ok",\n "resp_data": "{\"eCode\":4001,\"remark\":\"\",\"message\":\"订单不存在或已过期\",\"data\":{\"errorType\":\"ORDER_QUERY_FAILED\",\"detail\":\"\\r\\n404 Not Found\\r\\n<body bgcolor=\\\"white\\\">\\r\\n

404 Not Found

\\r\\n
nginx\\r\\n\\r\\n\\r\\n\"}}"\n}\n"

问题描述:一直提示我查不到订单,很多信息,例如商户号,密钥我都核对过了,是正确的。单看代码谁可以给出问题原因吗?
订单信息:d5ea361f-89ca-4421-9e7f-cdeb44863138.png

原贴

Administrator

wxpay sdk 问题需要在那边社区提问

added labels
非云开发问题
Resolved ISSUE
Assignee
None yet
Label
类型:非云开发问题
Priority
None yet
Time period
-
Property
Add custom properties to record and label key information
Participant