可以创建订单,并生成本地二维码,也能支付成功,但查询不到订单。#243
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
问题描述:一直提示我查不到订单,很多信息,例如商户号,密钥我都核对过了,是正确的。单看代码谁可以给出问题原因吗? 订单信息:
原贴
wxpay sdk 问题需要在那边社区提问
云开发环境ID
sanlinbiaoda-9g8px9hp14c6883f
问题描述
订单查询代码:
报错日志:
[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\\nnginx\\r\\n\\r\\n\\r\\n\"}}"\n}\n"
问题描述:一直提示我查不到订单,很多信息,例如商户号,密钥我都核对过了,是正确的。单看代码谁可以给出问题原因吗?
订单信息:
原贴