uni-app uni.requestPayment在鸿蒙支付宝支付成功之后返回支付失败

发布于 1周前 作者 songsunli 来自 Uni-App

uni-app uni.requestPayment在鸿蒙支付宝支付成功之后返回支付失败

开发环境 版本号 项目创建方式
Mac macOS Monterey 13.2 (22D49) HBuilderX
4.28
HarmonyOS NEXT HarmonyOS NEXT Developer Beta2
华为
Mate 60

示例代码:

function aliPay(orderInfo) {
uni.requestPayment({
provider: 'alipay',
orderInfo: orderInfo, //微信、支付宝订单数据
success: function(res) {
console.log('success:' + JSON.stringify(res));
},
fail: function(err) {
console.log('fail:' + JSON.stringify(err));
common.showToast('支付失败')
}
});
}

操作步骤:

function aliPay(orderInfo) {
uni.requestPayment({
provider: 'alipay',
orderInfo: orderInfo, //微信、支付宝订单数据
success: function(res) {
console.log('success:' + JSON.stringify(res));
let param = {
txnscene: txnscene.value
}
common.replace('TicketOrderList', param)
},
fail: function(err) {
console.log('fail:' + JSON.stringify(err));
common.showToast('支付失败')
}
});
}

预期结果:

返回App提示支付成功

实际结果:

返回App提示支付失败

bug描述:

uni.requestPayment唤起支付宝支付,支付成功之后返回App,直接直接走了fail方法,日志打印fail:{“errMsg”:“requestPayment:fail Other payment errors.”}


更多关于uni-app uni.requestPayment在鸿蒙支付宝支付成功之后返回支付失败的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

6 回复

这个问题会在下个版本修复,请留意 HbuilderX alpha 版的更新。

更多关于uni-app uni.requestPayment在鸿蒙支付宝支付成功之后返回支付失败的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


下个版本预计什么时候出来呢

请问现在修复了吗?

哥您好,想请教一下您的orderInfo字段生成的方法可以吗,是否可以截取一下相关代码截图;我在生成orderInfo出问题了,实在感谢

您好,在RSA2签名的时候 总是签名失败,可以咨询一下您用的什么插件生成的吗 还是后台生成的?

在处理 uni-app 中使用 uni.requestPayment 进行鸿蒙支付宝支付时,如果支付成功但返回支付失败的情况,这通常可能是由于支付回调处理不当或系统状态不一致导致的。为了排查和解决这个问题,我们需要确保支付回调逻辑正确,并且能够准确处理支付结果。

以下是一个简化的示例代码,展示了如何在 uni-app 中使用 uni.requestPayment 进行支付,并处理支付回调。请注意,这只是一个示例,实际应用中你可能需要根据具体的业务逻辑进行调整。

// 发起支付请求
function requestPayment() {
  uni.requestPayment({
    timeStamp: '', // 订单时间戳,从 1970 年 1 月 1 日 00:00:00 至今的秒数,即时间戳
    nonceStr: '', // 随机字符串,不长于 32 位
    package: '', // 统一下单接口返回的 prepay_id 参数值,提交格式如:prepay_id=***
    signType: 'MD5', // 签名方式,默认为 'SHA1',使用 'MD5' 时,字符串为 32 位小写
    paySign: '', // 签名,具体签名方案参见微信公众号支付帮助文档
    success: (res) => {
      console.log('支付成功', res);
      // 支付成功的后续处理,比如更新订单状态等
    },
    fail: (err) => {
      console.error('支付失败', err);
      // 支付失败的后续处理,比如提示用户重试等
      // 特别注意:此处可能接收到支付成功的回调但由于某些原因返回失败,需要额外处理
      if (err.errMsg === 'requestPayment:fail cancel') {
        // 用户取消支付
      } else if (err.errMsg === 'requestPayment:fail') {
        // 其他支付失败原因,可能需要进一步排查
        // 假设这里我们怀疑支付成功但回调失败,可以发起一个查询支付状态的请求
        checkPaymentStatus();
      }
    },
    complete: () => {
      // 支付请求完成的回调,无论成功或失败都会执行
    }
  });
}

// 查询支付状态(示例函数,具体实现需根据业务逻辑)
function checkPaymentStatus() {
  // 发起一个请求到服务器,查询订单的支付状态
  uni.request({
    url: 'https://your-server.com/api/check-payment-status',
    method: 'POST',
    data: {
      orderId: 'your-order-id'
    },
    success: (res) => {
      if (res.data.status === 'SUCCESS') {
        // 支付确实成功,但回调失败,执行相应的后续处理
        console.log('支付状态查询成功,订单已支付');
      } else {
        // 支付失败或待支付状态,执行相应的处理
        console.log('支付状态查询失败或待支付', res.data);
      }
    },
    fail: (err) => {
      console.error('查询支付状态失败', err);
    }
  });
}

在上面的代码中,requestPayment 函数用于发起支付请求,并在支付成功或失败时执行相应的回调。如果支付失败且错误消息为通用失败(requestPayment:fail),则调用 checkPaymentStatus 函数来查询订单的支付状态,以确保支付结果的准确性。这可以帮助解决支付成功但回调失败的问题。

回到顶部